<?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>220257</bug_id>
          
          <creation_ts>2021-01-04 17:23:19 -0800</creation_ts>
          <short_desc>Remove non-inclusive language from copy of JetStream 2.0 in Websites/</short_desc>
          <delta_ts>2021-01-05 12:59:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Local 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>
          
          <blocked>213092</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1717213</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2021-01-04 17:23:19 -0800</bug_when>
    <thetext>In https://bugs.webkit.org/show_bug.cgi?id=220109 , I removed non-inclusive language from the copy of JetStream 2.0 in PerformanceTests. I ignored the second copy in Websites when I have having trouble getting the patch to apply to the bots. Here is there patch for Websites/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717214</commentid>
    <comment_count>1</comment_count>
      <attachid>416966</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2021-01-04 17:26:05 -0800</bug_when>
    <thetext>Created attachment 416966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717360</commentid>
    <comment_count>2</comment_count>
      <attachid>417015</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2021-01-05 09:58:16 -0800</bug_when>
    <thetext>Created attachment 417015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717441</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-05 12:58:17 -0800</bug_when>
    <thetext>Committed r271172: &lt;https://trac.webkit.org/changeset/271172&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417015.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717442</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-05 12:59:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/72825754&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416966</attachid>
            <date>2021-01-04 17:26:05 -0800</date>
            <delta_ts>2021-01-05 09:58:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>1396358</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzExNDApCisr
KyBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDIxLTAxLTA0ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4K
KworICAgICAgICBSZW1vdmUgbm9uLWluY2x1c2l2ZSBsYW5ndWFnZSBmcm9tIGNvcHkgb2YgSmV0
U3RyZWFtIDIuMCBpbiBXZWJzaXRlcy8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogSmV0U3RyZWFtMi4wL2NvZGUtbG9hZC9pbnNwZWN0b3ItcGF5bG9h
ZC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLldlYkluc3BlY3Rvci5SZXNvdXJj
ZS5XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0V2l0aFN1
YnN0aXR1dGlvblN0cmluZy5zdHlsZUZvcm1hdHRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RE9NTm9kZS5XZWJJbnNwZWN0b3IuUmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Vmlldy5wcm90b3R5cGUuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuaXNBbGxvd2xpc3Rl
ZFByb3BlcnR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLldlYkluc3BlY3Rvci5S
ZXNvdXJjZS5XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0
V2l0aFN1YnN0aXR1dGlvblN0cmluZy5pc1doaXRlbGlzdGVkUHJvcGVydHkpOiBEZWxldGVkLgor
ICAgICAgICAqIEpldFN0cmVhbTIuMC93ZWItdG9vbGluZy1iZW5jaG1hcmsvYnJvd3Nlci5qczoK
KyAgICAgICAgKiBKZXRTdHJlYW0yLjAvd2ViLXRvb2xpbmctYmVuY2htYXJrL2NsaS5qczoKKwog
MjAxOS0wOS0xOCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJHUFVdIFVwZGF0ZSBkZW1vcyB0byB3b3JrIG9uIFNUUCA5MgpJbmRleDogV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvY29kZS1sb2FkL2luc3BlY3Rvci1w
YXlsb2FkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvSmV0U3Ry
ZWFtMi4wL2NvZGUtbG9hZC9pbnNwZWN0b3ItcGF5bG9hZC5qcwkocmV2aXNpb24gMjcxMTM5KQor
KysgV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvY29kZS1sb2FkL2luc3Bl
Y3Rvci1wYXlsb2FkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01ODA5LDkgKzU4MDksOSBAQCBmdW5j
dGlvbiBmbG9hdEZvcm1hdHRlcihvYmosdG9rZW4pCiBmdW5jdGlvbiBpbnRlZ2VyRm9ybWF0dGVy
KG9iaikKIHtsZXQgdmFsdWU9dHlwZW9mIG9iai52YWx1ZT09PSJudW1iZXIiP29iai52YWx1ZTpv
YmouZGVzY3JpcHRpb247cmV0dXJuIFN0cmluZy5zdGFuZGFyZEZvcm1hdHRlcnMuZCh2YWx1ZSk7
fQogdmFyIGN1cnJlbnRTdHlsZT1udWxsO2Z1bmN0aW9uIHN0eWxlRm9ybWF0dGVyKG9iaikKLXtj
dXJyZW50U3R5bGU9e307dmFyIGJ1ZmZlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7
YnVmZmVyLnNldEF0dHJpYnV0ZSgic3R5bGUiLG9iai5kZXNjcmlwdGlvbik7Zm9yKHZhciBpPTA7
aTxidWZmZXIuc3R5bGUubGVuZ3RoO2krKyl7dmFyIHByb3BlcnR5PWJ1ZmZlci5zdHlsZVtpXTtp
Zihpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpKQore2N1cnJlbnRTdHlsZT17fTt2YXIg
YnVmZmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtidWZmZXIuc2V0QXR0cmlidXRl
KCJzdHlsZSIsb2JqLmRlc2NyaXB0aW9uKTtmb3IodmFyIGk9MDtpPGJ1ZmZlci5zdHlsZS5sZW5n
dGg7aSsrKXt2YXIgcHJvcGVydHk9YnVmZmVyLnN0eWxlW2ldO2lmKGlzQWxsb3dsaXN0ZWRQcm9w
ZXJ0eShwcm9wZXJ0eSkpCiBjdXJyZW50U3R5bGVbcHJvcGVydHldPWJ1ZmZlci5zdHlsZVtwcm9w
ZXJ0eV07fX0KLWZ1bmN0aW9uIGlzV2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkKK2Z1bmN0
aW9uIGlzQWxsb3dsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkKIHtmb3IodmFyIHByZWZpeCBvZlsi
YmFja2dyb3VuZCIsImJvcmRlciIsImNvbG9yIiwiZm9udCIsImxpbmUiLCJtYXJnaW4iLCJwYWRk
aW5nIiwidGV4dCJdKXtpZihwcm9wZXJ0eS5zdGFydHNXaXRoKHByZWZpeCl8fHByb3BlcnR5LnN0
YXJ0c1dpdGgoIi13ZWJraXQtIitwcmVmaXgpKQogcmV0dXJuIHRydWU7fQogcmV0dXJuIGZhbHNl
O30KSW5kZXg6IFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvSmV0U3RyZWFtMi4wL3dlYi10b29s
aW5nLWJlbmNobWFyay9icm93c2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvSmV0U3RyZWFtMi4wL3dlYi10b29saW5nLWJlbmNobWFyay9icm93c2VyLmpzCShy
ZXZpc2lvbiAyNzExMzkpCisrKyBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0cmVhbTIu
MC93ZWItdG9vbGluZy1iZW5jaG1hcmsvYnJvd3Nlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAz
ODgsMTUgKzEwMzg4LDE1IEBAIHRyYXZlcnNlLnJlbW92ZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAo
dHIKICAgcmV0dXJuIHRyZWU7CiB9OwogCi1mdW5jdGlvbiBoYXNCbGFja2xpc3RlZFR5cGUocGF0
aCwgc3RhdGUpIHsKK2Z1bmN0aW9uIGhhc0Jsb2NrbGlzdGVkVHlwZShwYXRoLCBzdGF0ZSkgewog
ICBpZiAocGF0aC5ub2RlLnR5cGUgPT09IHN0YXRlLnR5cGUpIHsKICAgICBzdGF0ZS5oYXMgPSB0
cnVlOwogICAgIHBhdGguc3RvcCgpOwogICB9CiB9CiAKLXRyYXZlcnNlLmhhc1R5cGUgPSBmdW5j
dGlvbiAodHJlZSwgc2NvcGUsIHR5cGUsIGJsYWNrbGlzdFR5cGVzKSB7Ci0gIGlmICgoMCwgX2lu
Y2x1ZGVzMi5kZWZhdWx0KShibGFja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNl
OwordHJhdmVyc2UuaGFzVHlwZSA9IGZ1bmN0aW9uICh0cmVlLCBzY29wZSwgdHlwZSwgYmxvY2ts
aXN0VHlwZXMpIHsKKyAgaWYgKCgwLCBfaW5jbHVkZXMyLmRlZmF1bHQpKGJsb2NrbGlzdFR5cGVz
LCB0cmVlLnR5cGUpKSByZXR1cm4gZmFsc2U7CiAKICAgaWYgKHRyZWUudHlwZSA9PT0gdHlwZSkg
cmV0dXJuIHRydWU7CiAKQEAgLTEwNDA2LDggKzEwNDA2LDggQEAgdHJhdmVyc2UuaGFzVHlwZSA9
IGZ1bmN0aW9uICh0cmVlLCBzY29wZQogICB9OwogCiAgIHRyYXZlcnNlKHRyZWUsIHsKLSAgICBi
bGFja2xpc3Q6IGJsYWNrbGlzdFR5cGVzLAotICAgIGVudGVyOiBoYXNCbGFja2xpc3RlZFR5cGUK
KyAgICBibG9ja2xpc3Q6IGJsb2NrbGlzdFR5cGVzLAorICAgIGVudGVyOiBoYXNCbG9ja2xpc3Rl
ZFR5cGUKICAgfSwgc2NvcGUsIHN0YXRlKTsKIAogICByZXR1cm4gc3RhdGUuaGFzOwpAQCAtMzY5
NzMsNyArMzY5NzMsNyBAQCBmdW5jdGlvbiBUeXBlZEFycmF5U3BlY2llc0NyZWF0ZShyZWFsbSwg
CiB2YXIgcHJvbWlzZUV4aXN0cyA9IHR5cGVvZiBQcm9taXNlID09PSAnZnVuY3Rpb24nOwogCiAv
KiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqLwotdmFyIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBz
ZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUg
aWQtYmxhY2tsaXN0Cit2YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3Qn
ID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibG9ja2xpc3QKIAog
dmFyIHN5bWJvbEV4aXN0cyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnOwogdmFyIG1h
cEV4aXN0cyA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnOwpAQCAtMTEzNTg3LDcgKzExMzU4
Nyw3IEBAIG1vZHVsZS5leHBvcnRzID0gIntcInZlcnNpb25cIjozLFwic291cmMKIC8qIDQwNSAq
LwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9
ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNyBbVmFsZXJpbyBQ
cm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBcbi8qIVxuV2ViIEJ1aWxkOiBodHRw
czovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5YWU3MTY3YzU4MDdiMTczZDVkZWZm
NjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxuZGVzY3JpcHRpb246IFRoZSBoZWFy
dCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNvcHlyaWdo
dDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0
aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUgTW9vVG9vbHMgcHJvZHVjdGlvbiB0
ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMvKVxuXG5pbnNwaXJhdGlvbjpcbiAg
LSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFzZS5qc10oaHR0cDovL2RlYW4u
ZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5cmlnaHQgKGMpIDIwMDYgRGVh
biBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXShodHRwOi8vb3Bl
bnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocClcbiAgLSBTb21lIGZ1bmN0aW9u
YWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDovL3Byb3RvdHlwZWpzLm9yZykg
Q29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24sIFtNSVQgTGljZW5zZV0oaHR0
cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcblxucHJvdmlkZXM6
IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0YW5jZU9mLCBOYXRpdmVdXG5cbi4u
LlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFs
ZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLykuKi9cbihmdW5jdGlv
bigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9uOiAnMS42LjAnLFxuXHRidWlsZDog
JzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVlOTVlMmInXG59O1xuXG4vLyB0eXBl
T2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMudHlwZU9mID0gZnVuY3Rpb24oaXRl
bSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cdGlmIChpdGVtLiRmYW1p
bHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xuXG5cdGlmIChpdGVtLm5vZGVOYW1l
KXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gJ2VsZW1lbnQnO1xuXHRcdGlm
IChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8pLnRlc3QoaXRlbS5ub2RlVmFsdWUp
ID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBlbHNlIGlmICh0eXBlb2YgaXRlbS5s
ZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVlJyBpbiBpdGVtKSByZXR1cm4gJ2Fy
Z3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1cm4gJ2NvbGxlY3Rpb24nO1xu
XHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxudmFyIGluc3RhbmNlT2YgPSB0aGlz
Lmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qpe1xuXHRpZiAoaXRlbSA9PSBudWxs
KSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9IGl0ZW0uJGNvbnN0cnVjdG9yIHx8
IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1Y3Rvcil7XG5cdFx0aWYgKGNvbnN0
cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRcdGNvbnN0cnVjdG9yID0gY29uc3Ry
dWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5cdGlmICghaXRlbS5oYXNPd25Qcm9w
ZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9cblx0cmV0dXJuIGl0ZW0gaW5zdGFu
Y2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFyIGVudW1lcmFibGVzID0gdHJ1ZTtc
bmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVyYWJsZXMgPSBudWxsO1xuaWYgKGVu
dW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJvcGVydHknLCAndmFsdWVPZicsICdp
c1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5nJywg
J3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlvbiBmb3JFYWNoT2JqZWN0RW51bWJl
cmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChlbnVtZXJhYmxlcykgZm9yICh2YXIg
aSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGsgPSBlbnVtZXJhYmxlc1tp
XTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28gb3ZlcmxvYWRTZXR0ZXIgY2Fu
IGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1bmN0aW9uLCB3aXRob3V0IHN3YXBw
aW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBm
bi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1cbi8qPC9sdElFOD4qL1xuXG4vLyBG
dW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24gPSB0aGlzLkZ1bmN0aW9uO1xuXG5G
dW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xu
XHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoYSA9
PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1cmFsIHx8IHR5cGVvZiBhICE9ICdz
dHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2VsZi5jYWxsKHRoaXMsIGssIGFba10p
O1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShh
LCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRz
ZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xufTtc
blxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFs
KXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSl7XG5cdFx0dmFyIGFy
Z3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0cmluZycpIGFyZ3MgPSBhO1xuXHRc
dGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdzID0gYXJndW1lbnRzO1xuXHRcdGVs
c2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRpZiAoYXJncyl7XG5cdFx0XHRyZXN1
bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgcmVz
dWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1
bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24oa2V5
LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG5G
dW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRo
aXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuLy8gRnJv
bVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbkFycmF5LmNvbnZlcnQg
PSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIFtdO1xuXHRyZXR1
cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnKSA/
ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDogc2xpY2UuY2FsbChpdGVtKSA6IFtp
dGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJu
ICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVt
KXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7XG5cdHJldHVybiBpc0Zpbml0ZShu
dW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmluZy5jb252ZXJ0ID0gZnVuY3Rpb24o
aXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5cblxuRnVuY3Rpb24uZnJvbSA9IEZ1
bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJlci5jb252ZXJ0O1xuU3RyaW5nLmZy
b20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJvdGVjdFxuXG5GdW5jdGlvbi5pbXBs
ZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kaGlkZGVuID0gdHJ1ZTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0OiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8v
IFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlvbihuYW1lLCBvYmplY3Qpe1xu
XHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHZh
ciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiAodHlwZU9mKGl0ZW0p
ID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMnICsgbmFtZV0gPSB0eXBlQ2hlY2s7
XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9iamVjdC5wcm90b3R5cGUuJGZhbWls
eSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93ZXI7XG5cdFx0XHR9KS5oaWRlKCk7
XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiBudWxs
O1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVjdC4kY29uc3RydWN0b3IgPSBUeXBl
O1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG9iamVjdDtcblxuXHRyZXR1cm4g
b2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztc
blxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIChpdGVtICE9
IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYmIHRvU3RyaW5nLmNhbGwo
aXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtcblxudmFyIGhvb2tzID0ge307XG5c
bnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0dmFyIHR5cGUgPSB0eXBlT2Yob2Jq
ZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBlXSB8fCAoaG9va3NbdHlwZV0gPSBb
XSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYg
KG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXG5cdHZhciBob29rcyA9IGhvb2tz
T2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKyl7XG5c
dFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlwZU9mKGhvb2spID09ICd0eXBlJykg
aW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtcblx0XHRlbHNlIGhvb2suY2FsbCh0
aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHByZXZpb3VzID0gdGhpcy5wcm90b3R5
cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVk
KSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxuXHRpZiAodGhpc1tuYW1lXSA9PSBu
dWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxsKHRoaXMsIG5h
bWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRob2QuYXBwbHkoaXRlbSwgc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52YXIgZXh0ZW5kID0gZnVuY3Rpb24o
bmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xu
XHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAh
cHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDtcbn07XG5cblR5cGUuaW1w
bGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpLFxuXG5c
dGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5cblx0YWxpYXM6IGZ1bmN0aW9uKG5h
bWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0aGlzLCBuYW1lLCB0aGlzLnByb3Rv
dHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0bWlycm9yOiBmdW5j
dGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2goaG9vayk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywgVHlwZSk7XG5cbi8vIERlZmF1bHQg
VHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0LCBtZXRob2RzKXtcblx0
dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0XHRwcm90b3R5cGUgPSBvYmplY3Qu
cHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9IG5ldyBUeXBlKG5hbWUsIG9iamVj
dCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRnZW5lcmljID0gb2JqZWN0W2tleV0s
XG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5cdFx0aWYgKGdlbmVyaWMpIGdlbmVy
aWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJvdG8pIG9iamVjdC5pbXBsZW1lbnQo
a2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYgKGlzVHlwZSl7XG5cdFx0dmFyIG1l
dGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKG1ldGhvZHNb
MF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYg
KCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsg
aSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVbbWV0aG9k
c1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIHByb3Rv
dHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXldLCBrZXkpO1xuXHRcdH07XG5c
dH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgnU3RyaW5nJywgU3RyaW5nLCBbXG5c
dCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAnY29udGFpbnMnLCAnaW5kZXhPZics
ICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdyZXBsYWNlJywgJ3NlYXJjaCcsXG5c
dCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5nJywgJ3RyaW0nLCAndG9Mb3dl
ckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBBcnJheSwgW1xuXHQncG9wJywgJ3B1
c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2Nv
bmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnZmls
dGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUnLCAncmVkdWNlJywgJ3JlZHVj
ZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51bWJlciwgW1xuXHQndG9FeHBvbmVu
dGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvUHJlY2lzaW9uJ1xuXSkoJ0Z1
bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2NhbGwnLCAnYmluZCdcbl0pKCdSZWdF
eHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0pKCdPYmplY3QnLCBPYmplY3QsIFtc
blx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2tleXMn
LFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgJ2dldE93
blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lvbnMnLCAnaXNFeHRlbnNpYmxlJywg
J3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVuJ1xuXSkoJ0RhdGUnLCBEYXRl
LCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5vdmVybG9hZFNldHRlcigpO1xu
XG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0cmV0dXJuICsobmV3IERhdGUpO1xu
fSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7XG5cbi8vIGZpeGVzIE5hTiByZXR1
cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUuJGZhbWlseSA9IGZ1bmN0aW9uKCl7
XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXInIDogJ251bGwnO1xufS5oaWRlKCk7
XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVuZCgncmFuZG9tJywgZnVuY3Rpb24o
bWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1p
biArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBlYWNoLCBrZXlzXG5cbkFycmF5Lmlt
cGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1c
blx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0
QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9iamVjdCl7XG5cdFx0XHRpZiAoaGFz
T3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2goayk7XG5cdFx0fVxuXHRcdC8q
PGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZnVuY3Rp
b24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7XG5cdFx0Lyo8L2x0SUU4PiovXG5c
dFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDogZnVuY3Rpb24ob2JqZWN0LCBmbiwg
YmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG5c
dFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fSk7XG5c
dH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZvckVhY2g7XG5cblxuLy8gQXJyYXkg
JiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFwcGVuZGluZ1xuXG52YXIgY2xv
bmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5cGVPZihpdGVtKSl7XG5cdFx0Y2Fz
ZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRcdGNhc2UgJ29iamVjdCc6IHJldHVy
biBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIGl0ZW07XG5cdH1cbn07
XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigpe1xuXHR2YXIgaSA9IHRoaXMu
bGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hpbGUgKGktLSkgY2xvbmVbaV0gPSBj
bG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59KTtcblxudmFyIG1lcmdlT25lID0g
ZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRzd2l0Y2ggKHR5cGVPZihjdXJyZW50
KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0eXBlT2Yoc291cmNlW2tleV0pID09
ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1cnJlbnQpO1xuXHRcdFx0ZWxz
ZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTtcblx0XHRcdGJyZWFrO1xuXHRc
dGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50LmNsb25lKCk7IGJyZWFrO1xuXHRc
dGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0fVxuXHRyZXR1cm4gc291cmNlO1xu
fTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1bmN0aW9uKHNvdXJjZSwgaywgdil7
XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1lcmdlT25lKHNvdXJjZSwg
aywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwgb2JqZWN0W2tleV0pO1xuXHRcdH1c
blx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihvYmplY3Qpe1xu
XHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIGNsb25lW2tl
eV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0
YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1
bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBleHRlbmRlZCA9IGFyZ3VtZW50
c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBleHRlbmRlZCkgb3JpZ2luYWxba2V5
XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbDtcblx0fVxuXG59
KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmplY3QnLCAnV2hpdGVTcGFjZScsICdU
ZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cyddLmVhY2goZnVuY3Rpb24obmFtZSl7
XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1ZSBJRFxuXG52YXIgVUlEID0gRGF0
ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5jdGlvbigpe1xuXHRyZXR1
cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxu
bmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEFycmF5IFByb3RvdHlwZXMgbGlr
ZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczogQXJyYXlcblxuLi4uXG4qL1xuXG5B
cnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0ZXZlcnk6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBp
LCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxu
XHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdO1xuXHRc
dGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsr
KSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhpc1tpXTtcblx0XHRcdGlmIChmbi5j
YWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhPZjogZnVuY3Rpb24oaXRlbSwgZnJv
bSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwO1xuXHRcdGZvciAodmFyIGkg
PSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsgZnJvbSkgOiBmcm9tIHx8IDA7IGkg
PCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG5c
dFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKGZuLCBiaW5kKXtc
blx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJlc3VsdHMgPSBBcnJheShsZW5n
dGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKGkg
aW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5c
dFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGks
IHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHQv
KjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmZpbHRl
cihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtICE9IG51bGw7XG5cdFx0fSk7XG5c
dH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXtcblx0XHR2YXIgYXJncyA9IEFy
cmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGl0
ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBwbHkoaXRlbSwgYXJncyk7XG5c
dFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlvbihrZXlzKXtcblx0XHR2YXIgb2Jq
ID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBrZXlzLmxlbmd0aCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tleXNbaV1dID0gdGhpc1tpXTtc
blx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5cdFx0XHRcdGlmIChv
YmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzW2ldO1xu
XHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0
fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdGNvbnRhaW5z
OiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4gdGhpcy5pbmRleE9mKGl0ZW0sIGZy
b20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHRoaXMu
cHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbdGhpcy5s
ZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFuZG9tOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIucmFuZG9tKDAsIHRoaXMubGVuZ3Ro
IC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRp
ZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVtKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuaW5jbHVkZShhcnJheVtpXSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRc
dGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0g
aXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVuZ3RoID0gMDtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcnJheSA9IFtd
O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0XHRpZiAodHlwZSA9PSAnbnVsbCcp
IGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25jYXQoKHR5cGUgPT0gJ2FycmF5JyB8
fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1bWVudHMnIHx8IGluc3RhbmNl
T2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0aGlzW2ldKTtc
blx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5cdHBpY2s6IGZ1bmN0aW9uKCl7XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRp
ZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtcblx0XHR9XG5cdFx0cmV0dXJuIG51
bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5s
ZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJnYiA9IHRoaXMubWFwKGZ1bmN0aW9u
KHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0gMSkgdmFsdWUgKz0gdmFsdWU7XG5c
dFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGFy
cmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0fSxcblxuXHRyZ2JUb0hleDogZnVu
Y3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsO1xuXHRc
dGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAhYXJyYXkpIHJldHVybiAn
dHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0gLSAwKS50b1N0cmluZygxNik7XG5c
dFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyArIGJpdCA6IGJpdCk7XG5cdFx0
fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4LmpvaW4oJycpO1xuXHR9XG5c
bn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlvblxuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0ZSwgYmluZCwgcGFzcywgYW5kIGRl
bGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxu
cHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVuY3Rpb24uZXh0ZW5kKHtcblxuXHRh
dHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxl
bmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXJndW1lbnRz
W2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9
XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKGFy
Z3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcHBseShiaW5kLCBBcnJh
eS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRyZXR1cm4gbnVsbDtc
blx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDogZnVuY3Rpb24odGhhdCl7XG5cdFx0
dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gQXJy
YXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0XHRGID0gZnVuY3Rpb24oKXt9O1xu
XG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBjb250ZXh0ID0gdGhhdCwg
bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlmICh0aGlzIGluc3RhbmNlb2YgYm91
bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJvdG90eXBlO1xuXHRcdFx0XHRjb250
ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gKCFhcmdzICYmICFsZW5n
dGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5cdFx0XHRcdDogc2VsZi5hcHBseShj
b250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0KEFycmF5LnNsaWNlKGFyZ3VtZW50
cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGNvbnRleHQgPT0gdGhhdCA/
IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gYm91bmQ7XG5cdH0sXG5cdC8q
PC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR2YXIg
c2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmNvbnZlcnQo
YXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gc2VsZi5hcHBseShi
aW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fSxcblxuXHRkZWxheTogZnVuY3Rp
b24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KHRoaXMucGFzcygo
YXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRlbGF5KTtcblx0fSxcblxuXHRwZXJp
b2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0
SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgcGVy
aW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IE51bWJlclxuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMgbGlrZSBsaW1pdCwgcm91bmQs
IHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4uXG4qL1xuXG5OdW1iZXIuaW1wbGVt
ZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgpe1xuXHRcdHJldHVybiBNYXRoLm1p
bihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxuXG5cdHJvdW5kOiBmdW5jdGlvbihw
cmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCku
dG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6IDApO1xuXHRcdHJldHVybiBNYXRo
LnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuXHR9LFxuXG5cdHRpbWVzOiBm
dW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzOyBpKyspIGZu
LmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFz
ZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9XG5cbn0pO1xu
XG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxuKGZ1bmN0aW9uKG1hdGgpe1xuXG52
YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdGlmICghTnVt
YmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gTWF0aFtu
YW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKSkp
O1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbn0pKFsnYWJzJywg
J2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAnY29zJywgJ2V4cCcsICdm
bG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywgJ3NxcnQnLCAndGFuJ10p
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgU3Ry
aW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUsIHRlc3QsIGFuZCB0b0lu
dC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZSwgQXJy
YXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xuXG5TdHJpbmcuaW1wbGVtZW50KHtc
blxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24oc3RyaW5nLCBpbmRleCl7XG5cdFx0
cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShpbmRleCkgOiBTdHJpbmcodGhpcykp
LmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwvIUVTNj5cblxuXHR0ZXN0OiBmdW5j
dGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0eXBlT2YocmVnZXgpID09ICdyZWdl
eHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBwYXJhbXMpKS50ZXN0KHRoaXMp
O1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5y
ZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xu
XHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLmNo
YXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGh5cGhlbmF0ZTogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0
aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0Y2guY2hhckF0KDApLnRvTG93ZXJD
YXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxpemU6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16XS9nLCBmdW5jdGlvbihtYXRjaCl7
XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRl
c2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNl
KC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9LFxuXG5cdHRv
SW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAx
MCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9h
dCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciBo
ZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwyfSkoXFx3ezEsMn0pKFxcd3sxLDJ9
KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSkuaGV4VG9SZ2IoYXJyYXkpIDog
bnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciByZ2Ig
PSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xuXHRcdHJldHVybiAocmdiKSA/IHJn
Yi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHN1YnN0aXR1dGU6IGZ1bmN0aW9u
KG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UocmVnZXhw
IHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rpb24obWF0Y2gsIG5hbWUpe1xuXHRc
dFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJldHVybiBtYXRjaC5zbGljZSgxKTtc
blx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8gb2JqZWN0W25hbWVdIDogJyc7
XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEJyb3dzZXJcblxu
ZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFpbnMgQnJvd3NlciBpbml0aWFs
aXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93c2VyIEhhc2guXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBGdW5jdGlvbiwg
TnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3NlciwgV2luZG93LCBEb2N1bWVudF1c
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVu
dDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlzO1xuXG52YXIgcGFyc2UgPSBm
dW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRvTG93ZXJDYXNlKCk7XG5cdHBsYXRm
b3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNhc2UoKSA6ICcnKTtcblxuXHQvLyBj
aHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5lZWQgdG8gY2hlY2sgZm9yIGVk
Z2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBpdCdzIGNocm9tZS5cblx0dmFyIFVB
ID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxkXFwuXSspLyk7XG5cdGlmICghVUEp
e1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94fGNocm9tZXx0cmlkZW50fGNy
aW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/Lio/KHNhZmFyaXwoPzpydltcXHNc
XC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSspfCQpLykgfHwgW251bGwsICd1bmtu
b3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3RyaWRlbnQnKXtcblx0XHRVQVsxXSA9
ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRdO1xuXHR9IGVsc2UgaWYgKFVBWzFd
ID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7XG5cdH1cblxuXHRwbGF0Zm9ybSA9
IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6ICh1YS5tYXRjaCgvKD86d2Vi
b3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51eC8pIHx8IFsnb3RoZXInXSlb
MF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZvcm0gPSAnd2luZG93cyc7XG5cblx0
cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQsXG5cdFx0bmFt
ZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLFxuXHRcdHZlcnNpb246IHBh
cnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0pID8gVUFbNF0gOiBVQVsyXSksXG5c
dFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52YXIgQnJvd3NlciA9IHRoaXMuQnJv
d3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5c
bmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUpe1xuXHRC
cm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbkJyb3dzZXIuZXh0
ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEoZG9jdW1lbnQuZXZhbHVhdGUpLFxu
XHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1ZXJ5OiAhIShkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNPTilcblx0fSxcblx0cGFyc2VVQTog
cGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93c2VyLlJlcXVlc3QgPSAoZnVuY3Rp
b24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBYTUxI
dHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIgPSBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTtcblx0fTtcblxuXHR2YXIg
TVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9z
b2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlv
bigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1MSFRUUDtcblx0fSwgZnVuY3Rpb24o
KXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwyO1xuXHR9LCBmdW5jdGlvbigpe1xu
XHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9KTtcblxufSkoKTtcblxuQnJvd3Nl
ci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpO1xuXG5cblxuLy8gU3RyaW5nIHNj
cmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7XG5cdGlmICghdGV4dCkgcmV0
dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7XG5cdFx0d2luZG93LmV4ZWNTY3Jp
cHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9q
YXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0O1xuXHRcdGRvY3VtZW50LmhlYWQu
YXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlw
dCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJpbmcuaW1wbGVtZW50KCdzdHJpcFNj
cmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlwdHMgPSAnJztcblx0dmFyIHRleHQg
PSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPyk8XFwvc2NyaXB0Pi9naSwg
ZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9IGNvZGUgKyAnXFxuJztcblx0XHRy
ZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1ZSkgQnJvd3Nlci5leGVjKHNjcmlw
dHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhlYyhzY3JpcHRz
LCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8gV2luZG93LCBEb2N1bWVudFxuXG5C
cm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRvY3VtZW50LFxuXHRXaW5kb3c6IHRo
aXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQsXG5cdEV2ZW50OiB0aGlzLkV2ZW50
XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdXaW5k
b3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCd3
aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtc
blx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRoaXMuRG9jdW1lbnQgPSBkb2N1bWVu
dC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigpe30pO1xuXG5k
b2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9jdW1lbnQnKS5oaWRlKCk7XG5c
bkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRkb2N1bWVudFtuYW1l
XSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKSB0
cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dyb3VuZEltYWdlQ2FjaGUnLCBmYWxz
ZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5PiovXG5pZiAodGhpcy5hdHRhY2hF
dmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIHVubG9hZEV2ZW50ID0gZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtc
blx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LndpbmRvdyA9IG51
bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVudCA9IG51bGw7XG5cdH07XG5c
dHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xufVxuXG4vLyBJRSBm
YWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9ucyAocmVmZXJzIHRvIDxzZWxl
Y3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7XG50cnkge1xuXHRhcnJheUZyb20o
ZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2ggKGUpe1xuXHRBcnJheS5jb252ZXJ0
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnICYmIFR5
cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAhPSAnYXJyYXknKXtcblx0XHRc
dHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkpO1xuXHRcdFx0d2hpbGUg
KGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0dXJuIGFycmF5O1xuXHRcdH1cblx0
XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5cdHZhciBwcm90b3R5cGUgPSBBcnJh
eS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUuc2xpY2U7XG5cdFsncG9wJywgJ3B1
c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2Nv
bmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgbWV0
aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25hbWVdID0gZnVuY3Rpb24oaXRlbSl7
XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNvbnZlcnQoaXRlbSksIHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3NcblxuZGVzY3JpcHRpb246IENvbnRhaW5z
IHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0aW5nLCBleHRlbmRpbmcsIGFuZCBp
bXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE51bWJlcl1cblxucHJv
dmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBDbGFzcyA9IHRo
aXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlvbihwYXJhbXMpe1xuXHRpZiAoaW5z
dGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0ge2luaXRpYWxpemU6IHBhcmFtc307
XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRp
ZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLiRjYWxsZXIg
PSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5cdFx0dmFyIHZhbHVlID0gKHRoaXMu
aW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRo
aXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxsO1xuXHRcdHJldHVybiB2
YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7XG5cblx0bmV3Q2xhc3Mu
JGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS4kY29uc3RydWN0b3Ig
PSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9IHBhcmVudDtcblxuXHRy
ZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9IGZ1bmN0aW9uKCl7XG5cdGlmICgh
dGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCJwYXJlbnRcIiBjYW5u
b3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMuJGNhbGxlci4kbmFtZSxcblx0XHRw
YXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxcblx0XHRwcmV2aW91cyA9IChwYXJl
bnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7XG5cdGlmICghcHJldmlvdXMpIHRo
cm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1lICsgJ1wiIGhhcyBubyBwYXJlbnQu
Jyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFy
IHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5c
dFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtc
blx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBGID0gZnVuY3Rpb24oKXt9O1xuXHRc
dFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRvYmplY3Rba2V5XSA9IHJlc2V0KG5l
dyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhcnJheSc6IG9iamVjdFtrZXldID0g
dmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmplY3Q7XG59O1xu
XG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZC4k
b3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0dmFyIHdyYXBwZXIgPSBmdW5jdGlv
bigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlzLiRjYWxsZXIgPT0gbnVsbCkg
dGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtleSArICdcIiBjYW5ub3QgYmUgY2Fs
bGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxlciwgY3VycmVudCA9IHRoaXMuJGNh
bGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuJGNhbGxlciA9IHdyYXBwZXI7
XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHRo
aXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0gY2FsbGVyO1xuXHRcdHJldHVybiBy
ZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRvcmlnaW46IG1ldGhvZCwgJG5hbWU6
IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlv
bihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3MuTXV0YXRvcnMuaGFzT3duUHJvcGVy
dHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9yc1trZXldLmNhbGwodGhpcywgdmFs
dWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0fVxuXG5cdGlmICh0
eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlmICh2YWx1ZS4kaGlkZGVuKSByZXR1
cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0gKHJldGFpbikgPyB2YWx1ZSA6IHdy
YXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0Lm1lcmdlKHRoaXMu
cHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxudmFy
IGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRrbGFzcy4kcHJvdG90eXBpbmcgPSB0
cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRlbGV0ZSBrbGFzcy4kcHJvdG90eXBp
bmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmltcGxlbWVudCgnaW1wbGVtZW50Jywg
aW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFzcy5NdXRhdG9ycyA9IHtcblxuXHRF
eHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMucGFyZW50ID0gcGFyZW50O1xuXHRc
dHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTtcblx0fSxcblxuXHRJbXBsZW1l
bnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29udmVydChpdGVtcykuZWFjaChmdW5j
dGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5ldyBpdGVtO1xuXHRcdFx0Zm9yICh2
YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0aGlzLCBrZXksIGluc3RhbmNlW2tl
eV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgVXRpbGl0eSBDbGFz
c2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBlYXNl
IHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5FeHRyYXMs
IENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnRo
aXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjogW10sXG5cblx0Y2hhaW46IGZ1bmN0
aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENoYWluOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMuJGNoYWluLnNoaWZ0KCkuYXBwbHko
dGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5cdGNsZWFyQ2hhaW46IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59
KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0cmV0dXJuIHN0cmluZy5y
ZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmlyc3Qpe1xuXHRcdHJldHVybiBm
aXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRoaXMuRXZlbnRzID0gbmV3IENsYXNz
KHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4sIGlu
dGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cblx0XHRcblxuXHRcdHRoaXMu
JGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwgW10pLmluY2x1ZGUoZm4pO1xu
XHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciB0eXBl
IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkp
e1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZl
bnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJy
YXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRp
ZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBw
bHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR0eXBlID0gcmVtb3ZlT24o
dHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoZXZl
bnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5kZXggPSBldmVudHMuaW5kZXhPZihm
bik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBldmVudHNbaW5kZXhdO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50
cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtc
blx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRz
W3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoZXZlbnRzKSBldmVu
dHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlwZSBpbiB0aGlzLiRldmVudHMpe1xu
XHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkgY29udGludWU7XG5cdFx0XHR2YXIg
Zm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IGZucy5sZW5ndGg7
IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZm5z
W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnRo
aXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0aW9uczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVjdC5tZXJnZS5hcHBseShudWxsLCBb
e30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykpO1xuXHRcdGlmICh0aGlzLmFkZEV2
ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5cdFx0XHRpZiAodHlwZU9mKG9wdGlv
bnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25bQS1aXS8pLnRlc3Qob3B0aW9uKSkg
Y29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlvbiwgb3B0aW9uc1tvcHRpb25dKTtc
blx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLlRoZW5hYmxlXG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3MgdGhhdCBjYW4gYmUgaW1wbGVt
ZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhlbSBcInRoZW5hYmxlXCIuXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlk
ZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIFNU
QVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQgPSAxLFxuXHRTVEFURV9SRUpFQ1RF
RCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5hYmxlID0gbmV3IENsYXNzKHtcblxu
XHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0JHRoZW5hYmxlUmVzdWx0OiBudWxs
LFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVl
KXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFibGVTdGF0ZTogZnVuY3Rpb24oKXtc
blx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xuXHRcdFx0Y2FzZSBTVEFURV9QRU5E
SU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX0ZVTEZJ
TExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX1JF
SkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztcblx0XHR9XG5cdH0sXG5cblx0cmVz
ZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtc
blx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0aGVuOiBmdW5j
dGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0aWYgKHR5cGVvZiBvbkZ1bGZpbGxl
ZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRpdHknO1xuXHRcdGlmICh0eXBl
b2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWplY3RlZCA9ICdUaHJvd2VyJztcblxu
XHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXG5cdFx0dGhpcy4kdGhlbmFibGVS
ZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhlbmFibGUsXG5cdFx0XHRmdWxmaWxs
SGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RIYW5kbGVyOiBvblJlamVjdGVkXG5c
dFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7
XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0s
XG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5cdFx0cmV0dXJuIHRoaXMudGhl
bihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxuVGhlbmFibGUuZXh0ZW5kKHtcblx0
cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0aGVuYWJsZTtcblx0XHRpZiAodmFs
dWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVuYWJsZSA9IHZhbHVlO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdFx0cmVzb2x2ZSh0
aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5cdHJl
amVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUo
KTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xu
XHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gcmVzb2x2ZSh0aGVu
YWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BF
TkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUpe1xuXHRcdFx0cmVqZWN0KHRoZW5h
YmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEgdGhlbmFibGUgd2l0aCBpdHNl
bGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVj
dCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7XG5cdFx0XHR2YXIgdGhlbjtcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVuO1xuXHRcdFx0fSBjYXRjaCAoZXhj
ZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxu
XHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKXtcblx0XHRcdFx0dmFyIHJlc29s
dmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dHJ5IHtc
blx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0
XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7
XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRy
ZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0
XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVhc29uKXtcblx0XHRcdFx0XHRcdFx0
XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0
XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRcdFx0XHRcdFx0
XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAo
ZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRy
ZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9u
KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNl
IHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxz
ZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1
bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJs
ZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQg
PSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX0ZVTEZJTExFRDtc
blxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWplY3QodGhlbmFi
bGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVO
RElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gcmVhc29uO1xuXHRcdHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJs
ZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFibGUpe1xuXHRpZiAodGhlbmFibGUu
JHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9QRU5E
SU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5hYmxlKXtcblx0dmFyIHN0YXRlID0g
dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0ID0gdGhlbmFibGUuJHRoZW5hYmxl
UmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyxcblx0
XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVEKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ2Z1bGZpbGxIYW5kbGVyJztc
blx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7XG5cdFx0dGhlbmFibGUuJHRo
ZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdyZWplY3RIYW5kbGVyJztcblx0fVxu
XG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFzcyhbcmVzdWx0LCByZWFjdGlvbnMs
IHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlKHJlc3VsdCwgcmVhY3Rpb25zLCB0
eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlvbnMubGVuZ3RoOyBpIDwgbDsgKytp
KXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sXG5cdFx0XHRoYW5kbGVyID0gcmVh
Y3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0gJ0lkZW50aXR5Jyl7XG5cdFx0XHRy
ZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBpZiAoaGFuZGxl
ciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0
KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50
aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5c
dFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0
XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZp
bmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJyl7XG5cdGRlZmVy
ID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0g
J3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0ZTtcbn0gZWxzZSB7XG5cdGRlZmVy
ID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4sIDApO1xuXHR9O1xufVxuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNjcmlwdGlvbjogT2JqZWN0IGdlbmVy
aWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5
cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVuY3Rpb24ob2JqZWN0LCBrZXlzKXtc
blx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGsgaW4g
b2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0
cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBy
ZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5
c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtl
eSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0ZmlsdGVy
OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRc
dHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV0sIHZhbHVlID0gb2Jq
ZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwga2V5LCBvYmplY3QpKSBy
ZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5c
blx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2Jq
ZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBp
Kyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAoIWZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtl
eXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChmbi5jYWxs
KGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJu
IGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgdmFs
dWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07
XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVz
O1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHRyZXR1cm4gT2Jq
ZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0a2V5T2Y6IGZ1bmN0aW9uKG9iamVj
dCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3Ig
KHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNb
aV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVlKSByZXR1cm4ga2V5O1xuXHRcdH1c
blx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24ob2JqZWN0LCB2
YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmplY3QsIHZhbHVlKSAhPSBudWxsO1xu
XHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7XG5cdFx0dmFy
IHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFjaChvYmplY3QsIGZ1bmN0aW9uKHZh
bHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJhc2UgKyAnWycgKyBrZXkgKyAnXSc7
XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtcblx0XHRc
dFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcodmFsdWUsIGtl
eSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRcdFx0dmFyIHFzID0ge307
XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRcdFx0cXNb
aV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gT2JqZWN0LnRvUXVl
cnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6IHJl
c3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0XHR9XG5c
dFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVzaChyZXN1bHQpO1xuXHRcdH0p
O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxufSko
KTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNlclxuZGVzY3JpcHRpb246IFN0YW5k
YWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVzOiBTbGljay5QYXJzZXJcbi4uLlxu
Ki9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxuXHRzZXBhcmF0b3JJbmRleCxcblx0
Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2FjaGUgPSB7fSxcblx0cmV2ZXJzZUNh
Y2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xuXG52YXIgcGFyc2UgPSBmdW5jdGlv
bihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0
dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09PSB0cnVlKSByZXR1cm4gZXhwcmVz
c2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJlcGxhY2UoL15cXHMrfFxc
cyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7XG5cdHZhciBjdXJyZW50Q2Fj
aGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2FjaGU7XG5cdGlmIChjdXJyZW50Q2Fj
aGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl07XG5cdHBhcnNl
ZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNzaW9uczogW10sXG5cdFx0cmF3OiBl
eHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gcGFyc2Uo
dGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2VwYXJhdG9ySW5kZXggPSAtMTtcblx0
d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UocmVn
ZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBwYXJzZWQuZXhwcmVzc2lvbnMubGVu
Z3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0gKHJldmVyc2VkKSA/IHJl
dmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciByZXZlcnNlQ29tYmluYXRvciA9IGZ1
bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRvciA9PT0gJyEnKSByZXR1cm4gJyAn
O1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJldHVybiAnISc7XG5cdGVsc2UgaWYg
KCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRvci5yZXBsYWNlKC9eIS8s
ICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRvcjtcbn07XG5cbnZhciByZXZlcnNl
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Npb24u
ZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBp
Kyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtcblx0XHR2YXIgbGFzdCA9IHtwYXJ0
czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNlQ29tYmluYXRvcihleHBbMF0uY29t
YmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBleHAubGVuZ3RoOyBqKyspe1xu
XHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAoIWNleHAucmV2ZXJzZUNvbWJpbmF0
b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5cdFx0XHRjZXhwLmNvbWJpbmF0b3Ig
PSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVsZXRlIGNleHAucmV2ZXJzZUNvbWJp
bmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5wdXNoKGxhc3QpO1xuXHR9XG5cdHJl
dHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cmlu
Zyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDggU3RldmVuIExldml0aGFu
IDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAvPiBNSVQgTGljZW5zZVxu
XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uXFxcXF4kfCwjXFxzXS9nLCBm
dW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyArIG1hdGNoO1xuXHR9KTtcbn07XG5c
bnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vzci9iaW4vZW52IHJ1YnlcbnB1dHMg
XCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94XFwpfFxccysjLiokfFxccyt8XFxc
XCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86XFxcblx0ICBcXFxccyogKCAsICkg
XFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAgICAgICAgXFxuXFxcblx0fCBcXFxc
cyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21iaW5hdG9yICAgICAgICAgXFxuXFxc
blx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAgICMgQ29tYmluYXRvckNoaWxkcmVu
IFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxcKiApICAgICAjIFRhZyAgICAgICAg
ICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBJRCAg
ICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8dW5pY29kZT4rICAgICAgICkgICAg
ICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0XFxcXFsgIFxcXG5cdFx0XFxcXHMq
ICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxzKiAoWypeJCF+fF0/PSkgICg/OiAg
XFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0KFtcXFwiJ10/KSguKj8pXFxcXDkg
XFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/ICBcXFxccyogIFxcXG5cdFxcXFxd
KD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2RlPisgKSg/OlxcXG5cdFxcXFwoICg/
OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxcXDEyKXwoKD86XFxcXChbXildK1xc
XFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xcXG5cdClcIlxuKi9cblx0XCJeKD86
XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4rKVxcXFxzKnwoXFxcXHMrKXwoPHVu
aWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxcXC4oPHVuaWNvZGU+Kyl8XFxcXFtc
XFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxdPz0pKD86XFxcXHMqKD86KFtcXFwi
J10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxcXSl8KDorKSg8dW5pY29kZT4rKSg/
OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxcXDEzKXwoKD86XFxcXChbXildK1xc
XFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNlKC88Y29tYmluYXRvcj4vLCAnWycg
KyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwvJykgKyAnXScpXG5cdC5yZXBsYWNl
KC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFte
XFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29kZTE+L2csICcoPzpbOlxcXFx3XFxc
XHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcbik7XG5cbmZ1bmN0
aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJhdG9yLFxuXHRjb21iaW5hdG9yLFxu
XHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxcblx0aWQsXG5cdGNsYXNzTmFtZSxc
blxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRhdHRyaWJ1dGVRdW90
ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFya2VyLFxuXHRwc2V1ZG9DbGFzcyxc
blx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVkVmFsdWUsXG5cdHBzZXVkb0NsYXNz
VmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09IC0xKXtcblx0
XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRleF0gPSBbXTtcblx0XHRjb21iaW5h
dG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSByZXR1cm4gJyc7XG5cdH1cblxuXHRp
ZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4gfHwgY29tYmluYXRvckluZGV4ID09
PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3IgfHwgJyAnO1xuXHRcdHZhciBjdXJy
ZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XTtcblx0XHRp
ZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdKVxuXHRcdFx0
Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJldmVyc2VDb21iaW5hdG9yID0gcmV2
ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3VycmVudFNlcGFyYXRvclsrK2NvbWJp
bmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRvciwgdGFnOiAnKid9O1xuXHR9XG5c
blx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhd
W2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUpe1xuXHRcdGN1cnJlbnRQYXJzZWQu
dGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGlk
KXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5c
blx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBs
YWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc0xpc3Qp
IGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNs
YXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xh
c3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzZXMucHVzaCh7
XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVnZXhwOiBuZXcgUmVnRXhwKCcoXnxc
XFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAnKFxcXFxzfCQpJylcblx0XHR9KTtc
blxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNl
dWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlO1xuXHRcdHBzZXVkb0NsYXNz
VmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xhc3NWYWx1ZS5yZXBsYWNlKHJlVW5l
c2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQucHNldWRvcykgY3Vy
cmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5wc2V1ZG9zLnB1c2go
e1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSxcblx0XHRc
dHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlwZTogcHNldWRvTWFya2VyLmxlbmd0
aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAoYXR0
cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRyaWJ1dGVLZXkucmVwbGFjZShyZVVu
ZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlVmFsdWUgfHwgJycp
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFyIHRlc3QsIHJlZ2V4cDtcblxuXHRc
dHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0Y2FzZSAnXj0nIDogcmVnZXhwID0g
bmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICAgICAg
ICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAg
ICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKyckJyAgICAgICApOyBicmVh
aztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICcoXnxcXFxccyknKyBl
c2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxzfCQpJyApOyBicmVhaztcblx0XHRc
dGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhw
KGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAgJz0nIDog
dGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlID09
IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICcqPScgOiB0ZXN0ID0gZnVuY3Rp
b24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZihhdHRyaWJ1
dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnIT0nIDogdGVzdCA9
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlICE9IHZhbHVl
O1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAgOiB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYg
KGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQvKS50ZXN0KGF0dHJpYnV0ZU9wZXJh
dG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxu
XHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1
ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxuXHRcdGlmICghY3VycmVudFBhcnNl
ZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBbXTtcblx0XHRjdXJyZW50
UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6IGF0dHJpYnV0ZUtleSxcblx0XHRc
dG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRcdHZhbHVlOiBhdHRyaWJ1dGVWYWx1
ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9XG5cblx0cmV0dXJuICcnO1xufTtc
blxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGlj
ay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRyZXR1cm4gcGFyc2UoZXhwcmVzc2lv
bik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG5cbmlmICghdGhp
cy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0
eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiov
dGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRlclxuZGVzY3JpcHRpb246IFRoZSBu
ZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxucHJvdmlkZXM6IFNsaWNrLkZpbmRl
clxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5cbnZh
ciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30sXG5cdHRvU3RyaW5nID0gT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAvIEJ1ZyBkZXRlY3Rpb25cblxubG9j
YWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRyZXR1cm4gKC9cXHtcXHMqXFxbbmF0
aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtcbn07XG5cbmxvY2FsLmlzWE1MID0g
ZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9jdW1lbnQueG1sVmVyc2lvbikgfHwg
KCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChkb2N1bWVudCkgPT0gJ1tvYmplY3Qg
WE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVUeXBlID09IDkgJiYgZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7XG59O1xuXG5sb2NhbC5zZXREb2N1
bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBjb252ZXJ0IGVsZW1lbnRzIC8gd2lu
ZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQgY2Fubm90IGJlIGV4dHJhcG9s
YXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBub2RlVHlwZSA9IGRvY3VtZW50Lm5v
ZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3VtZW50XG5cdGVsc2UgaWYgKG5v
ZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG5vZGVcblx0ZWxz
ZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9IGRvY3VtZW50LmRvY3VtZW50OyAv
LyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hlY2sgaWYgaXQncyB0aGUgb2xkIGRv
Y3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRvY3VtZW50KSByZXR1cm47XG5cdHRo
aXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVjayBpZiB3ZSBoYXZlIGRvbmUgZmVh
dHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmVcblxuXHR2YXIgcm9vdCA9IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlkID0gdGhpcy5nZXRVSURYTUwocm9v
dCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdLFxuXHRcdGZlYXR1cmU7
XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRc
dFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHRcdH1cblx0XHRyZXR1cm47
XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0gPSB7fTtcblxuXHRm
ZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNYTUxEb2N1bWVudCA9IHRoaXMuaXNY
TUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0YXJHRUJUTlxuXHQ9IGZlYXR1cmVz
LnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMuaWRHZXRzTmFtZVxuXHQ9IGZlYXR1
cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkdFQkNOXG5cdD0gZmVh
dHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRl
UVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0PSBmZWF0dXJlcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3RhclNlbGVjdHNDbG9zZWQsIHN0YXJT
ZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04sIGNhY2hlZEdl
dEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcjtcblxu
XHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlkJztcblx0dmFyIHRlc3ROb2RlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0dmFyIHRlc3RSb290ID0gZG9jdW1l
bnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdIHx8IHJv
b3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2RlKTtcblxuXHQvLyBvbiBub24tSFRN
TCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5SWQgZG9lc250IHdvcmsgcHJv
cGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgaWQ9XCInK2lkKydc
Ij48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9ICEhZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0aWYgKGZlYXR1cmVzLmlzSFRNTERv
Y3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0XHQv
LyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykg
Zm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29tbWVudHMgPSAodGVzdE5vZGUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtcblxuXHRcdC8vIElFIHJldHVybnMg
Y2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1M
ID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3NlZCA9IChzZWxlY3RlZCAmJiAhIXNl
bGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtc
blx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROID0gc3Rh
clNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDtcblxuXHRcdC8vIElFIHJldHVy
bnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9mIGp1c3QgaWQgZm9yIGdldEVsZW1l
bnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5u
ZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48YiBpZD1cIicrIGlkICsnXCI+PC9i
Pic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdGlm
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtcblxuXHRcdFx0Ly8gU2FmYXJpIDMu
MiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzXG5cdFx0XHR0cnkge1xuXHRc
dFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJmXCI+PC9hPjxhIGNsYXNzPVwi
YlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJyku
bGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxkLmNsYXNzTmFtZSA9ICdiJztcblx0
XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxu
XHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgZG9lc250IGRldGVjdHMg
dGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwiPjwvYT48YSBjbGFzcz1cImYgYiBh
XCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOID0gKHRlc3ROb2Rl
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNo
IChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNOID0gY2FjaGVkR2V0RWxlbWVudHNC
eUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTjtcblx0XHR9XG5cblx0XHRp
ZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0XHQvLyBJRSA4IHJldHVybnMgY2xv
c2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlTZWxlY3RvckFsbCgnKicpIGZvciBz
b21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0g
J2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUucXVlcnlTZWxlY3RvckFs
bCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSA9IChzZWxlY3Rl
ZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkg
PT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBxdWVy
eVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNlIG9uIHF1aXJrc21vZGVcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIk1pWFwi
PjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0EgPSAhdGVzdE5vZGUu
cXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxu
XHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBzZWxlY3RlZCBvcHRpb25zIG9u
IHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRN
TCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPmE8L29wdGlvbj48L3Nl
bGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBID0gKHRlc3ROb2RlLnF1
ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09IDApO1xuXHRcdFx0fSBjYXRjaCAo
ZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgYXR0clsq
XiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0
XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIlwiPjwvYT4nO1xuXHRcdFx0XHRm
ZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9y
QWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxu
XG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBoYXMgYW4gaW5wdXQgb2YgaWQgeCwg
Zm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW5wdXRcblx0
XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxmb3JtIGFjdGlvbj1cInNcIj48
aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0XHRicm9rZW5Gb3JtQXR0cmlidXRl
R2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSAhPSAn
cycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5hdGl2ZSBtYXRjaGVzU2VsZWN0b3Ig
ZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IHJvb3QubWF0
Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwqLyByb290Lm1vek1hdGNoZXNTZWxl
Y3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtcblx0XHRpZiAoZmVhdHVyZXMubmF0
aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8gaWYgbWF0Y2hlc1NlbGVjdG9yIHRy
b3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVzZSBpdFxuXHRcdFx0ZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpzbGljaycpO1xuXHRcdFx0
ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19leHBhbmRvID0gMTtcblx0XHRkZWxl
dGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlE
SFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURY
TUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7XG5cdHRlc3ROb2Rl
ID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0Ly8gZ2V0QXR0cmlidXRlXG5cblx0
ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ICYmIGJyb2tl
bkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1l
dGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRpZiAobWV0aG9kKSByZXR1
cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSBub2RlLmdldEF0
dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlKSA/IGF0dHJpYnV0
ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRc
dHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0cmV0dXJuICht
ZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblx0
fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5oYXNBdHRyaWJ1dGUgPSAocm9v
dCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJpYnV0ZSkpID8gZnVuY3Rpb24obm9k
ZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKTtc
blx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0bm9kZSA9IG5vZGUuZ2V0QXR0
cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAhIShub2RlICYmIChub2RlLnNwZWNp
ZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5cdC8vIGNvbnRhaW5zXG5cdC8vIEZJ
WE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIHht
bCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVSb290Q29udGFpbnMgPSByb290ICYm
IHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxuXHRcdG5hdGl2ZURvY3VtZW50Q29u
dGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29kZShkb2N1bWVudC5jb250YWlucyk7
XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENvbnRhaW5zICYmIG5hdGl2ZURv
Y3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNv
bnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZlUm9vdENvbnRhaW5zICYmICFuYXRp
dmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdC8vIElF
OCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVudC5cblx0XHRyZXR1cm4gY29udGV4
dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50KSA/IGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKHJvb3QgJiYgcm9vdC5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRy
ZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0LmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0aWYg
KG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250ZXh0KSByZXR1cm4gdHJ1ZTtcblx0
XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpO1xuXHRcdHJldHVybiBmYWxzZTtc
blx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdC8vIGNyZWRpdHMgdG8gU2l6
emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0dXJlcy5kb2N1bWVudFNvcnRlciA9
IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlm
ICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0
ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3NvdXJjZUluZGV4JyBpbiByb290KSA/
IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJbmRleCB8fCAhYi5zb3VyY2VJbmRl
eCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xu
XHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICgh
YS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVybiAwO1xuXHRcdHZhciBh
UmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0gYi5vd25lckRv
Y3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNldFN0YXJ0KGEsIDApO1xuXHRcdGFS
YW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0YXJ0KGIsIDApO1xuXHRcdGJSYW5n
ZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDogbnVsbDtcblxuXHRyb290ID0gbnVs
bDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdHRoaXNbZmVhdHVyZV0gPSBm
ZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFpbiBNZXRob2RcblxudmFyIHJlU2lt
cGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xcXCopKSQvLFxuXHRyZUVtcHR5QXR0
cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxdLyxcblx0cXNhRmFpbEV4cENhY2hl
ID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFw
cGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMuZm91bmQgPSAoZmlyc3QpID8gbnVs
bCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4dCkgcmV0dXJuIGZvdW5kO1xuXHRl
bHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9IGNvbnRleHQuZG9jdW1lbnQ7IC8v
IENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBhIGRvY3VtZW50XG5cdGVsc2UgaWYg
KCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5cblx0Ly8gc2V0dXBcblxuXHR2YXIg
cGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVzID0gdGhpcy51bmlxdWVzID0ge30s
XG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5ndGgpLFxuXHRcdGNvbnRl
eHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0gOSk7XG5cblx0aWYgKHRoaXMuZG9j
dW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBjb250ZXh0Lm93bmVyRG9j
dW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xuXG5cdC8vIGF2b2lkIGR1cGxpY2F0
aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJheVxuXHRpZiAoaGFzT3RoZXJzKSBm
b3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNbdGhpcy5nZXRVSUQoZm91bmRbaV0p
XSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3NcblxuXHRpZiAodHlwZW9mIGV4cHJl
c3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlzIGEgc3RyaW5nXG5cblx0XHQvKjxz
aW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFyIHNpbXBsZVNlbGVjdG9yID0gZXhw
cmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0XHRzaW1wbGVTZWxlY3RvcnM6IGlm
IChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1ib2wgPSBzaW1wbGVTZWxlY3Rvclsx
XSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJdO1xuXG5cdFx0XHRpZiAoIXN5bWJv
bCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRoaXMuYnJva2VuU3RhckdFQlROKSBi
cmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50
c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwg
bnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5w
dXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcjJyl7
XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICFjb250ZXh0SXNEb2N1bWVu
dCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlID0gY29udGV4dC5nZXRFbGVt
ZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSByZXR1cm4gZm91bmQ7XG5cdFx0XHRc
dGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVW
YWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChmaXJzdCkg
cmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNb
dGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblxuXHRcdFx0fSBlbHNlIGlm
IChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwg
KCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRoaXMuYnJva2VuR0VCQ04pICYm
IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRc
dFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5HRUJD
Til7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobmFt
ZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRc
dFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoQ2xh
c3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5lc2NhcGVSZWdFeHAobmFtZSkgKyco
XFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRc
dFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7XG5cdFx0XHRcdFx0XHRpZiAoIShj
bGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkpKSBjb250aW51ZTtcblx0XHRc
dFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhl
cnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRc
dFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRo
aXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0KSA/IG51bGwgOiBmb3VuZDtcblxu
XHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXG5cdFx0Lyo8cXVl
cnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNlbGVjdG9yOiBpZiAoY29udGV4dC5x
dWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50XG5cdFx0
XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxuXHRcdFx0XHQvL1RPRE86IG9ubHkg
c2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4ZWQgY2FzZVxuXHRcdFx0XHR8fCB0
aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5DaGVja2VkUVNB
ICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0xKVxuXHRcdFx0XHR8fCAodGhp
cy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5QXR0cmlidXRlLnRlc3QoZXhwcmVz
c2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1lbnQgLy9BYm9ydCB3aGVuICFjb250
ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAgdGhlcmUgYXJlIG11bHRpcGxlIGV4
cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRcdC8vICBzaW5jZSB3ZSBjdXJyZW50
bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9yIHNpbmdsZSBleHByZXNzaW9u
IHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24uaW5kZXhPZignLCcpID4gLTFcblx0
XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNBXG5cdFx0XHQpIGJyZWFrIHF1ZXJ5
U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24sIF9jb250ZXh0
ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7XG5c
dFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5cdFx0XHRcdC8vIGNyZWRpdHMgdG8g
QW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBfY29udGV4dC5nZXRBdHRyaWJ1dGUo
J2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRcdFx0X2NvbnRleHQuc2V0QXR0cmli
dXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVzc2lvbiA9ICcjJyArIHNsaWNraWQg
KyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0LnBhcmVudE5v
ZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIGNv
bnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVsbDtcblx0XHRcdFx0ZWxzZSBu
b2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVzc2lvbik7XG5cdFx0XHR9IGNh
dGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dID0gMTtcblx0XHRc
dFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmICgh
Y29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChjdXJyZW50SWQpIF9jb250ZXh0LnNl
dEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0XHRcdGVsc2UgX2NvbnRleHQucmVt
b3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRleHQgPSBfY29udGV4dDtcblx0XHRc
dFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSkgZm9y
IChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKG5vZGUubm9kZU5hbWUg
PiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3Vu
ZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytd
Oyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUp
XSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRo
aXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3F1
ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNl
KGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZvdW5kO1xuXHR9
IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJlIGlzIG5vIGV4cHJlc3Npb25c
blx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5TbGljayl7IC8vIGV4
cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5cdFx0cGFyc2VkID0gZXhwcmVzc2lv
bjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQuZG9jdW1lbnRFbGVtZW50IHx8
IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBpcyBhIG5vZGVcblx0XHQoZm91
bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0gZXhwcmVzc2lvbjtcblx0XHRy
ZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1bmtcblx0XHRyZXR1cm4gZm91bmQ7
XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+
Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50aCBzZWxlY3RvcnNcblxuXHR0aGlz
LnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7fTtcblx0dGhpcy5wb3NOVEhUeXBl
ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtcblxuXHQvKjwvbnRoLXBzZXVkby1z
ZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGlmIGFwcGVuZCBpcyBu
dWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGV4cHJlc3Np
b24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxuXHR0aGlzLnB1c2ggPSAoIWhhc090
aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAmJiBwYXJzZWQuZXhwcmVzc2lv
bnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6IHRoaXMucHVzaFVJRDtcblxu
XHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxuXHQvLyBkZWZhdWx0IGVuZ2luZVxu
XG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwgdGFnLCBpZCwgY2xhc3NMaXN0LCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIgY3VycmVudEl0ZW1zLCBjdXJyZW50
RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhw
cmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBl
eHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJlbnRCaXQgPSBjdXJyZW50RXhw
cmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9yID0gJ2NvbWJpbmF0b3I6JyArIGN1
cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNbY29tYmluYXRvcl0pIGNvbnRpbnVl
IHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/IGN1cnJl
bnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2UoKTtcblx0XHRpZCAgICAgICAg
ID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0gY3VycmVudEJpdC5jbGFzc0xpc3Q7
XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nlcztcblx0XHRhdHRyaWJ1dGVzID0g
Y3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3MgICAgPSBjdXJyZW50Qml0LnBzZXVk
b3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoIC0g
MSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5cblx0XHRpZiAobGFzdEJpdCl7XG5c
dFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0dGhpcy5mb3VuZCA9IGZvdW5kO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7fTtcblx0XHRcdHRoaXMuZm91bmQg
PSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5cdFx0XHR0aGlzW2NvbWJpbmF0b3Jd
KGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlz
dCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3VuZC5sZW5ndGgpIGJyZWFrIHNl
YXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQpIGZvciAobSA9
IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKXtcblx0XHRcdFx0dGhpc1tj
b21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChmb3VuZC5sZW5ndGgpIGJyZWFrIHNl
YXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsg
bSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0fVxuXG5cdFx0Y3Vy
cmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8vIHNob3VsZCBzb3J0IGlmIHRoZXJl
IGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNzIG11bHRpcGxlIGV4cHJlc3Npb25z
LlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoID4gMSkpIHRo
aXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkgPyAoZm91bmRbMF0gfHwgbnVsbCkg
OiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVpZHggPSAxO1xubG9jYWwudWlkayA9
ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhNTCA9IGZ1bmN0aW9uKG5vZGUpe1xu
XHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51aWRrKTtcblx0aWYgKCF1aWQpe1xu
XHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKHRoaXMudWlkaywg
dWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9jYWwuZ2V0VUlESFRNTCA9IGZ1bmN0
aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIgfHwgKG5vZGUudW5pcXVlTnVt
YmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBiYXNlZCBvbiB0aGUgc2V0RG9jdW1l
bnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5zb3J0ID0gZnVuY3Rpb24ocmVzdWx0
cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0dXJuIHJlc3VsdHM7XG5cdHJlc3Vs
dHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4v
Kjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwu
Y2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAvXihbKy1dP1xcZCopPyhbYS16XSsp
PyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJndW1lbnQgPSBmdW5jdGlvbihhcmd1
bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0aGlzLm1hdGNoTlRIKTtcblx0
aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNwZWNpYWwgPSBwYXJzZWRbMl0gfHwg
ZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5cdGlmIChhID09ICctJykgYSA9IC0x
O1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFyc2VkID1cblx0XHQoc3BlY2lhbCA9
PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNpYWwgPT0gJ29kZCcpXHQ/IHthOiAy
LCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0PyB7YTogMiwgYjogMH0gOiB7YTog
MCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSA9IHBhcnNlZCk7
XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5jdGlvbihjaGlsZCwgc2libGluZywg
cG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xu
XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRpZiAoIXRoaXNbcG9zaXRpb25z
XVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAo
IXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVsID0gcGFyZW50W2NoaWxkXSwgY291
bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGUu
bm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZU5hbWUgIT0gbm9k
ZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdldFVJRChl
bCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10pKTtcblx0
XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZVR5cGUgIT0g
MSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0g
PSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0
fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICduJztcblx0XHR2YXIgcGFyc2Vk
ID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5wYXJzZU5USEFyZ3VtZW50KGFyZ3Vt
ZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBhID0gcGFyc2Vk
LmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNdW3VpZF07XG5cdFx0aWYgKGEg
PT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4gMCl7XG5cdFx0XHRpZiAocG9zIDwg
YikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYiA8IHBvcykgcmV0dXJu
IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBiKSAlIGEpID09IDA7XG5cdH07XG59
O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xu
fTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdGlm
ICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0XHR0aGlzLnVuaXF1ZXNbdWlkXSA9
IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xuXHR9XG59O1xuXG5sb2NhbC5tYXRj
aE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICh0aGlzLmlzSFRNTERvY3Vt
ZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0
dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSwgc2VsZWN0b3IucmVwbGFj
ZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypcXF0vZywgJ1skMT1cIiQyXCJdJykp
O1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxuXG5cdHZhciBwYXJzZWQgPSB0aGlz
LlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiB0cnVlO1xuXG5c
dC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFyIGV4cHJlc3Npb25zID0gcGFyc2Vk
LmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwgY3VycmVudEV4cHJlc3Npb247
XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsr
KXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09IDEpe1xuXHRcdFx0dmFyIGV4
cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihu
b2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBleHAudGFnLnRvVXBwZXJDYXNl
KCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVzLCBleHAucHNldWRvcykpIHJl
dHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisrO1xuXHRcdH1cblx0fVxuXG5cdGlm
IChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuXHR2
YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBwYXJzZWQpLCBpdGVtO1xuXHRm
b3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRcdGlmIChpdGVtID09PSBub2RlKSBy
ZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5sb2NhbC5tYXRjaFBzZXVk
byA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtcblx0dmFyIHBzZXVkb05hbWUgPSAn
cHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9OYW1lXSkgcmV0dXJuIHRoaXNbcHNl
dWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0cmlidXRlID0gdGhpcy5nZXRBdHRy
aWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1lbnQpID8gYXJndW1lbnQgPT0gYXR0
cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5tYXRjaFNlbGVjdG9yID0gZnVuY3Rp
b24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0
YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gbm9kZS5ub2Rl
TmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRpZiAodGFnID09ICcqJyl7
XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxzZTsgLy8gRml4IGZvciBjb21t
ZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG5vZGVO
YW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpZCAmJiBub2Rl
LmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBpLCBwYXJ0
LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2VzLmxlbmd0aDsgaS0tOyl7XG5c
dFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG5cdFx0aWYgKCEoY2xz
ICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRp
ZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5ndGg7IGktLTspe1xuXHRcdHBh
cnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9wZXJhdG9yID8gIXBhcnQudGVzdCh0
aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRoaXMuaGFzQXR0cmlidXRlKG5v
ZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChwc2V1ZG9zKSBmb3IgKGkg
PSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IHBzZXVkb3NbaV07XG5cdFx0aWYg
KCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0LnZhbHVlKSkgcmV0dXJuIGZh
bHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIGNvbWJpbmF0b3JzID0ge1xuXG5c
dCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkgbGV2ZWxcblxuXHRcdHZhciBp
LCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlzSFRNTERvY3VtZW50KXtcblx0XHRc
dGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBub2RlLmFsbCkgfHwgKHRoaXMuaWRH
ZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUg
IT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyB3
aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRcdFx0XHRcdC8vIGlmIHRoZXJlcyBq
dXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwgZWxzZSBpdCB3aWxsIGJlIGEgY29s
bGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5hbGxbaWRdO1xuXHRcdFx0XHRcdGlm
ICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuWzBdKSBjaGlsZHJl
biA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2kr
K107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lk
Jyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9kZS5ub2RlVmFsdWUgPT0gaWQpe1xu
XHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0
XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWl0ZW0p
e1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGluIHRoZSBkb20gd2UgcmV0dXJuLCBl
bHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUgZ2V0QnlJZCBsYWJlbFxuXHRcdFx0
XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkpIHJldHVybjtcblx0XHRcdFx0
XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudCAh
PT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkgcmV0dXJuO1xuXHRcdFx0XHR0
aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtc
blx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0QnlDbGFzczogaWYgKGNsYXNzZXMg
JiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0
XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NMaXN0Lmpv
aW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJy
ZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytd
OykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xu
XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdldEJ5VGFnOiB7XG5cdFx0XHRj
aGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcblx0XHRcdGlmICghKGNo
aWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5VGFnO1xuXHRcdFx0aWYgKCF0
aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0XHRcdGZvciAoaSA9IDA7IGl0ZW0g
PSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnPic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgY2hpbGRyZW5c
blx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBkbyB7XG5cdFx0XHRpZiAobm9kZS5u
b2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSk7XG5c
dH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0
U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5c
dFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUuZmlyc3RD
aGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlz
LnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnfic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzXG5c
dFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9k
ZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7
XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRV
bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnKysnOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBz
aWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhpc1snY29tYmluYXRvcjorJ10obm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1snY29t
YmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFuZCBwcmV2aW91cyBzaWJsaW5nc1xu
XHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6IX4nXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISc6IGZ1bmN0aW9uKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBhbGwgcGFyZW50
IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2Rl
KSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnIT4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0IHBh
cmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0aWYgKG5v
ZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsnOiBmdW5jdGlvbihub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5
cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0JyFeJzogZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGxh
c3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRc
dFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOiEr
J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxu
XHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5v
ZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250
aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlz
LmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAodmFyIGMgaW4gY29tYmluYXRvcnMp
IGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3JzW2NdO1xuXG52YXIgcHNldWRv
cyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2VtcHR5JzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdHJldHVybiAhKGNo
aWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5pbm5lclRleHQgfHwgbm9kZS50
ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5cdCdub3QnOiBmdW5jdGlvbihub2Rl
LCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0Y2hOb2RlKG5vZGUsIGV4cHJlc3Np
b24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9uKG5vZGUsIHRleHQpe1xuXHRcdHJl
dHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykuaW5kZXhPZih0
ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRc
dHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUg
PT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LWNo
aWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGlu
ZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1
ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2
ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChw
cmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5c
dFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVUeXBlID09
IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjxudGgtcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8o
J2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyksXG5cblx0J250aC1sYXN0LWNo
aWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5n
JywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1
ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIVHlwZScsIHRydWUpLFxuXG5c
dCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAn
cHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1ZSksXG5cblx0J2luZGV4Jzog
ZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxk
J10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5cblx0J2V2ZW4nOiBmdW5jdGlvbihu
b2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybicpO1xu
XHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRv
Om50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5cblx0Lyo8L250aC1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2ZpcnN0
LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVO
YW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0
fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1l
ID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkg
aWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFy
IHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChwcmV2
ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlTmFtZSA9PSBub2RlTmFtZSkg
cmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBu
ZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBm
YWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjwvb2YtdHlwZS1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3NcblxuXHQnZW5hYmxlZCc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQnZGlzYWJsZWQn
OiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQn
Y2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmNoZWNrZWQgfHwgbm9k
ZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1
cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09
IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhpcy5oYXNBdHRyaWJ1dGUobm9k
ZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxuXG5cdCdzZWxlY3RlZCc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVkO1xuXHR9XG5cblx0Lyo8L3BzZXVk
by1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4gcHNldWRvcykgbG9jYWxbJ3BzZXVk
bzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1dGVzIG1ldGhvZHNcblxudmFyIGF0
dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0ge1xuXG5cdCdmb3InOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGluIHRoaXMpID8gdGhpcy5odG1sRm9y
IDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxuXG5cdCdocmVmJzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVm
JywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/IHRoaXMuc3R5bGUuY3NzVGV4dCA6
IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxuXG5cdCd0YWJpbmRleCc6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ3Rh
YmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3Bl
Y2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSxcblxuXHQndHlw
ZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJyk7XG5c
dH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUg
PSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVW
YWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRlR2V0dGVycy5NQVhMRU5HVEggPSBh
dHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4bGVuZ3RoO1xu
XG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9
KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8vIFNsaWNrIGZpbmRlclxuXG5TbGlj
ay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpe1xuXHRyZXR1
cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCk7XG59O1xuXG5TbGlj
ay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbil7XG5cdHJldHVybiBsb2NhbC5z
ZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7XG59O1xuXG4vLyBTbGljayBj
b250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5zID0gZnVuY3Rpb24oY29udGFpbmVy
LCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFpbmVyKTtcblx0cmV0dXJuIGxvY2Fs
LmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgZ2V0
dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2Nh
bC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmdldEF0dHJpYnV0ZShub2RlLCBu
YW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xu
XHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmhhc0F0dHJpYnV0ZShu
b2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJcblxuU2xpY2subWF0Y2ggPSBmdW5j
dGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUgJiYgc2VsZWN0b3IpKSByZXR1cm4g
ZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IG5vZGUpIHJldHVybiB0cnVl
O1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLm1hdGNoTm9kZShu
b2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgYWNjZXNzb3JcblxuU2xp
Y2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2su
bG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7XG5cdHJldHVybiBsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xpY2sgcHNldWRvIGFjY2Vzc29yXG5c
blNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWxbJ3BzZXVk
bzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0cmV0dXJuIGZuLmNh
bGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxv
b2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIgcHNldWRvID0gbG9jYWxbJ3BzZXVk
bzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBmdW5jdGlvbihhcmd1bWVudCl7XG5c
dFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIG51
bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3JcblxuU2xpY2sub3ZlcnJpZGUg
PSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3ZlcnJpZGUocmVnZXhwLCBmbik7XG5c
dHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBsb2NhbC5pc1hNTDtcblxuU2xpY2su
dWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxvY2FsLmdldFVJREhUTUwobm9kZSk7
XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHko
Lyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6
IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnRcblxuZGVz
Y3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRlbXMgaW4gTW9vVG9vbHMuIENv
bnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJzIGZ1bmN0aW9uLCBhbmQgYW4g
aGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1ldGhvZHMgdG8gbGV0IHlvdSBl
YXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBTdHJpbmcsIEZ1bmN0
aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGljay5GaW5kZXJdXG5cbnByb3Zp
ZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUsIFNlbGVjdG9yc11cblxuLi4u
XG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgcHJvcHMp
e1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0cnVjdG9yc1t0YWddO1xuXHRpZiAo
a29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7XG5cdGlmICh0eXBlb2YgdGFn
ICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5zZXQocHJvcHMpO1xuXG5cdGlm
ICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15bXFx3LV0rJC8pLnRlc3QodGFnKSl7
XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhwcmVzc2lvbnNbMF1bMF07XG5c
dFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYnIDogcGFyc2VkLnRhZztcblx0XHRp
ZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3BzLmlkID0gcGFyc2VkLmlkO1xu
XG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRlcztcblx0XHRpZiAoYXR0cmli
dXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtcblx0XHRcdGlmIChwcm9wc1thdHRy
LmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlmIChhdHRyLnZhbHVlICE9IG51bGwg
JiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIua2V5XSA9IGF0dHIudmFsdWU7XG5c
dFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5vcGVyYXRvcikgcHJvcHNbYXR0ci5r
ZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2VkLmNsYXNzTGlzdCAmJiBwcm9wc1sn
Y2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBhcnNlZC5jbGFzc0xpc3Quam9pbign
ICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1lbnQodGFnLCBwcm9wcyk7XG59
O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50LnByb3RvdHlwZSA9IEJyb3dz
ZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQgSUU5IHJlcXVpcmUgdGhlIHdyYXBw
aW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50ID0gKGZ1bmN0aW9uKGZpcmVFdmVu
dCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdHJldHVybiBmaXJl
RXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0fTtcblx0fSkoRWxlbWVudC5wcm90
b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVtZW50KS5taXJy
b3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90b3R5cGVbbmFtZV0pIHJldHVybjtc
blxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJl
c3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVudHMgPSB0cnVlO1xuXHRcdGZvciAo
dmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1l
bnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0gZWxlbWVudFtuYW1lXS5hcHBseShl
bGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVsZW1lbnRzICYmIHR5cGVPZihyZXN1
bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVybiAoZWxlbWVudHMpID8gbmV3IEVs
ZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxuXHRFbGVtZW50cy5pbXBsZW1lbnQo
b2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucGFyZW50ID0g
T2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xuXHRcdCckY29uc3RydWN0b3InOiBF
bGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29udmVydCgnZWxlbWVudCcpLmhpZGUo
KVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdFx0
RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cdH0pO1xufVxuXG5FbGVtZW50LkNv
bnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9IG5ldyBUeXBlKCdJRnJhbWUnLCBm
dW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHtcblx0XHRw
cm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFtZTogZnVuY3Rpb24ob2JqKXtcblx0
XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIHByb3BzID0g
cGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0aWYgKHBhcmFtcy5pZnJhbWUpIGlm
cmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xuXHR2YXIgb25sb2FkID0gcHJvcHMu
b25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHByb3BzLm9ubG9hZDtcblx0cHJvcHMu
aWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5uYW1lLCBpZnJhbWUgPyAoaWZyYW1l
LmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0cmluZy51bmlxdWVJRCgpXS5waWNr
KCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAnaWZyYW1lJywgcHJvcHMpO1xu
XG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9ubG9hZC5jYWxsKGlmcmFtZS5jb250
ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZyYW1lc1twcm9wcy5pZF0pIG9uTG9h
ZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG5cdHJldHVy
biBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhpcy5FbGVtZW50cyA9IGZ1bmN0aW9u
KG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCl7XG5cdFx0dmFyIHVuaXF1ZXMg
PSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0
XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0XHRcdGlmICghdW5pcXVlc1t1aWRd
KXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5wdXNoKG5vZGUp
O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVudHMucHJvdG90eXBlID0ge2xlbmd0
aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxubmV3IFR5cGUoJ0VsZW1lbnRzJywg
RWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIsIGJpbmQp
e1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRz
KEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0gJ3N0cmluZycpID8gZnVuY3Rp
b24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChmaWx0ZXIpO1xuXHRcdH0gOiBmaWx0
ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVzaDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJn
dW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xlbmd0aCsrXSA9IGl0ZW07XG5cdFx0
fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpO1xuXHR9LnByb3RlY3QoKSxcblxu
XHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVtcyA9IFtdO1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRl
bSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgaXRlbXMucHVz
aChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5
KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0Y29uY2F0OiBmdW5jdGlvbigpe1xu
XHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlzKTtcblx0XHRmb3IgKHZhciBp
ID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0g
PSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkpIG5ld0Vs
ZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3RWxlbWVudHMucHVzaChpdGVtKTtc
blx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRhcHBl
bmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY29sbGVj
dGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xsZWN0aW9uW2ldKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0
d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMubGVuZ3RoXTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxuXG4oZnVuY3Rpb24oKXtcblxuLy8g
RkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZSwgb2JqZWN0ID0geycw
JzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2UuY2FsbChvYmplY3QsIDEsIDEpO1xu
aWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3NwbGljZScsIGZ1bmN0aW9u
KCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0dmFyIHJlc3VsdCA9IHNwbGljZS5h
cHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVuZ3RoID49IHRoaXMubGVuZ3RoKSBk
ZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1bHQ7XG59LnByb3RlY3QoKSk7XG5c
bkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9kLCBuYW1lKXtcblx0RWxlbWVudHMu
aW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJyYXkubWlycm9yKEVsZW1lbnRzKTtc
blxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUw7XG50cnkge1xuXHRj
cmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGlucHV0
IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChlKXt9XG5cbnZhciBlc2NhcGVRdW90
ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyArIGh0bWwpLnJlcGxhY2UoLyYvZywg
JyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufTtcbi8qPC9sdElFOD4qL1xuXG4v
KjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1l
bnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkg
e1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0
ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztc
bn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdFbGVt
ZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAocHJvcHMpe1xuXHRcdFx0aWYgKHBy
b3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBwcm9wcy5jaGVja2Vk
O1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PSAn
cmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52YWx1ZSA9ICdvbic7XG5cdFx0
XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBiZSBzZXQgYmVmb3JlIGNoYW5n
aW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0aWYgKCFjYW5DaGFuZ2VTdHlsZUhU
TUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0c3R5bGVFbGVtZW50LnNldEF0dHJp
YnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkgZGVsZXRl
IHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkKHN0eWxlRWxlbWVudCkuc2V0KHBy
b3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0Lyo8bHRJRTg+Ki8vLyBG
aXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVydGllcyBpbiBJRSA8IDhcblx0XHRc
dGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRcdFx0XHR0YWcgPSAnPCcgKyB0YWc7
XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1lPVwiJyArIGVzY2FwZVF1b3Rl
cyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSB0YWcgKz0gJyB0
eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICdcIic7XG5cdFx0XHRcdHRhZyAr
PSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMu
dHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTtcblx0fVxuXG59KTtcblxu
fSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9mKHdpbmRvdyk7XG5TbGljay51aWRP
Zihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5cblx0bmV3VGV4dE5vZGU6IGZ1
bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHR9
LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy53aW5kb3c7XG5cdH0s
XG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5cGVzID0ge1xuXG5cdFx0XHRzdHJp
bmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlkID0gU2xpY2suZmluZChk
b2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSk7XG5cdFx0XHRcdHJldHVy
biAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51bGw7XG5cdFx0XHR9LFxuXG5c
dFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtcblx0XHRcdFx0U2xpY2sudWlkT2Yo
ZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZhbWlseSAmJiAhKC9eKD86b2JqZWN0
fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0XHRcdFx0dmFyIGZpcmVFdmVudCA9
IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGluZyBuZWVkZWQgaW4gSUU3LCBvciBl
bHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9IGZ1bmN0aW9uKHR5cGUsIGV2ZW50
KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlwZSwgZXZlbnQpO1xuXHRcdFx0XHRc
dH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Qcm90b3R5cGUpO1xuXHRc
dFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0sXG5cblx0XHRcdG9iamVjdDogZnVu
Y3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlmIChvYmoudG9FbGVtZW50KSByZXR1
cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2FzaCk7XG5cdFx0XHRcdHJl
dHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHR5cGVzLnRleHRub2RlID0gdHlw
ZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVzLmRvY3VtZW50ID0gZnVuY3Rpb24o
emVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9u
KGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYgZWwuJGZhbWlseSAmJiBlbC51bmlx
dWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKGVsKTtcblx0XHRc
dHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwgZG9jIHx8IGRv
Y3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5cbn0pO1xuXG5pZiAod2luZG93LiQg
PT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7XG5cdHJldHVy
biBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQpO1xufSk7XG5cbldpbmRvdy5pbXBs
ZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmRv
Y3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcs
IHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIFNs
aWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMpO1xuXHR9LFxuXG5cdGdl
dEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChT
bGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxuXG59KTtcblxudmFyIGNvbnRhaW5z
ID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0cmV0dXJuIFNsaWNrLmNvbnRhaW5z
KHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1lbnQuY29udGFpbnMpIERvY3VtZW50
LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7XG5cblxuXG4vLyB0cmVlIHdh
bGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlvbihleHByZXNzaW9uLCBjb21i
aW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29tYmluYXRvcjtcblxuXHRleHBy
ZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4cHJlc3Npb24pKTtcblxuXHR2YXIg
ZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gZXhw
cmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Npb25zW2ldWzBdLmNvbWJpbmF0b3Ig
PSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxuT2JqZWN0LmZvckVh
Y2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3VzOiAnIX4nLFxuXHRnZXRQYXJlbnQ6
ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1l
bnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVt
ZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0p
O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6ICd+Jyxcblx0Z2V0QWxsUHJldmlv
dXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRnZXRDaGlsZHJlbjogJz4nLFxuXHRn
ZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1l
bnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7
XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRGaXJzdDogZnVuY3Rp
b24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlz
LCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpWzBdKTtcblx0fSxcblxuXHRnZXRM
YXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2su
c2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSkuZ2V0TGFzdCgp
KTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3du
ZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxcblxuXHRnZXRFbGVtZW50QnlJZDog
ZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsICcj
JyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpKTtcblx0fSxcblxuXHRt
YXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICFleHByZXNzaW9uIHx8IFNs
aWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5cbn0pO1xuXG5cblxuaWYgKHdpbmRv
dy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcsIGZ1bmN0aW9uKHNlbGVjdG9yKXtc
blx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0aWYgKHR5cGVvZiBzZWxlY3RvciA9
PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBzZWxlY3Rvciwg
bmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlzRW51bWVyYWJsZShzZWxlY3Rvcikp
IHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9XG5cdHJldHVybiBuZXcgRWxlbWVu
dHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNcblxudmFyIGluc2VydGVycyA9IHtc
blxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQg
PSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9y
ZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oY29udGV4dCwg
ZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRpZiAo
cGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQubmV4dFNpYmxpbmcp
O1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0ZWxl
bWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxuXHR0b3A6IGZ1bmN0aW9uKGNvbnRl
eHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQu
Zmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJzLmluc2lkZSA9IGluc2VydGVycy5i
b3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFByb3BlcnR5XG5cbnZhciBwcm9wZXJ0
eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307XG5cbi8vIHByb3BlcnRpZXNcblxu
dmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2goW1xuXHQndHlwZScsICd2YWx1ZScs
ICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFjaW5n
JywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93U3BhbicsICd0YWJJbmRleCcsICd1
c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHByb3BlcnRpZXNbcHJvcGVydHkudG9M
b3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9wZXJ0aWVzLmh0bWwgPSAnaW5uZXJI
VE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS50
ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAndGV4dENvbnRlbnQnO1xuXG5PYmpl
Y3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFsLCBrZXkpe1xuXHRwcm9wZXJ0eVNl
dHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW3JlYWxdID0gdmFs
dWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8bHRJRTk+Ki9cbnByb3BlcnR5U2V0
dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7
XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSBub2RlLnNldCgnaHRtbCcsIHZh
bHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9IHZhbHVlO1xuXHR9O1xufSko
cHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdldHRlcnMudGV4dCA9IChmdW5jdGlv
bihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlLmdl
dCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRNTCA6IGdldHRlcihub2RlKTtcblx0
fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9sdElFOT4qL1xuXG4vLyBCb29sZWFu
c1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcsICdkZWNs
YXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNhYmxlZCcsICdyZWFkT25seScsICdt
dWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5cdCdkZWZlcicsICdkZWZhdWx0Q2hl
Y2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0b3BsYXknLFxuXHQnbG9vcCdcbl07
XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFjaChib29scywgZnVuY3Rpb24oYm9v
bCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2UoKTtcblx0Ym9vbGVhbnNbbG93ZXJd
ID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVl
KXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJzW2xv
d2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhIW5vZGVbYm9vbF07XG5cdH07XG59
KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBwZW5kKHByb3BlcnR5U2V0dGVycywg
e1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2NsYXNzTmFtZScg
aW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8fCAnJykgOiBub2RlLnNldEF0dHJp
YnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zvcic6IGZ1bmN0aW9uKG5vZGUsIHZh
bHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9kZS5odG1sRm9yID0gdmFsdWUgOiBu
b2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0
aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkgPyBub2RlLnN0eWxlLmNzc1RleHQg
PSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZhbHVlKTtcblx0fSxcblxuXHQn
dmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZS52YWx1ZSA9ICh2YWx1ZSAh
PSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5cbnByb3BlcnR5R2V0dGVyc1snY2xh
c3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdjbGFzc05hbWUnIGluIG5vZGUpID8g
bm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xufTtc
blxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRv
bicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0aHJvd3NcbnRyeSB7IGVsLnR5
cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVsLnR5cGUgIT0gJ2J1dHRvbicpIHBy
b3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRub2RlLnNldEF0
dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51bGw7XG4vKiA8L3dlYmtpdD4gKi9c
blxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRN
TCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7
XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcg
PSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdp
bjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31c
blx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbnZhciBpbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxlSW5wdXRWYWx1ZSwgaHRtbDVJbnB1
dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9ICd0JztcbmlucHV0LnR5cGUgPSAn
c3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlICE9ICd0JztcblxuLy8g
IzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50XCIgd2hlbiB0cnlpbmcgdG8gdXNl
IGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52YWx1ZSA9ICcnO1xuXHRpbnB1dC50
eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQgPSBpbnB1dC50eXBlID09ICdlbWFp
bCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtcblxuaWYgKHZvbGF0aWxlSW5wdXRW
YWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rp
b24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZhbHVlID0gbm9kZS52YWx1ZTtcblx0
XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBjYXRjaCAo
ZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0eSwgc2V0UHJvcGVydHkgKi9cblxu
LyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmlidXRlID0gKGZ1bmN0aW9uKGRpdil7
XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0dXJuIChkaXYuZ2V0QXR0cmlidXRl
KCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlvbih0ZXN0KXtcblx0dGVzdC5pbm5l
ckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3VsZF9maXhcIiB2YWx1ZT1cInRoZSB1
bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVzdC5jbG9uZU5vZGUodHJ1ZSkuZmly
c3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhhc0NsYXNzTGlzdCA9ICEhZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXG52YXIgY2xhc3NlcyA9IGZ1bmN0
aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0gKGNsYXNzTmFtZSB8fCAnJykuY2xl
YW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJldHVybiBjbGFzc05hbWVzLmZpbHRl
cihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFzc05hbWUgIT09ICcnICYmICF1bmlx
dWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFtZV0gPSBjbGFzc05hbWU7XG5c
dH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMu
Y2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1vdmVGcm9tQ2xhc3NMaXN0ID0gZnVu
Y3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbn07XG5cbkVsZW1l
bnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xu
XHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtc
blx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRyaWJ1dGVXaGl0ZUxpc3Q7XG5cdFx0
XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdoaXRlTGlzdCA9IHRoaXMucmV0
cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5cdFx0XHQvKiA8L2x0SUU5PiAqL1xu
XG5cdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRl
KG5hbWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRlc0dldEF0
dHJpYnV0ZSkgZGVsZXRlIGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXTtcblx0XHRcdFx0LyogPC9s
dElFOT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKG5hbWUs
ICcnICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRl
c0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdFx0
LyogPC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7XG5cdFx0Zm9yICh2YXIgYXR0
cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHkoYXR0cmlidXRlLCBhdHRyaWJ1
dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFByb3BlcnR5
OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJvcGVydHlHZXR0ZXJzW25hbWUu
dG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJuIGdldHRlcih0aGlzKTtcblx0
XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKXtcblx0XHRcdHZh
ciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBhdHRyaWJ1dGVXaGl0ZUxpc3Qg
PSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0Jywge30pO1xuXHRcdFx0aWYgKCFh
dHRyKSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFuZG8gJiYgIWF0dHJpYnV0ZVdo
aXRlTGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRoaXMub3V0ZXJIVE1MO1xuXHRc
dFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQgZmluZCBtZW50aW9uIG9mIGF0
dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIoMCwgb3V0ZXIuc2VhcmNoKC9c
XC8/WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5hbWUpIDwgMCkgcmV0dXJuIG51
bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHR9XG5c
dFx0fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3VsdCA9IFNsaWNrLmdldEF0dHJp
YnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQgJiYgIVNsaWNrLmhhc0F0dHJp
YnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9LFxuXG5cdGdldFByb3BlcnRp
ZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3VtZW50cyk7
XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHksIHRoaXMpLmFzc29jaWF0ZShh
cmdzKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0
dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVy
dGllczogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3VtZW50cywgdGhpcy5yZW1vdmVQ
cm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlv
bihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3By
b3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8gcHJvcGVydHkuc2V0LmNhbGwo
dGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG5cdH0ub3Zlcmxv
YWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9
IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4gKHByb3BlcnR5ICYmIHByb3Bl
cnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0aGlzLmdldFByb3BlcnR5KHBy
b3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKHByb3Ape1xu
XHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVy
dHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2UuYXBwbHkodGhpcykgOiB0aGlz
LnJlbW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhhc0Ns
YXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiB0aGlz
LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1l
KXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSkuY29udGFpbnMoY2xhc3NOYW1l
KTtcblx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1l
KXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRUb0NsYXNzTGlzdCwgdGhpcyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHRoaXMu
Y2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0aGlzLmNsYXNzTmFtZSkuam9p
bignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBoYXNDbGFz
c0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JF
YWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDog
ZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1lcyA9IGNsYXNzZXModGhpcy5j
bGFzc05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGNsYXNzTmFtZXMuZXJh
c2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5qb2luKCcg
Jyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKGNs
YXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxsKSBmb3JjZSA9ICF0aGlzLmhh
c0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkgPyB0aGlzLmFkZENsYXNzKGNs
YXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRvcHQ6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZyYWdtZW50LCBlbGVtZW50cyA9
IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXHRc
dGlmIChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xu
XHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50c1tpXSwgdHJ1ZSk7XG5cdFx0
XHRpZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHRcdH1cblxuXHRc
dGlmIChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVyZSl7XG5cdFx0
cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3VGV4dE5vZGUodGV4dCksIHdo
ZXJlKTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVy
c1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUpLCB0aGlzKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0
aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1ZSkp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2VzOiBmdW5jdGlvbihlbCl7XG5c
dFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwucGFyZW50Tm9kZS5yZXBsYWNl
Q2hpbGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBzOiBmdW5j
dGlvbihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdHJl
dHVybiB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7XG5cdH0sXG5cblx0Z2V0U2Vs
ZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZEluZGV4OyAvLyBTYWZhcmkgMy4y
LjFcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZlcnQodGhpcy5vcHRpb25zKS5m
aWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQ7XG5c
dFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHF1
ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygnaW5wdXQsIHNlbGVjdCwgdGV4
dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0eXBlID0gZWwudHlwZTtcblx0
XHRcdGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBlID09ICdzdWJtaXQnIHx8IHR5
cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBlID09ICdpbWFnZScpIHJldHVy
bjtcblxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykgPT0gJ3NlbGVjdCcpID8gZWwu
Z2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRcdFx0Ly8gSUVcblx0XHRcdFx0
cmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xuXHRcdFx0fSkgOiAoKHR5cGUg
PT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFlbC5jaGVja2VkKSA/IG51bGwg
OiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZlcnQodmFsdWUpLmVhY2goZnVu
Y3Rpb24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5lZCcpIHF1ZXJ5
U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUpICsgJz0nICsgZW5jb2RlVVJJ
Q29tcG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHF1ZXJ5U3Ry
aW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBlbmRIVE1MXG5cbnZhciBhcHBl
bmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2luJyxcblx0YWZ0ZXI6ICdhZnRl
ckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDogJ2FmdGVyQmVnaW4nLFxuXHRp
bnNpZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCgnYXBwZW5kSFRNTCcs
ICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkg
PyBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0QWRqYWNlbnRIVE1MKGFwcGVu
ZEluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xuXHRyZXR1cm4gdGhpcztcbn0g
OiBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rpdics
IHtodG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNoaWxkTm9kZXMsXG5cdFx0ZnJh
Z21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFnbWVudCkgcmV0dXJuIHRoaXM7
XG5cdGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFnbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVu
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChjaGlsZHJl
bltpXSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShmcmFn
bWVudCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZhciBjb2xsZWN0ZWQgPSB7fSwg
c3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlkKXtcblx0cmV0dXJuIChzdG9y
YWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xuXG52YXIgY2xlYW4gPSBmdW5j
dGlvbihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVtYmVyO1xuXHRpZiAoaXRlbS5y
ZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlmIChpdGVtLmNsZWFyQXR0cmli
dXRlcykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVpZCAhPSBudWxsKXtcblx0XHRk
ZWxldGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbdWlkXTtcblx0fVxuXHRy
ZXR1cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5wdXQ6ICdjaGVja2VkJywgb3B0
aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBjaGlsZHJlbiA9IGNsZWFuKHRo
aXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJyYXkuZWFjaChjaGlsZHJlbiwg
Y2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0
fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5jb252ZXJ0KHRoaXMuY2hpbGRO
b2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnBhcmVudE5vZGUpID8gdGhp
cy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztcblx0fSxcblxuXHRjbG9uZTog
ZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVudHMgPSBjb250ZW50cyAhPT0g
ZmFsc2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoY29udGVudHMpLCBjZSA9IFtj
bG9uZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRlbnRzKXtcblx0XHRcdGNlLmFw
cGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0
XHRcdHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KSkpO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHR2YXIg
bm9kZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRpZiAoIWtlZXBpZCkgbm9kZS5y
ZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKG5vZGUu
Y2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0XHRc
dFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0XHRcdG5vZGUucmVtb3ZlQXR0
cmlidXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5vZGUub3B0aW9ucyl7XG5cdFx0
XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1lbnQub3B0aW9ucztcblx0XHRc
dFx0XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tqXS5zZWxlY3RlZCA9IGVvW2pd
LnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRc
dHZhciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRcdGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJvcF0gPSBlbGVtZW50W3Byb3Bd
O1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhhc0Nsb25lQnVnKXtcblx0XHRc
dHZhciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKSwgdG8gPSB0aGlz
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRcdGZvciAoaSA9IGNvLmxlbmd0
aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJIVE1MO1xuXHRcdH1cblx0XHQv
KjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xvbmUpO1xuXHR9XG5cbn0pO1xu
XG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0
YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAod2luZG93LmF0dGFjaEV2
ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0XHRjb2xsZWN0ZWRbU2xpY2su
dWlkT2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnRMaXN0ZW5l
cikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0
ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAo
dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwg
Zm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0YWNoRXZlbnQoJ29uJyArIHR5
cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXRyaWV2ZTogZnVuY3Rpb24o
cHJvcGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMp
KSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChkZmx0ICE9IG51bGwgJiYgcHJv
cCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0O1xuXHRcdHJldHVybiBw
cm9wICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRzdG9yZTogZnVuY3Rpb24ocHJv
cGVydHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7
XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdl
dChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbcHJvcGVydHldO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4qL1xuaWYgKHdpbmRvdy5hdHRh
Y2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgZ2MgPSBmdW5jdGlv
bigpe1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4pO1xuXHRcdGlmICh3aW5kb3cu
Q29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0d2luZG93LnJlbW92ZUxpc3Rl
bmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2FkJywg
Z2MpO1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVydGllcyA9IHt9O1xuXG5cblxu
RWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDogZnVuY3Rpb24oc3R5bGUpe1xu
XHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5j
dGlvbigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xuXHR9XG5cbn07XG5cbkVsZW1l
bnQuUHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRp
ZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xuXHRcdGlmIChodG1sID09IG51
bGwpIGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRtbCkgPT0gJ2FycmF5JykgaHRt
bCA9IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmICh0aGlzLnN0eWxl
U2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHlsZVNoZWV0LmNzc1RleHQgPSBo
dG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHR9LFxu
XHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRtbCcsICcnKTtcblx0fVxuXG59
O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwgc3VwcG9ydHNUYWJsZUlubmVy
SFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVlO1xuXG4vKjxsdElFOT4qL1xu
Ly8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJhcnRsZXR0LmNvbS9pbm5lcnNo
aXYvXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgZnJhZ21l
bnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1cHBvcnRzSFRNTDVFbGVtZW50
cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAoIXN1cHBvcnRzSFRNTDVFbGVt
ZW50cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0
YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJr
IG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8nLnNw
bGl0KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
LCBsID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdtZW50LmNyZWF0ZUVsZW1lbnQo
dGFnc1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5zdXBw
b3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHR2YXIg
dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuXHR0YWJsZS5pbm5lckhU
TUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRydWU7XG59KTtcblxuLyo8bHRG
RjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksIGh0bWwgPSAnPHRk
PjwvdGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0c1RSSW5uZXJIVE1MID0gKHRy
LmlubmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9sdEZGND4qL1xuXG5pZiAoIXN1
cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5lckhUTUwgfHwgIXN1cHBvcnRz
SFRNTDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0ID0gKGZ1bmN0
aW9uKHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xuXHRcdFx0dGFibGU6IFsxLCAn
PHRhYmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBbMSwgJzxzZWxlY3Q+JywgJzwv
c2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48
L3RhYmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90
Ym9keT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0aW9ucy50aGVhZCA9IHRyYW5z
bGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxuXHRcdHJldHVybiBmdW5jdGlv
bihodG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlmICh0aGlzLnN0eWxlU2hlZXQp
IHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0
dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTtcblx0XHRcdGlmICghd3Jh
cCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAsICcnLCAnJ107XG5cdFx0XHRp
ZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblxuXHRcdFx0dmFyIGxldmVs
ID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCB0YXJn
ZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50
LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5pbm5lckhUTUwgPSBbd3JhcFsx
XSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xuXHRcdFx0d2hpbGUgKGxldmVs
LS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0dGhpcy5lbXB0eSgpLmFkb3B0
KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSBm
cmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIgPSBudWxsO1xuXHRc
dH07XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0KTtcbn1cbi8qPC9JRT4qL1xu
XG4vKjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9y
bScpO1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbj5zPC9vcHRpb24+PC9z
ZWxlY3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFsdWUgIT0gJ3MnKSBFbGVtZW50
LlByb3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFy
IHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9ICdzZWxlY3QnKSByZXR1cm4g
dGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlz
LmdldEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBvcHRp
b24gPSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUo
J3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQp
ID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHRcdFx0aWYgKG9wdGlvblZh
bHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG5cdFx0fVxuXHR9
LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9uID0gdGhpcywgdGFnID0gb3B0
aW9uLmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxlY3QnICYmIHRhZyAhPSAnb3B0
aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7XG5cblx0XHRpZiAodGFnID09
ICdzZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVjdGVkKClbMF0pKSByZXR1cm4g
Jyc7XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpO1xu
XHRcdHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRp
b24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0gbnVsbDtcbi8qPC9sdElFOT4q
L1xuXG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmdldEF0dHJp
YnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9IHtcblx0c2V0OiBmdW5jdGlv
bihpZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9
IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuaWQgfHwgbnVs
bDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0
cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xuLyo8L0lFPiovXG5cbn0pKCk7
XG5cbi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBF
dmVudCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jvc3MtYnJvd3Nlci5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwg
QXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJvdmlkZXM6IEV2ZW50XG5cbi4u
LlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9O1xudmFyIG5vcm1hbGl6ZVdo
ZWVsU3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3JtYWxpemVkO1xuXHRpZiAoZXZl
bnQud2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50LndoZWVsRGVsdGEgJSAxMjAg
PT0gMCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53aGVlbERlbHRhIC8gMTI7XG5c
dH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRlbHRhWSB8fCBldmVudC5kZXRh
aWwgfHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQgJSAzID09IDAgPyByYXdBbW91
bnQgLyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVybiBub3JtYWxpemVkO1xufTtc
blxudmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBUeXBlKCdET01FdmVudCcsIGZ1
bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0gd2luZG93O1xuXHRldmVudCA9
IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRlbmRlZCkgcmV0dXJuIGV2ZW50
O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVuZGVkID0gdHJ1ZTtcblx0dGhp
cy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRyb2wgPSBldmVudC5jdHJsS2V5
O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5tZXRhID0gZXZlbnQubWV0YUtl
eTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBlO1xuXHR2YXIgdGFyZ2V0ID0g
ZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFy
Z2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXHR0aGlzLnRh
cmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5cGUuaW5kZXhPZigna2V5Jykg
PT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZlbnQud2hpY2ggfHwgZXZlbnQu
a2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUgIT0gJ2tleXByZXNzJykgdGhp
cy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAna2V5ZG93bicgfHwgdHlwZSA9
PSAna2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNvZGUgPCAxMjQpIHRoaXMua2V5
ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAoY29kZSA+IDk1ICYmIGNvZGUg
PCAxMDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0XHRpZiAodGhpcy5rZXkgPT0g
bnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93ZXJDYXNlKCk7
XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2RibGNsaWNrJyB8fCB0
eXBlID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ0RPTU1v
dXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0gMCl7XG5cdFx0dmFyIGRvYyA9
IHdpbi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRN
b2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xuXHRcdHRoaXMucGFn
ZSA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIDogZXZl
bnQuY2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51
bGwpID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9jLnNjcm9sbFRvcFxuXHRcdH07
XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBl
dmVudC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNsaWVudFgsXG5cdFx0XHR5OiAo
ZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdpbi5wYWdlWU9mZnNldCA6IGV2
ZW50LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwg
dHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwnKSB0aGlzLndoZWVsID0gbm9y
bWFsaXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdodENsaWNrID0gKGV2ZW50Lndo
aWNoID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlmICh0eXBlID09ICdtb3VzZW92
ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdtb3VzZWVudGVyJyB8fCB0eXBl
ID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdldCA9IHR5cGUgPT0gJ21vdXNl
b3ZlcicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2YXIgcmVsYXRlZCA9IGV2ZW50
LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAnZnJvbScgOiAndG8nKSArICdF
bGVtZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxhdGVkLm5vZGVUeXBlID09IDMp
IHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQg
PSBkb2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZS5pbmRleE9m
KCd0b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJlJykgPT0gMCl7XG5cdFx0dGhp
cy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGUgPSBldmVudC5zY2Fs
ZTtcblx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xuXHRcdHRo
aXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcblx0XHR2YXIgdG91Y2hl
cyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0aWYgKHRvdWNoZXMgJiYgdG91
Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBdO1xuXHRcdFx0dGhpcy5wYWdl
ID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5cdFx0XHR0aGlzLmNsaWVudCA9
IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtcblx0XHR9XG5cdH1cblxuXHRp
ZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRpZiAoIXRoaXMucGFnZSkgdGhp
cy5wYWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50KHtcblxuXHRzdG9wOiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCkuc3RvcFByb3BhZ2F0aW9u
KCk7XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0
XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVu
dC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGVsc2Ug
dGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihjb2RlLCBrZXkpe1xuXHRfa2V5
c1tjb2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5ET01FdmVudC5kZWZpbmVLZXlz
ID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRydWUpO1xuXG5ET01FdmVudC5k
ZWZpbmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24nLCAnMzcnOiAnbGVmdCcsICcz
OSc6ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3BhY2UnLCAnOCc6ICdiYWNrc3Bh
Y2UnLCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEzJzogJ2VudGVyJ1xufSk7XG5c
bn0pKCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkV2ZW50XG5cbmRlc2Ny
aXB0aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBldmVudHMu
IFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgY3VzdG9t
IEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5wcm92aWRlczogRWxlbWVudC5F
dmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVtZW50LlByb3BlcnRpZXMuZXZl
bnRzID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5hZGRFdmVudHMoZXZlbnRzKTtc
bn19O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7
XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhp
cy5yZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZlbnRzW3R5cGVdKSBldmVudHNb
dHlwZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlmIChldmVudHNbdHlwZV0ua2V5
cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLnB1c2go
Zm4pO1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRjdXN0b20gPSBFbGVtZW50LkV2
ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5c
dFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20ub25BZGQuY2Fs
bCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlvbil7XG5cdFx0XHRc
dGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRpZiAoY3VzdG9tLmNvbmRp
dGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQp
O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYg
KGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNh
bGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0gZnVuY3Rpb24oKXtcblx0XHRc
dHJldHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFyIG5hdGl2ZUV2ZW50ID0gRWxl
bWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChuYXRpdmVFdmVudCl7XG5cdFx0
XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQsIHNlbGYuZ2V0V2luZG93KCkp
O1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBldmVudCkgPT09IGZhbHNlKSBl
dmVudC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFkZExpc3RlbmVy
KHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1cblx0XHRldmVudHNbdHlwZV0u
dmFsdWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZl
bnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgn
ZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7
XG5cdFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFyIGluZGV4ID0gbGlzdC5rZXlz
LmluZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFy
IHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LmtleXNbaW5kZXhd
O1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0dmFyIGN1c3RvbSA9IEVsZW1l
bnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vblJl
bW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1
c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlz
LCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50c1t0eXBlXSkg
PyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0pIDogdGhpcztc
blx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgZXZl
bnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVudHNbZXZlbnRdKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5c
dFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtcblx0XHRc
dGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVd
KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIgYXR0YWNoZWQgPSB0aGlzLnJl
dHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhpcztcblx0XHRp
ZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNoZWQpIHRoaXMucmVtb3ZlRXZl
bnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50cycpO1xuXHRcdH0gZWxzZSBp
ZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtldmVudHNdLmtleXMuZWFjaChm
dW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQoZXZlbnRzLCBmbik7XG5cdFx0
XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVudHNdO1xuXHRcdH1cblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRl
bGF5KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYg
KCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5
LmNvbnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZu
KXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0
ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJvbSwgdHlwZSl7XG5cdFx0ZnJv
bSA9IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMgPSBmcm9tLnJldHJpZXZlKCdl
dmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCF0eXBlKXtc
blx0XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMuY2xvbmVFdmVudHMoZnJv
bSwgZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSl7XG5cdFx0XHRldmVu
dHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5hZGRFdmVudCh0
eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRjbGljazogMiwgZGJsY2xpY2s6
IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6IDIsIC8vbW91c2UgYnV0
dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91c2VTY3JvbGw6IDIsIC8vbW91
c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91c2Vtb3ZlOiAyLCBzZWxl
Y3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50XG5cdGtleWRvd246IDIs
IGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRvcmllbnRhdGlvbmNoYW5nZTog
MiwgLy8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92ZTogMiwgdG91Y2hlbmQ6IDIs
IHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3RhcnQ6IDIsIGdlc3R1cmVjaGFu
Z2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9jdXM6IDIsIGJsdXI6IDIsIGNo
YW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAyLCBwYXN0ZTogMiwgaW5wdXQ6
IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6IDEsIGJlZm9yZXVubG9hZDog
MiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVkOiAxLCByZWFkeXN0YXRlY2hh
bmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3BzdGF0ZTogMiwgcGFnZXNob3c6
IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAxLCBhYm9ydDogMSwgc2Nyb2xs
OiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5FdmVudHMgPSB7XG5cdG1vdXNl
d2hlZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1lbnQgPyAnd2hlZWwnIDogJ29u
bW91c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcgOiAnRE9NTW91c2VTY3JvbGwn
XG5cdH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIHJlbGF0ZWQg
PSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9PSBudWxsKSByZXR1cm4gdHJ1
ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAocmVsYXRlZCAhPSB0
aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVPZih0aGlzKSAhPSAnZG9jdW1l
bnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5cbmlmICgnb25tb3VzZWVudGVy
JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5t
b3VzZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VsZWF2ZSA9IDI7XG5cdEVsZW1l
bnQuTW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xuXHRFbGVtZW50LkV2ZW50cy5t
b3VzZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogY2hl
Y2tcblx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZlID0ge1xuXHRcdGJhc2U6ICdt
b3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xufVxuXG4vKjxsdElFOT4qL1xu
aWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLnBy
b3BlcnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hhbmdlID0ge1xuXHRcdGJhc2U6
IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0XHRcdHJldHVybiAo
dGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09
ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hhbmdlJztcblx0XHR9LFxuXHRc
dGNvbmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGV2ZW50LnR5cGUgIT0g
J3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0eU5hbWUgPT0gJ2NoZWNrZWQn
O1xuXHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxu
XG5uYW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEVs
ZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxlZ2F0ZSBtZXRob2QgZm9yIG1v
cmUgZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5E
ZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZXZlbnRMaXN0ZW5l
clN1cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xuXG5FbGVtZW50Lk5hdGl2ZUV2
ZW50cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNvdXQgPSAyO1xuXG52YXIg
YnViYmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHR3
aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRpZiAobWF0Y2godGFyZ2V0LCBl
dmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRhcmdldCk7XG5cdFx0dGFyZ2V0
ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9XG59O1xuXG52YXIgbWFwID0g
e1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9u
OiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3VzZWxlYXZlOiB7XG5cdFx0YmFz
ZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrXG5c
dH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChldmVudExpc3RlbmVyU3VwcG9y
dCA/ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9LFxuXHRibHVyOiB7XG5cdFx0
YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAnZm9jdXNvdXQnLFxuXHRcdGNh
cHR1cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZhciBfa2V5ID0gJyRkZWxlZ2F0
aW9uOic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cblx0cmV0dXJuIHtc
blxuXHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTogZnVuY3Rpb24oc2VsZiwgdWlk
KXtcblx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5l
cnMnLCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3QuZm9ybXMpIGZvciAodmFyIGkg
PSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8vIHRoZSBmb3JtIG1heSBoYXZl
IGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxuXHRcdFx0XHQvLyByZW1vdmVF
dmVudCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBldmVudCB3YXNcblx0XHRcdFx0
Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVu
dCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0LmZuc1tpXSk7XG5cdFx0XHR9
XG5cdFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwg
dGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0LmdldCgndGFnJykgPT0gJ2Zv
cm0nKSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQoJ2Zvcm0nKTtcblx0XHRcdGlm
ICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJzID0gc2VsZi5yZXRyaWV2ZShf
a2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRcdGxpc3RlbmVyID0gbGlzdGVu
ZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0XHRcdGZvcm1zID0gbGlzdGVu
ZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0aWYgKGZvcm1zLmluZGV4T2Yo
Zm9ybSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2goZm9ybSk7XG5cblx0XHRcdHZh
ciBfZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9ybS5hZGRFdmVudCh0eXBlLCBf
Zm4pO1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlzdGVuZXJzW3VpZF0gPSBsaXN0
ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywgbGlzdGVu
ZXJzKTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNlcnZlciA9IGZ1bmN0aW9uKHR5
cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxcblx0XHRsaXN0ZW46IGZ1bmN0
aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdFx0XHR2YXIgZXZlbnRzID0g
e2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRzKGV2ZW50cyk7XG5c
dFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0
YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0
XHRldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0fVxuXHR9O1xufTtcblxuaWYg
KCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZChtYXAsIHtcblx0c3VibWl0OiBm
b3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9ic2VydmVyKCdyZXNldCcpLFxu
XHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRzZWxlY3Q6IGlucHV0T2JzZXJ2
ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIgcHJvdG8gPSBFbGVtZW50LnBy
b3RvdHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxcblx0cmVtb3ZlRXZlbnQgPSBw
cm90by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rpb24ob2xkLCBtZXRob2Qpe1xu
XHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUpe1xuXHRcdGlmICh0eXBlLmlu
ZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVz
ZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0eXBlKS5leHByZXNzaW9u
c1swXVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5ICE9ICdyZWxheScpIHJldHVy
biBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIG5ld1R5cGUg
PSBwYXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNlKDEpLmVhY2goZnVuY3Rpb24o
cHNldWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRvLmtleSArIChwc2V1ZG8udmFs
dWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5cdFx0fSk7XG5cdFx0b2xkLmNh
bGwodGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBuZXdUeXBl
LCBwYXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xufTtcblxudmFyIGRlbGVnYXRp
b24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbil7XG5cdFx0dmFy
IHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9y
YWdlW3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91aWQgaW4gc3RvcmVkKXtcblx0
XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVkW191aWRdLm1hdGNoID09IG1h
dGNoKSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5cGUgPSB0eXBlLCBfbWF0Y2gg
PSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0dHlwZSA9IF9t
YXAuYmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0KXtcblx0XHRc
dHJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5cdFx0fTtcblxuXHRcdHZhciBl
bGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5cdFx0aWYgKF9tYXAuY29uZGl0
aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29uZGl0aW9uKXtcblx0XHRcdHZh
ciBfX21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRF
dmVudC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnQpe1xu
XHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAmJiBjb25kaXRpb24uY2FsbCh0
YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIHNlbGYgPSB0
aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIgZGVsZWdhdG9yID0gX21hcC5s
aXN0ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2
ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRh
cmdldCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpO1xu
XHRcdH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2
ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRh
cmdldCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHR9O1xu
XG5cdFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0b3JlZFt1aWRdID0ge1xuXHRc
dFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0XHRkZWxlZ2F0b3I6IGRlbGVn
YXRvclxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0cmV0dXJuIGFk
ZEV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHR9LFxu
XG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4sIF91aWQpe1xuXHRcdHZh
ciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3Rv
cmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRoaXM7XG5cblx0XHRpZiAoX3Vp
ZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3IgPSBzdG9yZWRbX3VpZF0uZGVs
ZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0dHlwZSA9IF9tYXAuYmFzZSB8
fCBfdHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5yZW1vdmUodGhpcywgX3VpZCk7
XG5cdFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9y
ZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3Is
IF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlkLCBzO1xuXHRcdGlmIChmbikg
Zm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRp
ZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1cm4gZGVsZWdhdGlvbi5yZW1v
dmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191aWQpO1xuXHRcdH0gZWxzZSBm
b3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlm
IChzLm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlw
ZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xu
XHRhZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24uYWRkRXZlbnQpLFxuXHRyZW1v
dmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQpXG59KTtc
blxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0eWxlXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdHlsZXMgb2YgRWxl
bWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxlbWVudC5TdHlsZVxuXG4uLi5c
biovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3VtZW50Lmh0bWwsIGVsO1xuXG4v
LzxsdElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9lcyBub3QgcmVtb3ZlIHN0eWxl
cyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5bGUuY29sb3IgPSBudWxsO1xu
dmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xvciA9PSAncmVkJztcblxuLy8g
Y2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciogc2hvcnRoYW5kIHN0eWxlcyBp
biB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGluc3RlYWQgb2Ygd2lkdGgtc3R5
bGUtY29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIzYWJjJztcbmVsLnN0eWxlLmJv
cmRlciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciA9IGVsLnN0eWxl
LmJvcmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJRTk+XG5cbnZhciBoYXNHZXRD
b21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSxcblx0c3VwcG9ydEJvcmRl
clJhZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlLmJvcmRlclJhZGl1
cyAhPSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVzID0ge3NldDogZnVuY3Rpb24o
c3R5bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19O1xuXG52YXIgaGFzT3BhY2l0
eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhhc0ZpbHRlciA9IChodG1sLnN0
eWxlLmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBoYVxcKG9wYWNpdHk9KFtcXGQu
XSspXFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0
eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0eSk7XG5cdGVsZW1lbnQuc3R5
bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkgPT0gbnVsbCA/ICd2aXNpYmxl
JyA6ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0RmlsdGVyID0gZnVuY3Rpb24o
ZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGUsXG5c
dFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmls
dGVyJykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAudGVzdChmaWx0ZXIpID8gZmls
dGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAnICcgKyB2YWx1ZSkudHJpbSgp
O1xuXHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTtc
bn07XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlv
bihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTtc
bn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGlmICghZWxl
bWVudC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0eWxlLmhhc0xheW91dCkgZWxl
bWVudC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCB8fCBvcGFjaXR5ID09
IDEpe1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnJyk7XG5cdFx0aWYgKG9wYWNp
dHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNldEZpbHRlcihlbGVtZW50LCBy
ZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0RmlsdGVy
KGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAob3BhY2l0eSAqIDEwMCkubGlt
aXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNldFZpc2liaWxpdHkpKTtcblxu
dmFyIGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIg
b3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5
bGUoJ29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcnKSA/IDEgOiBvcGFjaXR5LnRv
RmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBmaWx0
ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdm
aWx0ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikgb3BhY2l0eSA9IGZpbHRlci5t
YXRjaChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51bGwgfHwgZmlsdGVyID09IG51
bGwpID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5jdGlvbihlbGVtZW50KXtcblx0
dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0eScpO1xuXHRpZiAob3BhY2l0
eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9PSAnaGlkZGVu
JyA/IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5cbnZhciBmbG9hdE5hbWUgPSAo
aHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZsb2F0JyA6ICdjc3NGbG9hdCcs
XG5cdG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDogJzAlJywgY2VudGVyOiAnNTAl
JywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRoYXNCYWNrZ3JvdW5kUG9zaXRp
b25YWSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblggIT0gbnVsbCksXG5cdHByZWZp
eFBhdHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbihwcm9wZXJ0
eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBhdHRlcm4sICckMS0nKS5jYW1l
bENhc2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0eWxlID0gZnVuY3Rpb24oc3R5
bGUsIHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKXtc
blx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAnWCcpO1xuXHRcdHByb3BlcnR5
ICs9ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkpO1xufTtcbi8v
PC9sdElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldENvbXB1dGVkU3R5bGU6IGZ1
bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgdGhpcy5j
dXJyZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtjYW1lbENhc2UocHJvcGVydHkp
XTtcblx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERvY3VtZW50KHRoaXMpLmRlZmF1
bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJldHVybiAoY29tcHV0ZWQpID8g
Y29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0gZmxvYXROYW1lKSA/ICdmbG9h
dCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxcblxuXHRzZXRTdHlsZTogZnVu
Y3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKXtc
blx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuXHRc
dFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5c
dFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6
IHByb3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnc3RyaW5nJyl7XG5cdFx0XHR2
YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAnQCcpLnNwbGl0KCcgJyk7XG5c
dFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChmdW5jdGlvbih2YWwsIGkpe1xu
XHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0XHRyZXR1cm4gKHR5cGVPZih2
YWwpID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywgTWF0aC5yb3VuZCh2YWwpKSA6
IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09IFN0cmlu
ZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpO1xuXHRc
dH1cblx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdC8vPGx0SUU5PlxuXHRc
dGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgZG9lc05vdFJlbW92ZVN0eWxl
cyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0XHRyZW1vdmVTdHlsZSh0aGlz
LnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmIChwcm9w
ZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRoaXMpO1xuXHRcdHByb3BlcnR5
ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7
XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVydHkuaW5kZXhPZignYm9yZGVy
UmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdi
b3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJC
b3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7XG5cdFx0XHRcdHJldHVybiB0
aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0aGlzKS5qb2luKCcgJyk7XG5c
dFx0fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3BlcnR5XTtcblx0XHRpZiAoIXJl
c3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRpZiAoRWxlbWVudC5TaG9ydFN0
eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0XHRyZXN1bHQgPSBbXTtcblx0
XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVzW3Byb3BlcnR5XSkgcmVzdWx0
LnB1c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQuam9pbignICcp
O1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5
KTtcblx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZICYmIC9eYmFja2dyb3Vu
ZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJl
cGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0aW9uKHBvc2l0aW9uKXtcblx0
XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtcblx0XHRcdH0pIHx8ICcwcHgn
O1xuXHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBvc2l0
aW9uJykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0KXtcblx0XHRcdHJlc3VsdCA9
IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVzdWx0Lm1hdGNoKC9yZ2JhP1xc
KFtcXGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxh
Y2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRcdH1cblx0XHRpZiAoIWhhc0dl
dENvbXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHldKXtcblx0XHRcdGlmICgoL14o
aGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9weCQvLnRlc3QocmVzdWx0KSkp
e1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3aWR0aCcpID8gWydsZWZ0Jywg
J3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7XG5cdFx0XHRcdHZhbHVlcy5l
YWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9IHRoaXMuZ2V0U3R5bGUoJ2Jv
cmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRoaXMuZ2V0U3R5bGUoJ3BhZGRp
bmctJyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0cmV0dXJu
IHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCldIC0gc2l6ZSArICdweCc7XG5c
dFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRkaW5nLykudGVz
dChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQpKSl7XG5cdFx0XHRcdHJldHVy
biAnMHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKHJldHVybnNC
b3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdodHxCb3R0b218TGVmdCk/JC8u
dGVzdChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xuXHRcdFx0cmV0dXJuIHJlc3Vs
dC5yZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAkMyAkMScpO1xuXHRcdH1cblx0
XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHNldFN0eWxlczog
ZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBpbiBzdHlsZXMpIHRoaXMuc2V0
U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGdldFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0QXJyYXku
ZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdHJlc3VsdFtrZXld
ID0gdGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiByZXN1bHQ7
XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRsZWZ0OiAnQHB4JywgdG9wOiAn
QHB4JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3aWR0aDogJ0BweCcsIGhlaWdo
dDogJ0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAnQHB4JywgbWluV2lkdGg6ICdA
cHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoQCwgQCwgQCkn
LCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3NpdGlvbjogJ0BweCBAcHgnLCBj
b2xvcjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4JywgbGV0dGVyU3BhY2luZzog
J0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChAcHggQHB4IEBweCBAcHgpJyxc
blx0bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzogJ0BweCBAcHggQHB4IEBweCcs
IGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdi
KEAsIEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXJTdHls
ZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdi
KEAsIEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0AnLCAnem9vbSc6ICdAJywgZm9u
dFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0eTogJ0AnLCBib3JkZXJSYWRp
dXM6ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVsZW1lbnQuU2hvcnRTdHlsZXMg
PSB7bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30sIGJvcmRlcldpZHRoOiB7fSwg
Ym9yZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5bJ1RvcCcsICdSaWdodCcsICdC
b3R0b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9uKXtcblx0dmFyIFNob3J0ID0g
RWxlbWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1lbnQuU3R5bGVzO1xuXHRbJ21h
cmdpbicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7XG5cdFx0dmFyIHNkID0gc3R5
bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9IEFsbFtzZF0gPSAnQHB4Jztc
blx0fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9uO1xuXHRTaG9ydC5ib3JkZXJb
YmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xuXHR2YXIgYmR3ID0gYmQgKyAn
V2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsgJ0NvbG9yJztcblx0U2hvcnRb
YmRdID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBTaG9ydFtiZF1bYmR3XSA9IEFs
bFtiZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jkc10gPSBTaG9ydFtiZF1bYmRz
XSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xvcltiZGNdID0gU2hvcnRbYmRd
W2JkY10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7XG5cbmlmIChoYXNCYWNrZ3Jv
dW5kUG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNrZ3JvdW5kUG9zaXRpb24gPSB7
YmFja2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9zaXRpb25ZOiAnQCd9O1xufSko
KTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lvbnNcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNjcm9sbCwgb3IgcG9zaXRpb25p
bmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBvc2l0aW9uaW5nIGJhc2VkIG9u
IHRoZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29kZSBhbmQgc21hcnQgYnJvd3Nl
ciBmaXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwu
aHRtbCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBvbiBbWVVJXShodHRwOi8vZGV2
ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vuc2VdKGh0dHA6Ly9kZXZlbG9w
ZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEVs
ZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1lbnNpb25zXVxuXG4uLi5cbiov
XG5cbihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWxlbWVu
dC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcbnZhciBi
cm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50ID09PSBlbGVtZW50KTtcbmVs
ZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21wb25lbnRzID0gWydoZWlnaHQn
LCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRlclRvcFdpZHRoJywgJ2JvcmRl
ckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsnd2lkdGgnLCAncGFkZGluZ0xl
ZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRo
J107XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24oZWwpe1xuXG5cdHZhciBnQ1Mg
PSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91bmRzID0ge3g6IDAsIHk6IDB9
O1xuXG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5kcy55
ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lkdGhDb21wb25lbnRzLmVhY2go
ZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0
fSk7XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZzZXQgPSBmdW5jdGlvbihlbCl7
XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycgfHwgaXNC
b2R5KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0
dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkkL2kpLnRlc3QoZWwudGFnTmFt
ZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Nyb2xsVG86IGZ1bmN0aW9uKHgs
IHkpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhpcy5nZXRXaW5kb3coKS5zY3Jv
bGxUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zY3JvbGxMZWZ0ID0geDtcblx0
XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhp
cy5nZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElFOT5cblx0XHQvLyBUaGlzIGlm
IGNsYXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0ZSBnZXRCb3VuZGluZ0NsaWVu
dFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRlbi5cblx0XHRpZiAoIXdpbmRv
dy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zmc2V0V2lkdGgsIHk6IHRoaXMu
b2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQvLyBUaGlzIHN2ZyBzZWN0aW9u
IHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBjYW4gYmUgcmVtb3ZlZCB3aGVu
IEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVnIGluZm86IGh0dHBzOi8vYnVn
emlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4NVxuXHRcdGlmICh0aGlzLmdl
dCgndGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVTaXplKHRoaXMpO1xuXG5cdFx0
dHJ5IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xu
XHRcdFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5kcy5oZWlnaHR9O1xuXHRcdH0g
Y2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0XHR9XG5cdH0sXG5cblx0
Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4g
dGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNj
cm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBm
dW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygp
LmdldFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxMZWZ0LCB5OiB0aGlzLnNj
cm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxl
bWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0d2hp
bGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVs
ZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5zY3JvbGxUb3A7
XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdH1cblx0XHRyZXR1cm4g
cG9zaXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBicm9rZW5PZmZzZXRQYXJlbnQg
PyBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVs
ZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJl
dHVybiBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAoc3R5bGVTdHJpbmcoZWxlbWVu
dCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRTdGF0aWMgOiBpc09mZnNldDtc
blx0XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpKXtcblx0XHRcdGlmIChp
c09mZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdFx0cmV0dXJu
IG51bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRp
ZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09
ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlbGVtZW50
Lm9mZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0s
XG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIgaGFzR2V0Qm91bmRpbmdDbGll
bnRSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5cblx0XHRpZiAoaGFzR2V0Qm91
bmRpbmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0aGlzLmdldERvY3VtZW50KCku
ZG9jdW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9IGh0bWwuZ2V0U2Nyb2xsKCks
XG5cdFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxzKCksXG5cdFx0XHRcdGlzRml4
ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJyk7XG5cblx0XHRc
dHJldHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMu
eCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwuY2xpZW50TGVmdCxcblx0
XHRcdFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnkgKyAoKGlzRml4ZWQp
ID8gMCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxuXHRcdFx0fTtcblx0XHR9XG5c
blx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdGlm
IChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRcdHdoaWxlIChlbGVtZW50ICYm
ICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50Lm9mZnNldExl
ZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xuXG5cdFx0XHRlbGVt
ZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvc2l0aW9u
O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZSl7XG5cdFx0dmFyIG9m
ZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xsID0gdGhpcy5nZXRTY3JvbGxz
KCk7XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zmc2V0LnggLSBzY3JvbGwueCxc
blx0XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xuXG5cdFx0aWYgKHJlbGF0aXZl
ICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkpe1xuXHRcdFx0dmFyIHJlbGF0
aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xuXHRcdFx0cmV0dXJuIHt4OiBw
b3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJvcmRlcihyZWxhdGl2ZSksIHk6
IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BCb3JkZXIocmVsYXRpdmUpfTtc
blx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBm
dW5jdGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRX
aW5kb3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9z
aXRpb24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0dmFyIG9i
aiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0b3A6IHBvc2l0aW9uLnksXG5c
dFx0XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXplLnlcblx0XHR9O1xuXHRcdG9i
ai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9iai5ib3R0b20gPSBvYmoudG9w
ICsgb2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGNvbXB1dGVQb3NpdGlv
bjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGVmdDogb2JqLnggLSBzdHls
ZU51bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRvcDogb2JqLnkgLSBzdHlsZU51
bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxcblxuXHRzZXRQb3NpdGlvbjog
ZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHlsZXModGhpcy5jb21wdXRlUG9z
aXRpb24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50LCBXaW5kb3ddLmludm9rZSgn
aW1wbGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdl
dENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBkb2MuY2xpZW50V2lkdGgsIHk6
IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlz
KTtcblx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xsTGVmdCwgeTog
d2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbFNp
emU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyksXG5c
dFx0XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkgPSB0aGlzLmdldERvY3VtZW50
KCkuYm9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9jLnNjcm9sbFdpZHRoLCBib2R5
LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5zY3JvbGxIZWlnaHQsIGJvZHku
c2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHRyZXR1cm4ge3Rv
cDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXplLngsIGhlaWdodDogc2l6
ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8gcHJpdmF0ZSBtZXRob2RzXG5c
bnZhciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZTtcblxuZnVuY3Rpb24g
c3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWxlbWVu
dCwgc3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0aW9uIHRvcEJvcmRlcihlbGVt
ZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItdG9wLXdpZHRoJyk7
XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJl
cihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gaXNCb2R5KGVs
ZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSkudGVzdChlbGVtZW50LnRhZ05h
bWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVsZW1lbnQpe1xuXHR2YXIgZG9j
ID0gZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFkb2MuY29tcGF0TW9kZSB8fCBk
b2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcbn1c
blxufSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtwb3NpdGlvbjogJ3NldFBvc2l0
aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9jdW1lbnQsIEVsZW1lbnRdLmlu
dm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0aDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxUb3A6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtcblx0fSxcblxuXHRnZXRTY3Jv
bGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLng7XG5cdH0s
XG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNj
cm9sbFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRoOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFRvcDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7XG5cdH0sXG5cblx0Z2V0TGVm
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLng7XG5cdH1cblxu
fSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBi
YXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVyIEZ4IENsYXNz
ZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0NoYWluLCBF
dmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92aWRlczogRnhcblxuLi4uXG4q
L1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9IG5ldyBDbGFzcyh7XG5cblx0
SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxu
XHRvcHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWwsXG5cdFx0b25DYW5jZWw6IG5p
bCxcblx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRmcHM6IDYwLFxuXHRcdHVuaXQ6
IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVzOiBudWxsLFxuXHRcdGZyYW1l
U2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCB8fCB0aGlz
O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHRnZXRUcmFuc2l0aW9u
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtcblx0XHRcdHJldHVybiAtKE1h
dGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xuXHR9LFxuXG5cdHN0ZXA6IGZ1
bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFtZVNraXApe1xuXHRcdFx0dmFy
IGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRoaXMudGltZSkgOiAwLCBmcmFt
ZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0dGhpcy50aW1lID0gbm93O1xu
XHRcdFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJh
bWUrKztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKXtcblx0XHRc
dHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1lIC8gdGhpcy5mcmFtZXMpO1xu
XHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgZGVsdGEpKTtc
blx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhp
cy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpO1xuXHRcdFx0dGhpcy5z
dG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRyZXR1cm4g
bm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0
cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0fSxcblxuXHRjaGVjazogZnVu
Y3Rpb24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJldHVybiB0cnVlO1xuXHRcdHN3
aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5j
ZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5j
YWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKGZyb20sIHRvKXtcblx0XHRp
ZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLmZyb20gPSBm
cm9tO1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1lID0gKHRoaXMub3B0aW9ucy5m
cmFtZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0dGhpcy50cmFu
c2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFyIGZyYW1lcyA9IHRoaXMub3B0
aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0aW9uID0gdGhpcy5vcHRp
b25zLmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5EdXJhdGlvbnNbZHVyYXRpb25d
IHx8IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUludGVydmFsID0gMTAwMCAvIGZw
cztcblx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24g
LyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAh
PT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh0aGlzLnN1YmplY3QpO1xu
XHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1YmplY3QpO1xuXHRcdHB1
c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
c3RvcDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25z
LmZwcyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5mcmFtZSl7XG5cdFx0XHRcdHRo
aXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHRcdGlmICghdGhp
cy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0aGlzLnN1Ympl
Y3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ3N0b3AnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZlKHRoaXMuc3ViamVjdCA9PT0g
dGhpcyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0
dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCkuY2xlYXJDaGFpbigpO1xuXHRc
dFx0dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXN1
bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQoKSkgcHVzaEluc3RhbmNlLmNh
bGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0gaW5zdGFuY2VzW3RoaXMub3B0
aW9ucy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29udGFpbnModGhpcyk7XG5cdH0s
XG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmZyYW1lIDwgdGhp
cy5mcmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5cbn0pO1xuXG5GeC5jb21wdXRl
ID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJuICh0byAtIGZyb20pICogZGVs
dGEgKyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9ydCc6IDI1MCwgJ25vcm1hbCc6
IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVyc1xuXG52YXIgaW5zdGFuY2Vz
ID0ge30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0aW9uKCl7XG5cdHZhciBub3cg
PSBEYXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdHZh
ciBpbnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNlKSBpbnN0YW5jZS5zdGVwKG5v
dyk7XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIg
bGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9IFtdKTtcblx0bGlzdC5w
dXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNbZnBzXSA9IGxvb3AucGVyaW9k
aWNhbChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07XG5cbnZhciBwdWxsSW5zdGFu
Y2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdO1xuXHRpZiAo
bGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAoIWxpc3QubGVuZ3RoICYmIHRp
bWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBzXTtcblx0XHRcdHRpbWVyc1tm
cHNdID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0fVxuXHR9XG59O1xuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhl
IENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4sIEZ4Lk1vcnBoLCBGeC5FbGVt
ZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRngsIEVs
ZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4uXG4qL1xuXG5GeC5DU1MgPSBu
ZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJlcGFyZXMgdGhlIGJhc2UgZnJv
bS90byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFs
dWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVlcyk7XG5cdFx0dmFyIGZyb20g
PSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0byA9PSBudWxsKXtcblx0XHRc
dHRvID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0eWxlKHByb3BlcnR5KTtcblx0
XHRcdHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0XHQvLyBhZGFwdGVkIGZyb206
IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21hc3Rlci9meC5qcyNMMjk5XG5c
dFx0XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09ICdzdHJpbmcnICYmIGZyb20u
c2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxvYXQoZnJvbSkgIT0gMCl7XG5c
dFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsgdW5pdCk7XG5cdFx0XHRcdHZh
ciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHRcdC8v
IElFIGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhlbFdpZHRoXG5cdFx0XHRcdGlm
ICghKC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxl
WygncGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5cdFx0XHRcdFx0aWYgKHZhbHVl
ID09IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9tIERlYW4gRWR3YXJkcycgaHR0
cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEw
MjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0eWxlLmxlZnQ7XG5cdFx0XHRc
dFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9
IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0
ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZnJvbSA9ICh0byB8fCAx
KSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZsb2F0KGZyb20pIHx8IDApO1xu
XHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9tICsgdW5pdCk7XG5cdFx0XHR9
XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShmcm9tKSwgdG86IHRoaXMucGFy
c2UodG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGludG8gYW4gYXJyYXlcblxuXHRw
YXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVuY3Rpb24uY29udmVydCh2YWx1
ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpID8gdmFsdWUuc3Bs
aXQoJyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJldHVybiB2YWx1ZS5tYXAoZnVu
Y3Rpb24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xuXHRcdFx0dmFyIGZvdW5kID0g
ZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2VycywgZnVuY3Rpb24ocGFyc2Vy
KXtcblx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRcdHZhciBwYXJzZWQgPSBwYXJz
ZXIucGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBwYXJzZWQgPT09IDApIGZvdW5k
ID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0XHRcdH0pO1xuXHRcdFx0Zm91
bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5DU1MuUGFyc2Vycy5TdHJpbmd9
O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8vY29tcHV0ZXMgYnkg
YSBmcm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0aGVpciBwYXJzZXJzLlxuXG5c
dGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIGNvbXB1dGVkID0g
W107XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5ndGgpKS50aW1lcyhmdW5jdGlv
bihpKXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9tW2ldLnBhcnNlci5jb21wdXRl
KGZyb21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBhcnNlcjogZnJvbVtpXS5wYXJz
ZXJ9KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgn
Zng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xuXHR9LFxuXG5cdC8vc2VydmVz
IHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7
XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVlID0gdGhpcy5w
YXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5cdFx0dmFsdWUuZWFjaChmdW5j
dGlvbihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5jb25jYXQoYml0LnBhcnNlci5z
ZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmV0dXJuZWQ7XG5c
dH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxlbWVudFxuXG5cdHJlbmRlcjog
ZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0KXtcblx0XHRlbGVtZW50LnNl
dFN0eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0KSk7XG5cdH0sXG5cblx0Ly9z
ZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBmb3IgYSBzZWxl
Y3RvclxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRcdGlmIChGeC5DU1MuQ2Fj
aGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXTtcblx0XHR2YXIgdG8g
PSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBzZWxlY3Rvci5lc2NhcGVSZWdF
eHAoKSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0gZnVuY3Rpb24ocnVsZXMpe1xu
XHRcdFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7XG5cdFx0XHRcdGlmIChydWxl
Lm1lZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5ydWxlcyB8fCBydWxlLmNzc1J1
bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFydWxlLnN0
eWxlKSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3RvclRl
eHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysvLCBmdW5jdGlvbihtKXtcblx0
XHRcdFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9KSA6IG51bGw7XG5cdFx0
XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3QudGVzdChzZWxlY3RvclRleHQp
KSByZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBmdW5jdGlvbih2
YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHlsZVtzdHlsZV0gfHwgRWxlbWVu
dC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0XHR2YWx1ZSA9IFN0cmluZyhy
dWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVdID0gKCgvXnJnYi8pLnRlc3Qo
dmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9
KTtcblx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0cywgZnVuY3Rp
b24oc2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVmO1xuXHRcdFx0aWYgKGhyZWYg
JiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5kZXhPZihkb2N1bWVudC5kb21h
aW4pID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVl
dC5jc3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7XG5cdFx0fSk7XG5cdFx0cmV0
dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxuXG59KTtcblxuRnguQ1NTLkNh
Y2hlID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENvbG9yOiB7XG5cdFx0cGFyc2U6
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXiNbMC05YS1mXXszLDZ9
JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRcdFx0cmV0dXJuICgodmFsdWUg
PSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKS8pKSkgPyBbdmFsdWVb
MV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9LFxuXHRcdGNvbXB1dGU6IGZ1
bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4gZnJvbS5tYXAoZnVuY3Rpb24o
dmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChGeC5jb21wdXRlKGZyb21baV0s
IHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpO1xuXHRcdH1cblx0fSxcblxu
XHROdW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0XHRjb21wdXRlOiBGeC5jb21w
dXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0XHRyZXR1cm4gKHVu
aXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9LFxuXG5cdFN0cmluZzoge1xu
XHRcdHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0XHRjb21wdXRlOiBmdW5jdGlv
bih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5j
dGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1cblx0fVxuXG59O1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5
bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9mIENTUyBwcm9wZXJ0aWVzIGZv
ciBhbiBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywgb3IgQ1NTIGJhc2VkIHNlbGVj
dG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4
LkNTU1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xuXG5GeC5Nb3JwaCA9IG5ldyBD
bGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVs
ZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3Vt
ZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNl
dDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9PSAnc3RyaW5nJykgbm93ID0g
dGhpcy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5vdykgdGhpcy5yZW5kZXIodGhp
cy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZh
ciBub3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFyZW50
KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRzdGFy
dDogZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnRpZXMp
KSByZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRpZXMgPT0gJ3N0cmluZycpIHBy
b3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0XHR2YXIgZnJvbSA9IHt9LCB0
byA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7XG5cdFx0XHR2YXIgcGFyc2Vk
ID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7XG5cdFx0XHRm
cm9tW3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBhcnNlZC50bztcblx0XHR9XG5c
dFx0cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Q
cm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhp
cy5nZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG1vcnBoID0gdGhpcy5y
ZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0XHRcdG1vcnBoID0gbmV3IEZ4
Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbW9ycGgn
LCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0fVxuXG59O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3BzKXtcblx0XHR0aGlzLmdldCgn
bW9ycGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8q
XG4tLS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIGEg
c2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhlIEZ4
IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAt
IEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0dHA6Ly93d3cucm9iZXJ0cGVu
bmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXplZCB0byBiZSB1c2VkIHdpdGgg
TW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczogRnguVHJhbnNpdGlvbnNcblxu
Li4uXG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24gfHwgRnguVHJhbnNpdGlv
bnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFucyA9PSAnc3RyaW5nJyl7XG5c
dFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0XHR0cmFucyA9IEZ4LlRyYW5z
aXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8fCB0cmFuc1tkYXRhWzBdLmNh
cGl0YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMgPSB0cmFuc1snZWFzZScgKyBk
YXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsyXS5jYXBpdGFsaXplKCkgOiAn
JyldO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxufSk7XG5cbkZ4LlRyYW5zaXRp
b24gPSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRwYXJhbXMgPSBBcnJheS5jb252
ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihwb3Mpe1xuXHRcdHJldHVybiB0
cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hcHBlbmQoZWFz
ZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91dDogZnVuY3Rpb24ocG9zKXtc
blx0XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBwYXJhbXMpO1xuXHRcdH0sXG5c
dFx0ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIChwb3MgPD0gMC41ID8g
dHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFuc2l0aW9uKDIgKiAoMSAtIHBv
cyksIHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5cbkZ4LlRyYW5zaXRpb25zID0g
e1xuXG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0dXJuIHplcm87XG5cdH1cblxu
fTtcblxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0aW9uKHRyYW5zaXRpb25zKXtc
blx0Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykgRnguVHJhbnNpdGlvbnNbdHJh
bnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9uc1t0cmFuc2l0aW9uXSk7XG59
O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzogZnVuY3Rpb24ocCwgeCl7XG5c
dFx0cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtcblx0fSxcblxuXHRFeHBvOiBm
dW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAqIChwIC0gMSkpO1xuXHR9LFxu
XG5cdENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5zaW4oTWF0aC5hY29z
KHApKTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGgu
Y29zKHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazogZnVuY3Rpb24ocCwgeCl7XG5c
dFx0eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgMikgKiAo
KHggKyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1bmN0aW9uKHApe1xuXHRcdHZh
ciB2YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7IGEgKz0gYiwgYiAvPSAyKXtc
blx0XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRcdFx0XHR2YWx1ZSA9IGIgKiBi
IC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwgMik7XG5cdFx0XHRcdGJyZWFr
O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0RWxhc3RpYzog
ZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDEwICogLS1wKSAqIE1hdGgu
Y29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEpIC8gMyk7XG5cdH1cblxufSk7
XG5cblsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCddLmVhY2goZnVuY3Rpb24odHJh
bnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5z
aXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIGkgKyAyKTtcblx0fSk7
XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5kZXNjcmlwdGlvbjogRm9ybWVy
bHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVydHkgZm9yIGFu
IGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRngu
Q1NTXG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFkZSwgRWxlbWVudC5oaWdobGln
aHRdXG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4
LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0
aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0
aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBu
b3cpe1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdFx0bm93ID0gcHJvcGVy
dHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwgdGhpcy5vcHRpb25zLnByb3Bl
cnR5O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHByb3BlcnR5LCBub3cs
IHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdGFydDog
ZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVy
dHksIGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5mbGF0dGVu
KGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMub3B0aW9ucy5wcm9wZXJ0eSB8
fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1l
bnQsIHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0aGlzLnBhcmVudChwYXJzZWQu
ZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnR3ZWVu
ID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJyku
Y2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5yZXRyaWV2ZSgndHdlZW4n
KTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3IEZ4LlR3ZWVuKHRoaXMsIHts
aW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdlZW4nLCB0d2Vlbik7XG5cdFx0
fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5c
blx0dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0dGhpcy5nZXQoJ3R3
ZWVuJykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0gdGhpcy5nZXQoJ3R3ZWVuJyks
IG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1bWVudHMpLCB0b2dnbGU7XG5c
dFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dnbGUnO1xuXHRcdHN3aXRjaCAo
YXJnc1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAx
OyBicmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAw
OyBicmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDE7
IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMDsg
YnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2YXIgZmxhZyA9IHRoaXMucmV0
cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNpdHknKSA9PSAxKTtcblx0XHRc
dFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9IGZsYWcgPyAwIDogMTtcblx0
XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xuXHRcdFx0XHR0b2dnbGUgPSB0
cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1ldGhvZCA9ICdzdGFydCc7XG5c
dFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnZmFkZTpmbGFnJyk7XG5cdFx0
ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZhciB0byA9IGFyZ3NbYXJncy5s
ZW5ndGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcpe1xuXHRcdFx0dGhpcy5zZXRT
dHlsZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XG5cdFx0
fSBlbHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRjaGFpbi5sZW5ndGgpe1xuXHRc
dFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0
eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XHR0aGlzLmNhbGxDaGFpbigp
O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zp
c2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmYWRl
LmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ29w
YWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxp
dHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHR9KTtcblx0
XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdobGlnaHQ6IGZ1bmN0aW9uKHN0
YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9IHRoaXMucmV0cmlldmUoJ2hp
Z2hsaWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InKSk7XG5c
dFx0XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNmZmYnIDogZW5kO1xuXHRcdH1c
blx0XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0XHR0d2Vlbi5zdGFydCgnYmFj
a2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5kKS5jaGFpbihmdW5jdGlvbigp
e1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsIHRoaXMucmV0cmlldmUo
J2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNhbGxDaGFpbigpO1xuXHRcdH0u
YmluZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxu
bmFtZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwgYWxsIHB1cnBvc2UgUmVxdWVz
dCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFpbiwgRXZlbnRzLCBPcHRpb25z
LCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6IFJlcXVlc3RcblxuLi4uXG4q
L1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rpb24oKXt9LFxuXHRwcm9ncmVz
c1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2VyLlJlcXVlc3QpO1xuXG52YXIg
UmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0No
YWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7Lypc
blx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxvYWRzdGFydDogZnVuY3Rpb24o
ZXZlbnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxu
XHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNhbmNlbDogZnVuY3Rpb24oKXt9
LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0LCByZXNwb25zZVhNTCl7fSxc
blx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRvbkV4Y2VwdGlvbjogZnVuY3Rp
b24oaGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0OiBmdW5jdGlvbigpe30sXG5c
dFx0dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdpdGhDcmVkZW50aWFsczogZmFs
c2UsKi9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRc
dCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxcblx0XHRcdCdBY2NlcHQnOiAn
dGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICov
Kidcblx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1hdDogZmFsc2UsXG5cdFx0bWV0
aG9kOiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0aXNTdWNjZXNzOiBudWxsLFxu
XHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0cnVlLFxuXHRcdGVuY29kaW5n
OiAndXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0XHRldmFsUmVzcG9uc2U6IGZh
bHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFsc2Vcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJl
cXVlc3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpcy5oZWFkZXJz
ID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25TdGF0ZUNoYW5nZTogZnVuY3Rp
b24oKXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9
IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xu
XHRcdHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5c
dFx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRoaXMuc3RhdHVzID0gKHN0YXR1
cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHhoci5v
bnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIu
b25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdGlmICh0aGlzLnRpbWVy
KXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRp
bWVyO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4dDogdGhpcy54aHIucmVzcG9u
c2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1MfTtcblx0XHRpZiAodGhpcy5v
cHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVzKSlcblx0XHRcdHRoaXMuc3Vj
Y2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2UueG1sKTtcblx0XHRlbHNlXG5c
dFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVybiAoc3RhdHVzID49IDIwMCAm
JiBzdGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vzc1NjcmlwdHM6IGZ1bmN0aW9u
KHRleHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlIHx8ICgvKGVjbWF8amF2
YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LXR5cGUnKSkpIHJldHVybiBC
cm93c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3RyaXBTY3JpcHRzKHRoaXMub3B0
aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCwgeG1s
KXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRzKHRleHQpLCB4bWwpO1xu
XHRcdHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9KTtcblx0fSxcblxuXHRvblN1
Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgYXJndW1l
bnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNhbGxDaGFpbigpO1xuXHR9LFxu
XG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZhaWx1cmUoKTtcblx0XHR0aGlz
LnJlamVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRv
bkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJykuZmly
ZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5cdGxvYWRzdGFydDogZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3RhcnQnLCBbZXZlbnQsIHRoaXMu
eGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZp
cmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0dGltZW91
dDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIHRoaXMueGhyKTtc
blx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHhocjogdGhpcy54aHJ9KTtcblx0
fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR0aGlzLmhlYWRl
cnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRIZWFkZXI6
IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7
XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG5cdFx0fS5i
aW5kKHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMu
cnVubmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7XG5c
dFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRcdGNh
c2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykp
OyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRzZW5k
OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hlY2sob3B0aW9ucykpIHJldHVy
biB0aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1
Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuXHRc
dHZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0eXBlID09ICdzdHJpbmcnIHx8
IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9O1xuXG5cdFx0dmFy
IG9sZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2JqZWN0LmFwcGVuZCh7ZGF0YTog
b2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0aG9kfSwgb3B0aW9ucyk7XG5c
dFx0dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhvcHRpb25zLnVybCksIG1l
dGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRzd2l0Y2ggKHR5cGVP
ZihkYXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9IGRvY3VtZW50LmlkKGRhdGEp
LnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNo
JzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xuXHRcdH1cblxuXHRcdGlmICh0
aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQgPSAnZm9ybWF0PScgKyB0aGlz
Lm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IGZvcm1hdCArICcmJyArIGRh
dGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5lbXVsYXRpb24gJiYg
IVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBfbWV0aG9kID0g
J19tZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBfbWV0aG9kICsgJyYn
ICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9zdCc7XG5cdFx0fVxuXG5cdFx0
aWYgKHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcsICdwdXQnXS5jb250YWlucyht
ZXRob2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9wdGlvbnMuZW5jb2RpbmcpID8g
JzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJyc7XG5cdFx0XHR0aGlzLmhl
YWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2Rl
ZCcgKyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkgdXJsID0gZG9jdW1lbnQubG9j
YXRpb24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9uID0gdXJsLmxhc3RJbmRleE9m
KCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0cmltUG9zaXRpb24gPSB1cmwu
aW5kZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAsIHRyaW1Qb3NpdGlvbik7XG5c
blx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9m
KCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVlSUQoKTtcblxuXHRcdGlmIChk
YXRhICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdkZWxldGUnKSl7XG5cdFx0XHR1
cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBkYXRhO1xuXHRcdFx0
ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmIChw
cm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0ID0gdGhpcy5sb2Fkc3RhcnQu
YmluZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy5iaW5kKHRo
aXMpO1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgpLCB1cmwsIHRo
aXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMub3B0aW9ucy5wYXNzd29y
ZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAmJiAnd2l0aENyZWRl
bnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuXG5cdFx0eGhyLm9u
cmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpO1xuXG5cdFx0
T2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdHRy
eSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xuXHRcdFx0fSBj
YXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNlcHRpb24nLCBba2V5LCB2YWx1
ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhjZXB0aW9uJywgeGhyOiB4aHIs
IGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMu
Z2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5h
YmxlKHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgncmVxdWVz
dCcpO1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmFzeW5jKSB0
aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlzLm9wdGlvbnMudGltZW91dCkg
dGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9wdGlvbnMudGltZW91dCwgdGhp
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRc
dGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxz
ZTtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFib3J0KCk7XG5cdFx0aWYgKHRo
aXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRl
IHRoaXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtc
blx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFy
dCA9IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnY2FuY2Vs
JywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIG1ldGhv
ZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdoZWFk
JywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFUQ0gnLCAnSEVBRCddLmVhY2go
ZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0gZnVuY3Rpb24oZGF0YSl7XG5c
dFx0dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9kXG5cdFx0fTtcblx0XHRpZiAo
ZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0cmV0dXJuIHRoaXMuc2VuZChv
YmplY3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRc
dHZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtcblx0XHRzZW5kLnNldE9wdGlv
bnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigp
e1xuXHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcpO1xuXHRcdGlmICghc2VuZCl7
XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRkYXRhOiB0aGlzLCBsaW5rOiAn
Y2FuY2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwgJ3Bvc3QnLCB1cmw6IHRoaXMu
Z2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdzZW5kJywgc2VuZCk7
XG5cdFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBzZW5kZXIgPSB0aGlzLmdldCgn
c2VuZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8fCBzZW5kZXIu
b3B0aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhl
IGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGludGVyYWN0
aW5nIHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkhUTUxc
blxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJl
cXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFsc2UsXG5cdFx0YXBwZW5kOiBm
YWxzZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0ZXI6IGZhbHNlLFxuXHRcdGhl
YWRlcnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0
L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0
XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xu
XG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKHNjcmlwdCl7
XG5cdFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xuXHRcdH0pO1xuXG5cdFx0dmFy
IG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5dKj4oW1xcc1xcU10qPyk8XFwv
Ym9keT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1sID0gbWF0Y2hbMV07XG5cdFx0
dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7
XG5cblx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVzO1xuXHRcdHJlc3BvbnNlLmVs
ZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRlciB8fCAnKicpO1xuXG5cdFx0
aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVzcG9uc2UuZWxlbWVudHM7XG5c
dFx0aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRhdGUgPSBkb2N1bWVudC5pZChv
cHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgdXBkYXRl
LmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2UgdXBkYXRlLnNldCgnaHRtbCcs
IHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5hcHBlbmQpe1xuXHRcdFx0
dmFyIGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5kKTtcblx0XHRcdGlmIChvcHRp
b25zLmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgpLmluamVjdChhcHBlbmQpO1xu
XHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJlbigpKTtcblx0XHR9XG5cdFx0
aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhyZXNwb25zZS5qYXZhc2NyaXB0
KTtcblxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUsIHJlc3BvbnNlLmVsZW1lbnRz
LCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtcblx0XHR0aGlzLnJlc29sdmUo
e3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25zZS5lbGVtZW50cywgaHRtbDog
cmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2YXNjcmlwdH0pO1xuXHR9XG5c
bn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQnKS5jYW5jZWwoKTtcblx0XHRs
b2FkLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
OiBmdW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9hZCcpO1xuXHRc
dGlmICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3QuSFRNTCh7ZGF0YTogdGhpcywg
bGluazogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAnZ2V0J30pO1xuXHRcdFx0dGhp
cy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gbG9hZDtcblx0fVxuXG59
O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVuY3Rpb24oKXtcblx0XHR0aGlz
LmdldCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMsIHtkYXRhOiBUeXBlLmlzT2Jq
ZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7
XG5cbi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlvbjogSlNPTiBlbmNvZGVyIGFu
ZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuU2VlQWxzbzogPGh0
dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIE51bWJlciwg
RnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9cblxuaWYgKHR5cGVvZiBKU09O
ID09ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG52
YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdcXFxcdCcsICdcXG4nOiAnXFxc
XG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdcIicgOiAnXFxcXFwiJywgJ1xc
XFwnOiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0aW9uKGNocil7XG5cdHJldHVy
biBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBjaHIuY2hhckNvZGVBdCgwKS50
b1N0cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFsaWRhdGUgPSBmdW5jdGlvbihz
dHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXCg/OltcIlxcXFxcXC9iZm5y
dF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1wiW15cIlxc
XFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytc
XC1dP1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2UoLyg/Ol58OnwsKSg/Olxccypc
XFspKy9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxzXSokLykudGVzdChzdHJpbmcp
O1xufTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/IGZ1bmN0aW9uKG9iail7XG5c
dHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0aW9uKG9iail7XG5cdGlmIChv
YmogJiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xuXG5cdHN3aXRjaCAodHlwZU9m
KG9iaikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJ1wiJyArIG9iai5yZXBs
YWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAnXCInO1xuXHRcdGNhc2UgJ2Fy
cmF5Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04uZW5jb2RlKS5jbGVhbigpICsg
J10nO1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxuXHRcdFx0dmFyIHN0cmluZyA9
IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRc
dFx0dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0XHRcdGlmIChqc29uKSBzdHJp
bmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7XG5cdFx0XHR9KTtcblx0XHRc
dHJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAnbnVtYmVyJzogY2FzZSAnYm9v
bGVhbic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxsJzogcmV0dXJuICdudWxsJztc
blx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1cmUgPSB0cnVlO1xuXG5cbkpT
T04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xuXHRpZiAoIXN0cmluZyB8fCB0
eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG5cblx0aWYgKHNlY3VyZSA9
PSBudWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNlY3VyZSl7XG5cdFx0aWYgKEpT
T04ucGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5cdFx0aWYgKCFKU09OLnZhbGlk
YXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3VsZCBub3QgZGVjb2RlIHRoZSBp
bnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBzZWN1cmUuJyk7
XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAnKScpO1xufTtcblxufSkoKTtc
blxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVzY3JpcHRpb246IEV4dGVuZHMg
dGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNlbmRp
bmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkpTT05c
blxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJl
cXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjogZnVuY3Rpb24odGV4dCwgZXJy
b3Ipe30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlv
bihvcHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0XHRPYmplY3QuYXBwZW5k
KHRoaXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0
XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5j
dGlvbih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xuXHRcdFx0anNvbiA9IHRoaXMu
cmVzcG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMub3B0aW9ucy5zZWN1cmUpO1xu
XHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdlcnJvcicsIFt0ZXh0
LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoanNvbiA9PSBudWxsKXtc
blx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9uU3VjY2Vz
cyhqc29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNvbjoganNvbiwgdGV4dDogdGV4
dH0pO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBDb29raWVcblxuZGVz
Y3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIGRlbGV0aW5nIGJyb3dz
ZXIgQ29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4g
IC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVsIEtvY2ggKGh0dHA6Ly9xdWly
a3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJvd3Nlcl1cblxucHJvdmlkZXM6
IENvb2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxl
bWVudHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBhdGg6ICcvJyxcblx0XHRkb21h
aW46IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRzZWN1cmU6IGZhbHNlLFxuXHRc
dGRvY3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0aHR0cE9ubHk6IGZh
bHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0XHR0
aGlzLmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0
d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmVuY29kZSkgdmFs
dWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZG9t
YWluKSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9ucy5kb21haW47XG5cdFx0aWYg
KHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScgKyB0aGlzLm9wdGlvbnMucGF0
aDtcblx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0XHRcdHZhciBkYXRlID0gbmV3
IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHRoaXMub3B0aW9u
cy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRcdFx0dmFsdWUgKz0gJzsgZXhw
aXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vcHRpb25z
LnNlY3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAodGhpcy5vcHRpb25zLmh0dHBP
bmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5vcHRpb25zLmRvY3VtZW50LmNv
b2tpZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZG9jdW1l
bnQuY29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMua2V5LmVzY2FwZVJlZ0V4cCgp
ICsgJz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBkZWNvZGVVUklDb21wb25lbnQo
dmFsdWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdG5l
dyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7ZHVyYXRp
b246IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuQ29v
a2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9ucyl7XG5cdHJldHVybiBuZXcg
Q29va2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtcblxuQ29va2llLnJlYWQgPSBm
dW5jdGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkpLnJlYWQoKTtcbn07XG5cbkNv
b2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29r
aWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxuLS0tXG5cbm5hbWU6IERPTVJl
YWR5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9tIGV2ZW50IGRvbXJlYWR5Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtCcm93c2VyLCBFbGVt
ZW50LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJlYWR5LCBEb21SZWFkeV1cblxu
Li4uXG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7XG5cbnZhciByZWFkeSxcblx0
bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxcblx0dGltZXIsXG5cdHRlc3RF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbnZhciBkb21yZWFkeSA9
IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghcmVhZHkpe1xuXHRc
dEJyb3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRvY3VtZW50LnJlbW92ZUxpc3Rl
bmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92ZUxpc3RlbmVyKCdyZWFkeXN0
YXRlY2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVFdmVudCgnZG9tcmVhZHknKTtc
blx0XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9XG5cdC8vIGNsZWFudXAgc2Nv
cGUgdmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVtZW50ID0gbnVsbDtcbn07XG5c
bnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkgPSBjaGVja3MubGVuZ3RoOyBp
LS07KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwgPSBmdW5jdGlvbigpe1xuXHRj
bGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRpbWVyID0gc2V0VGltZW91dChw
b2xsLCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcs
IGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xsIHRlY2huaXF1ZSBieSBEaWVn
byBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC9cbi8v
IHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhlIERPTSBpcyBub3QgcmVhZHks
IG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdvcmtzID0gZnVuY3Rpb24oKXtc
blx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xuXHRcdHJldHVybiB0cnVlO1xu
XHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4vLyBJZiBkb1Njcm9sbCB3b3Jr
cyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWluZSBkb21yZWFkeVxuLy8gICBl
LmcuIGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Nyb2xsICYmICFkb1Njcm9sbFdv
cmtzKCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtcblx0c2hvdWxkUG9sbCA9IHRy
dWU7XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUpIGNoZWNrcy5w
dXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGU7XG5cdHJl
dHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7XG59KTtcblxu
aWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1bWVudC5hZGRMaXN0ZW5l
cigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hvdWxkUG9sbCA9IHRydWU7XG5c
bmlmIChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0ge1xu
XHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkgZm4uY2FsbCh0aGlzKTtcblx0
fVxufTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmlyZXMgYmVmb3JlIGxvYWRcbkVs
ZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxcblx0b25BZGQ6IGZ1bmN0aW9u
KGZuKXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93KSBmbi5jYWxsKHRoaXMpO1xu
XHR9LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMgPT0gd2luZG93KXtc
blx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVudC5FdmVudHMubG9hZDtcblx0
XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRoaXMgaXMgYmFzZWQgb24gdGhl
IGN1c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xvYWQnLCBmdW5jdGlvbigpe1xu
XHRsb2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9jdW1lbnQpO1xuIgorbW9kdWxl
LmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yay4gbGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTcg
W1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0LykuKi8gXG4vKiFcbldlYiBC
dWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVyL2U0MjZhOWFlNzE2N2M1ODA3
YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1lOiBDb3JlXG5cbmRlc2NyaXB0aW9u
OiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRpXSho
dHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0aG9yczogVGhlIE1vb1Rvb2xzIHBy
b2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZlbG9wZXJzLylcblxuaW5zcGly
YXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgW0Jhc2UuanNdKGh0
dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9iYXNlLykgQ29weXJpZ2h0IChj
KSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZV0o
aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGljZW5zZS5waHApXG4gIC0gU29t
ZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUuanNdKGh0dHA6Ly9wcm90b3R5
cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBTdGVwaGVuc29uLCBbTUlUIExp
Y2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApXG5c
bnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVPZiwgaW5zdGFuY2VPZiwgTmF0
aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yay4g
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2
LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLiov
XG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtcblx0dmVyc2lvbjogJzEuNi4wJyxc
blx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2YzdjYTUxMTRlZTk1ZTJiJ1xufTtc
blxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBlT2YgPSB0aGlzLnR5cGVPZiA9IGZ1
bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gJ251bGwnO1xuXHRpZiAo
aXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRmYW1pbHkoKTtcblxuXHRpZiAoaXRl
bS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0gMSkgcmV0dXJuICdlbGVtZW50
Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4gKC9cXFMvKS50ZXN0KGl0ZW0u
bm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7XG5cdH0gZWxzZSBpZiAodHlw
ZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRpZiAoJ2NhbGxlZScgaW4gaXRlbSkg
cmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScgaW4gaXRlbSkgcmV0dXJuICdjb2xs
ZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRlbTtcbn07XG5cbnZhciBpbnN0YW5j
ZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwgb2JqZWN0KXtcblx0aWYgKGl0
ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29uc3RydWN0b3IgPSBpdGVtLiRjb25z
dHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGlsZSAoY29uc3RydWN0b3Ipe1xuXHRc
dGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4gdHJ1ZTtcblx0XHRjb25zdHJ1Y3Rv
ciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxsdElFOD4qL1xuXHRpZiAoIWl0ZW0u
aGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8L2x0SUU4PiovXG5cdHJldHVybiBp
dGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJRTg+Ki9cbnZhciBlbnVtZXJhYmxl
cyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0pIGVudW1lcmFibGVzID0gbnVs
bDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hhc093blByb3BlcnR5JywgJ3Zh
bHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICd0b0xvY2Fs
ZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddO1xuZnVuY3Rpb24gZm9yRWFjaE9i
amVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQpe1xuXHRpZiAoZW51bWVyYWJsZXMp
IGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTspe1xuXHRcdHZhciBrID0gZW51
bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBrZXktdmFsdWUsIHNvIG92ZXJsb2Fk
U2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8vIG1ldGhvZCBmdW5jdGlvbiwgd2l0
aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2Jq
ZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10pO1xuXHR9XG59XG4vKjwvbHRJRTg+
Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFyIEZ1bmN0aW9uID0gdGhpcy5GdW5j
dGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0dGVyID0gZnVuY3Rpb24odXNl
UGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSwgYil7XG5c
dFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHVzZVBsdXJhbCB8fCB0eXBl
b2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBrIGluIGEpIHNlbGYuY2FsbCh0aGlz
LCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0XHRmb3JFYWNoT2JqZWN0RW51bWJl
cmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwvbHRJRTg+Ki9cblx0XHR9IGVsc2Ug
e1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztc
blx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9hZEdldHRlciA9IGZ1bmN0aW9u
KHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0dXJuIGZ1bmN0aW9uKGEpe1xu
XHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVvZiBhICE9ICdzdHJpbmcnKSBhcmdz
ID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgYXJncyA9IGFyZ3VtZW50
cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBbYV07XG5cdFx0aWYgKGFyZ3Mpe1xu
XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3Ro
OyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHR9
IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMsIGEpO1xuXHRcdH1cblx0XHRy
ZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0
ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7
XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5BcnJh
eS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBb
XTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlb2YgaXRlbSAhPSAn
c3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8gaXRlbSA6IHNsaWNlLmNhbGwo
aXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7
XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicpID8gaXRlbSA6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5cbk51bWJlci5jb252ZXJ0ID0gZnVu
Y3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KGl0ZW0pO1xuXHRyZXR1cm4g
aXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59O1xuXG5TdHJpbmcuY29udmVydCA9
IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcnO1xufTtcblxuXG5cbkZ1bmN0aW9u
LmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZyb20gPSBOdW1iZXIuY29udmVydDtc
blN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8vIGhpZGUsIHByb3RlY3RcblxuRnVu
Y3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGhpZGRl
biA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJvdGVjdDogZnVuY3Rpb24o
KXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5UeXBlID0gZnVuY3Rpb24obmFtZSwg
b2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dlciA9IG5hbWUudG9Mb3dlckNhc2Uo
KTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gKHR5
cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRcdFR5cGVbJ2lzJyArIG5hbWVdID0g
dHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7XG5cdFx0XHRvYmplY3QucHJvdG90
eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0cmV0dXJuIGxvd2VyO1xuXHRcdFx0
fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9iamVjdCA9PSBudWxsKSBy
ZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMpO1xuXHRvYmplY3QuJGNvbnN0cnVj
dG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29uc3RydWN0b3IgPSBvYmplY3Q7XG5c
blx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVy
biAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyAmJiB0b1N0
cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9uXScgKTtcbn07XG5cbnZhciBob29r
cyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9iamVjdCl7XG5cdHZhciB0eXBlID0g
dHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4gaG9va3NbdHlwZV0gfHwgKGhvb2tz
W3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhv
ZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblxuXHR2YXIgaG9v
a3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3Ro
OyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5cdFx0aWYgKHR5cGVPZihob29rKSA9
PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUsIG1ldGhvZCk7XG5cdFx0ZWxzZSBo
b29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxuXG5cdHZhciBwcmV2aW91cyA9IHRo
aXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMu
JHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cblx0aWYgKHRoaXNb
bmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAnZnVuY3Rpb24nKSBleHRlbmQuY2Fs
bCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KGl0
ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0pO1xufTtcblxudmFyIGV4dGVuZCA9
IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4p
IHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTtcblx0aWYgKHByZXZpb3VzID09
IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNbbmFtZV0gPSBtZXRob2Q7XG59O1xu
XG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBpbXBsZW1lbnQub3ZlcmxvYWRTZXR0
ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRlcigpLFxuXG5cdGFsaWFzOiBm
dW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVtZW50LmNhbGwodGhpcywgbmFtZSwg
dGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVybG9hZFNldHRlcigpLFxuXG5cdG1p
cnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0aGlzKS5wdXNoKGhvb2spO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlwZSgnVHlwZScsIFR5cGUpO1xuXG4v
LyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCwgbWV0
aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9iamVjdCksXG5cdFx0cHJvdG90eXBl
ID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBlKSBvYmplY3QgPSBuZXcgVHlwZShu
YW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ldLFxuXHRcdFx0Z2VuZXJpYyA9IG9i
amVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVba2V5XTtcblxuXHRcdGlmIChnZW5l
cmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNUeXBlICYmIHByb3RvKSBvYmplY3Qu
aW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0fVxuXG5cdGlmIChpc1R5cGUpe1xu
XHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJs
ZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1ldGhvZCA9IGZ1bmN0aW9uKGZuKXtc
blx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9k
cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5jYWxsKHByb3RvdHlwZSwgcHJvdG90
eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRcdH1cblx0XHRcdGZvciAodmFyIGtl
eSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVba2V5XSwga2V5KTtc
blx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtcblxuZm9yY2UoJ1N0cmluZycsIFN0
cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29uY2F0JywgJ2NvbnRhaW5zJywg
J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVvdGUnLCAncmVwbGFjZScsICdz
ZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywgJ3N1YnN0cmluZycsICd0cmlt
JywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSkoJ0FycmF5JywgQXJyYXksIFtcblx0
J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5z
aGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5cdCdpbmRleE9mJywgJ2xhc3RJbmRl
eE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21hcCcsICdzb21lJywgJ3JlZHVj
ZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdOdW1iZXInLCBOdW1iZXIsIFtcblx0
J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2FsZVN0cmluZycsICd0b1ByZWNpc2lv
bidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdhcHBseScsICdjYWxsJywgJ2JpbmQn
XG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywgJ3Rlc3QnXG5dKSgnT2JqZWN0Jywg
T2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVydHknLCAnZGVmaW5lUHJvcGVydGll
cycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRv
cicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZlbnRFeHRlbnNpb25zJywgJ2lzRXh0
ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScsICdpc0Zyb3plbidcbl0pKCdE
YXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRlbmQgPSBleHRlbmQub3ZlcmxvYWRT
ZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiArKG5l
dyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbicsIEJvb2xlYW4pO1xuXG4vLyBmaXhl
cyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIucHJvdG90eXBlLiRmYW1pbHkgPSBm
dW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAnbnVtYmVyJyA6ICdudWxsJztc
bn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51bWJlci5leHRlbmQoJ3JhbmRvbScs
IGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAq
IChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8gZm9yRWFjaCwgZWFjaCwga2V5c1xu
XG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0Zm9yRWFjaDogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlz
KTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0ZWFjaDogZnVuY3Rpb24oZm4sIGJp
bmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJpbmQpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRrZXlzOiBmdW5jdGlvbihvYmpl
Y3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2YXIgayBpbiBvYmplY3Qpe1xuXHRc
dFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkga2V5cy5wdXNoKGspO1xuXHRc
dH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmpl
Y3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGspO1xuXHRcdH0pO1xuXHRcdC8qPC9s
dElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5cdGZvckVhY2g6IGZ1bmN0aW9uKG9i
amVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlv
bihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xu
XHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9IE9iamVjdC5mb3JFYWNoO1xuXG5c
bi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBtZXJnaW5nIGFuZCBhcHBlbmRpbmdc
blxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0c3dpdGNoICh0eXBlT2YoaXRlbSkp
e1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xvbmUoKTtcblx0XHRjYXNlICdvYmpl
Y3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRcdGRlZmF1bHQ6IHJldHVybiBpdGVt
O1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywgZnVuY3Rpb24oKXtcblx0dmFy
IGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXkoaSk7XG5cdHdoaWxlIChpLS0pIGNs
b25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJuIGNsb25lO1xufSk7XG5cbnZhciBt
ZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50KXtcblx0c3dpdGNoICh0eXBl
T2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRpZiAodHlwZU9mKHNvdXJj
ZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJjZVtrZXldLCBjdXJyZW50KTtc
blx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUoY3VycmVudCk7XG5cdFx0XHRi
cmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0gY3VycmVudC5jbG9uZSgpOyBi
cmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1cnJlbnQ7XG5cdH1cblx0cmV0dXJu
IHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdG1lcmdlOiBmdW5jdGlvbihzb3Vy
Y2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0cmluZycpIHJldHVybiBtZXJnZU9u
ZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0
Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNlLCBrZXksIG9iamVjdFtrZXld
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24o
b2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0
KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7XG5cdFx0cmV0dXJuIGNsb25lO1xu
XHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwpe1xuXHRcdGZvciAodmFyIGkgPSAx
LCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZXh0ZW5kZWQg
PSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gZXh0ZW5kZWQpIG9y
aWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1cblx0XHRyZXR1cm4gb3JpZ2luYWw7
XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVzXG5cblsnT2JqZWN0JywgJ1doaXRl
U3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1bWVudHMnXS5lYWNoKGZ1bmN0
aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xuXG4vLyBVbmlxdWUgSURcblxudmFy
IFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQoJ3VuaXF1ZUlEJywgZnVuY3Rpb24o
KXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xufSk7XG5cblxuXG59KSgpO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBBcnJheSBQcm90
b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFzZS5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxucHJvdmlkZXM6IEFycmF5XG5cbi4u
LlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1PiovXG5cdGV2ZXJ5OiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4g
MDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykgJiYgIWZuLmNhbGwoYmluZCwg
dGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMg
PSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4gMDsg
aSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2YWx1ZSA9IHRoaXNbaV07XG5cdFx0
XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykpIHJlc3VsdHMucHVzaCh2YWx1ZSk7
XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGluZGV4T2Y6IGZ1bmN0aW9u
KGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4gMDtcblx0XHRm
b3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxlbmd0aCArIGZyb20pIDogZnJv
bSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJl
dHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihm
biwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwLCByZXN1bHRzID0g
QXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0
XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGks
IHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRzb21lOiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4g
MDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykgJiYgZm4uY2FsbChiaW5kLCB0
aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtc
blx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbSAhPSBudWxsO1xu
XHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24obWV0aG9kTmFtZSl7XG5cdFx0dmFy
IGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xuXHRcdHJldHVybiB0aGlzLm1hcChm
dW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21ldGhvZE5hbWVdLmFwcGx5KGl0ZW0s
IGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0ZTogZnVuY3Rpb24oa2V5cyl7XG5c
dFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0aGlzLmxlbmd0aCwga2V5cy5sZW5n
dGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIG9ialtrZXlzW2ldXSA9
IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRsaW5rOiBmdW5jdGlvbihvYmpl
Y3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMu
bGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmplY3Qpe1xuXHRc
dFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRcdFx0XHRcdHJlc3VsdFtrZXldID0g
dGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tleV07XG5cdFx0XHRcdFx0YnJlYWs7
XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxu
XHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXhP
ZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKGFycmF5KXtc
blx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0aCkgPyB0
aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxuXG5cdGdldFJhbmRvbTogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbTnVtYmVyLnJhbmRvbSgwLCB0
aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0aW5jbHVkZTogZnVuY3Rpb24oaXRl
bSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlzLnB1c2goaXRlbSk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGZv
ciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLmluY2x1ZGUo
YXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5jdGlvbihp
dGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdFx0aWYgKHRo
aXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmxlbmd0aCA9IDA7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjogZnVuY3Rpb24oKXtcblx0XHR2YXIg
YXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNbaV0pO1xuXHRcdFx0aWYgKHR5cGUg
PT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0gYXJyYXkuY29uY2F0KCh0eXBlID09
ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwgdHlwZSA9PSAnYXJndW1lbnRzJyB8
fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJheS5mbGF0dGVuKHRoaXNbaV0pIDog
dGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0fSxcblxuXHRwaWNrOiBmdW5j
dGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysp
e1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRoaXNbaV07XG5cdFx0fVxuXHRc
dHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0
aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xuXHRcdHZhciByZ2IgPSB0aGlzLm1h
cChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubGVuZ3RoID09IDEpIHZhbHVlICs9
IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxNik7XG5cdFx0fSk7XG5cdFx0
cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2IgKyAnKSc7XG5cdH0sXG5cblx0cmdi
VG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5sZW5ndGggPCAzKSByZXR1cm4g
bnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0aGlzWzNdID09IDAgJiYgIWFycmF5
KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4ID0gW107XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9ICh0aGlzW2ldIC0gMCkudG9TdHJp
bmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGggPT0gMSkgPyAnMCcgKyBiaXQgOiBi
aXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhleCA6ICcjJyArIGhleC5qb2luKCcn
KTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnVuY3Rpb25cblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlrZSBjcmVhdGUsIGJpbmQsIHBh
c3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5cbiovXG5cbkZ1bmN0aW9uLmV4dGVu
ZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFy
Z3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJu
IGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXHRcdH1cblx0XHRyZXR1cm4g
bnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRhdHRlbXB0OiBm
dW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXBwbHko
YmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0cmV0
dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiovXG5cdGJpbmQ6IGZ1bmN0aW9uKHRo
YXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFyZ3MgPSBhcmd1bWVudHMubGVuZ3Ro
ID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxsLFxuXHRcdFx0RiA9IGZ1bmN0
aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgY29udGV4
dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRpZiAodGhpcyBpbnN0
YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSBzZWxmLnByb3RvdHlwZTtcblx0
XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHJlc3VsdCA9ICghYXJn
cyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChjb250ZXh0KVxuXHRcdFx0XHQ6IHNl
bGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBhcmdzLmNvbmNhdChBcnJheS5zbGlj
ZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0XHRcdHJldHVybiBjb250ZXh0
ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07XG5cdFx0cmV0dXJuIGJvdW5kO1xu
XHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczogZnVuY3Rpb24oYXJncywgYmluZCl7
XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdzICE9IG51bGwpIGFyZ3MgPSBBcnJh
eS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHNl
bGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH0sXG5cblx0ZGVs
YXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0VGltZW91dCh0
aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBkZWxheSk7XG5cdH0s
XG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNhbCwgYmluZCwgYXJncyl7XG5cdFx0
cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwg
YmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBO
dW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJlciBQcm90b3R5cGVzIGxpa2UgbGlt
aXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVtYmVyXG5cbi4uLlxuKi9cblxuTnVt
YmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0XHRyZXR1
cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTtcblx0fSxcblxuXHRyb3VuZDog
ZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24gPSBNYXRoLnBvdygxMCwgcHJlY2lz
aW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVjaXNpb24gOiAwKTtcblx0XHRy
ZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcblx0fSxcblxu
XHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
czsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1
bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0
fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVzJyk7XG5cbihmdW5jdGlvbiht
YXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xu
XHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChBcnJheS5jb252ZXJ0KGFy
Z3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG59
KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFuMicsICdjZWlsJywgJ2Nvcycs
ICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAncG93JywgJ3NpbicsICdzcXJ0
JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJpbmdcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxDYXNlLCBjYXBpdGFsaXplLCB0ZXN0
LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczog
W1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5cbi4uLlxuKi9cblxuU3RyaW5nLmlt
cGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKHN0cmluZywgaW5k
ZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhpcykuc2xpY2UoaW5kZXgpIDogU3Ry
aW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0fSxcblx0Ly88LyFFUzY+XG5cblx0
dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0cmV0dXJuICgodHlwZU9mKHJlZ2V4
KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAoJycgKyByZWdleCwgcGFyYW1zKSku
dGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJp
bmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHR9LFxuXG5cdGNsZWFuOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXFxzKy9nLCAnICcp
LnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0
cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVy
biBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRoeXBo
ZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9bQS1a
XS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gKCctJyArIG1hdGNoLmNoYXJBdCgw
KS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxuXHRjYXBpdGFsaXplOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXFxiW2Etel0vZywgZnVuY3Rp
b24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5c
dH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhp
cykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcblx0
fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMs
IGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtc
blx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8oXFx3ezEsMn0pKFxcd3sxLDJ9
KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8gaGV4LnNsaWNlKDEpLmhleFRvUmdi
KGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0
XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7MSwzfS9nKTtcblx0XHRyZXR1cm4g
KHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRzdWJzdGl0dXRl
OiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBs
YWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0vZyksIGZ1bmN0aW9uKG1hdGNoLCBu
YW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xcXFwnKSByZXR1cm4gbWF0Y2gu
c2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1lXSAhPSBudWxsKSA/IG9iamVjdFtu
YW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBC
cm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmplY3QuIENvbnRhaW5zIEJyb3dz
ZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQsIGFuZCB0aGUgQnJvd3NlciBI
YXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtBcnJheSwg
RnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRlczogW0Jyb3dzZXIsIFdpbmRvdywg
RG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBkb2N1bWVudCA9IHRo
aXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQud2luZG93ID0gdGhpcztcblxudmFy
IHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0dWEgPSB1YS50b0xvd2VyQ2FzZSgp
O1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRvTG93ZXJDYXNlKCkgOiAnJyk7
XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBlZGdlIFVBLCBzbyBuZWVkIHRvIGNo
ZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hlY2tpbmcgaWYgaXQncyBjaHJvbWUu
XG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwvOl0oW1xcd1xcZFxcLl0rKS8pO1xu
XHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3BlcmF8aWV8ZmlyZWZveHxjaHJvbWV8
dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3XFxkXFwuXSspPy4qPyhzYWZhcml8
KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xcd1xcZFxcLl0rKXwkKS8pIHx8IFtu
dWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVBWzFdID09ICd0cmlkZW50Jyl7XG5c
dFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFbMl0gPSBVQVs0XTtcblx0fSBlbHNl
IGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9ICdjaHJvbWUnO1xuXHR9XG5cblx0
cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8pID8gJ2lvcycgOiAodWEubWF0
Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2goL21hY3x3aW58bGludXgvKSB8fCBb
J290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dpbicpIHBsYXRmb3JtID0gJ3dpbmRv
d3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5k
LFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8gVUFbM10gOiBVQVsxXSxcblx0XHR2
ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYmIFVBWzRdKSA/IFVBWzRdIDog
VUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9O1xufTtcblxudmFyIEJyb3dzZXIg
PSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFnZW50LCBuYXZpZ2F0b3IucGxh
dGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYgZG9jdW1lbnQuZG9jdW1lbnRN
b2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufVxuXG5C
cm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0eHBhdGg6ICEhKGRvY3VtZW50LmV2
YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSxcblx0XHRxdWVyeTogISEoZG9j
dW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEod2luZG93LkpTT04pXG5cdH0sXG5c
dHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVlc3RcblxuQnJvd3Nlci5SZXF1ZXN0
ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2YXIgTVNYTUwyID0gZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01TWE1MMi5YTUxIVFRQJyk7XG5cdH07
XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmpl
Y3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVt
cHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0cmV0dXJuIFhNTEhUVFA7XG5cdH0s
IGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0dXJuIE1TWE1MMjtcblx0fSwgZnVu
Y3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBNU1hNTDtcblx0fSk7XG5cbn0pKCk7
XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nlci5SZXF1ZXN0KTtcblxuXG5cbi8v
IFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1bmN0aW9uKHRleHQpe1xuXHRpZiAo
IXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4ZWNTY3JpcHQpe1xuXHRcdHdpbmRv
dy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzY3JpcHQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBl
JywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50ZXh0ID0gdGV4dDtcblx0XHRkb2N1
bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0ZG9jdW1lbnQuaGVhZC5yZW1vdmVD
aGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xufTtcblxuU3RyaW5nLmltcGxlbWVu
dCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5cdHZhciBzY3JpcHRzID0gJyc7XG5c
dHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+KFtcXHNcXFNdKj8pPFxcL3Nj
cmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0c2NyaXB0cyArPSBjb2RlICsgJ1xc
bic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4ZWMgPT09IHRydWUpIEJyb3dzZXIu
ZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4ZWMpID09ICdmdW5jdGlvbicpIGV4
ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xufSk7XG5cbi8vIFdpbmRvdywgRG9j
dW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVudDogdGhpcy5Eb2N1bWVudCxcblx0
V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhpcy5FbGVtZW50LFxuXHRFdmVudDog
dGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhpcy4kY29uc3RydWN0b3IgPSBuZXcg
VHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhpcy4kZmFtaWx5ID0gRnVuY3Rpb24u
Y29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cubWlycm9yKGZ1bmN0aW9uKG5hbWUs
IG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG50aGlzLkRvY3VtZW50
ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ0RvY3VtZW50JywgZnVuY3Rpb24o
KXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2RvY3VtZW50Jyku
aGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0ZG9j
dW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkgZG9jdW1lbnQuaGVhZCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5cbmlmIChkb2N1bWVudC5leGVj
Q29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0JhY2tncm91bmRJbWFnZUNh
Y2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxuXG4vKjxsdElFOT4qL1xuaWYgKHRo
aXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciB1bmxvYWRF
dmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxv
YWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC53
aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2luZG93ID0gZG9jdW1lbnQgPSBudWxs
O1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtcbn1c
blxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxlY3Q+Lm9wdGlvbnMgKHJlZmVy
cyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJheS5jb252ZXJ0O1xudHJ5IHtcblx0
YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7XG59IGNhdGNoIChlKXtcblx0QXJy
YXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICh0eXBlb2YgaXRlbSAhPSAnc3Ry
aW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlT2YoaXRlbSkgIT0gJ2FycmF5
Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9IG5ldyBBcnJheShpKTtcblx0
XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtcblx0XHRcdHJldHVybiBhcnJheTtc
blx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtcblx0fTtcblxuXHR2YXIgcHJvdG90
eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0gcHJvdG90eXBlLnNsaWNlO1xuXHRb
J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5z
aGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2goZnVuY3Rpb24obmFtZSl7XG5c
dFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0XHRBcnJheVtuYW1lXSA9IGZ1bmN0
aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBseShBcnJheS5jb252ZXJ0KGl0ZW0p
LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07XG5cdH0pO1xufVxuLyo8L2x0SUU5
PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2lseSBjcmVhdGluZywgZXh0ZW5k
aW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIEZ1bmN0aW9uLCBOdW1i
ZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
Q2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNzJywgZnVuY3Rpb24ocGFyYW1zKXtc
blx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBhcmFtcyA9IHtpbml0aWFsaXpl
OiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0aW9uKCl7XG5cdFx0cmVzZXQodGhp
cyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykgcmV0dXJuIHRoaXM7XG5cdFx0dGhp
cy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkgPSBudWxsO1xuXHRcdHZhciB2YWx1
ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRoaXMuY2FsbGVyID0gbnVsbDtcblx0
XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmltcGxlbWVudChwYXJhbXMpO1xuXG5c
dG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRuZXdDbGFzcy5wcm90b3R5cGUuJGNv
bnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS5wYXJlbnQgPSBwYXJl
bnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZhciBwYXJlbnQgPSBmdW5jdGlvbigp
e1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwicGFy
ZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5hbWUgPSB0aGlzLiRjYWxsZXIuJG5h
bWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25lci5wYXJlbnQsXG5cdFx0cHJldmlv
dXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFtZV0gOiBudWxsO1xuXHRpZiAoIXBy
ZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCInICsgbmFtZSArICdcIiBoYXMg
bm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtc
bn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7XG5cdGZvciAodmFyIGtleSBpbiBv
YmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdHN3aXRjaCAodHlwZU9m
KHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0XHR2YXIgRiA9IGZ1bmN0aW9u
KCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtcblx0XHRcdFx0b2JqZWN0W2tleV0g
PSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYXJyYXknOiBvYmpl
Y3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb2Jq
ZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBrZXksIG1ldGhvZCl7XG5cdGlm
IChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRvcmlnaW47XG5cdHZhciB3cmFwcGVy
ID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90ZWN0ZWQgJiYgdGhpcy4kY2FsbGVy
ID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBrZXkgKyAnXCIgY2Fu
bm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0gdGhpcy5jYWxsZXIsIGN1cnJlbnQg
PSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBjdXJyZW50OyB0aGlzLiRjYWxsZXIg
PSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNhbGxlciA9IGNhbGxlcjtcblx0
XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVyOiBzZWxmLCAkb3JpZ2luOiBtZXRo
b2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7XG59O1xuXG52YXIgaW1wbGVtZW50
ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0aWYgKENsYXNzLk11dGF0b3JzLmhh
c093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xhc3MuTXV0YXRvcnNba2V5XS5jYWxs
KHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdH1c
blxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24nKXtcblx0XHRpZiAodmFsdWUuJGhp
ZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5cGVba2V5XSA9IChyZXRhaW4pID8g
dmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5t
ZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztc
bn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGtsYXNzKXtcblx0a2xhc3MuJHByb3Rv
dHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGtsYXNzO1xuXHRkZWxldGUga2xhc3Mu
JHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xuXG5DbGFzcy5pbXBsZW1lbnQoJ2lt
cGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTtcblxuQ2xhc3MuTXV0YXRvcnMg
PSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtcblx0XHR0aGlzLnBhcmVudCA9IHBh
cmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3RhbmNlKHBhcmVudCk7XG5cdH0sXG5c
blx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRcdEFycmF5LmNvbnZlcnQoaXRlbXMp
LmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5zdGFuY2UgPSBuZXcgaXRlbTtcblx0
XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50LmNhbGwodGhpcywga2V5LCBp
bnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtcblx0fVxufTtcblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIFV0
aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIgb3duIENsYXNz
ZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9uIHRhc2tzLlxuXG5saWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xh
c3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxuXG4uLi5cbiovXG5cbihmdW5jdGlv
bigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxuXHQkY2hhaW46IFtdLFxuXG5cdGNo
YWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFwcGVuZChBcnJheS5mbGF0dGVuKGFy
Z3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbGxDaGFpbjogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkgPyB0aGlzLiRjaGFpbi5zaGlm
dCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtcblx0fSxcblxuXHRjbGVhckNoYWlu
OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5KCk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHJldHVy
biBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9uKGZ1bGwsIGZpcnN0KXtcblx0
XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7XG59O1xuXG50aGlzLkV2ZW50cyA9
IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5
cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXG5cdFx0XG5c
blx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRzW3R5cGVdIHx8IFtdKS5pbmNs
dWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVybmFsID0gdHJ1ZTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9y
ICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFy
Z3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9
IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0
YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZlbnRzLmVhY2goZnVuY3Rpb24oZm4p
e1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRl
bHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dHlwZSA9
IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5c
dFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRcdFx0dmFyIGluZGV4ID0gZXZlbnRz
LmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0xKSBkZWxldGUgZXZlbnRzW2luZGV4
XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnRzOiBmdW5j
dGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2YoZXZlbnRzKSA9PSAn
b2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5
cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKGV2
ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0XHRmb3IgKHR5cGUgaW4gdGhpcy4k
ZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRzICE9IHR5cGUpIGNvbnRpbnVlO1xu
XHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRcdGZvciAodmFyIGkgPSBm
bnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50
KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xuXG5cdHNldE9wdGlvbnM6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBPYmplY3QubWVyZ2UuYXBw
bHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1bWVudHMpKTtcblx0XHRpZiAo
dGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpe1xuXHRcdFx0aWYgKHR5
cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicgfHwgISgvXm9uW0EtWl0vKS50ZXN0
KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRFdmVudChvcHRpb24sIG9wdGlvbnNb
b3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRpb25dO1xuXHRcdH1cblx0XHRyZXR1
cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5U
aGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBVdGlsaXR5IENsYXNzIHRoYXQgY2Fu
IGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBtYWtlIHRoZW0gXCJ0aGVu
YWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNz
XG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVfRlVMRklMTEVEID0gMSxcblx0U1RB
VEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBDbGFzcy5UaGVuYWJsZSA9IG5ldyBD
bGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJTkcsXG5cdCR0aGVuYWJsZVJl
c3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBbXSxcblxuXHRyZXNvbHZlOiBmdW5j
dGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCBy
ZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFRoZW5hYmxlU3RhdGU6IGZ1
bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJsZVN0YXRlKXtcblx0XHRcdGNhc2Ug
U1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5kaW5nJztcblxuXHRcdFx0Y2FzZSBT
VEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVsZmlsbGVkJztcblxuXHRcdFx0Y2Fz
ZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdyZWplY3RlZCc7XG5cdFx0fVxuXHR9
LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMs
IHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuXHRcdGlmICh0eXBlb2Yg
b25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmlsbGVkID0gJ0lkZW50aXR5Jztcblx0
XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicpIG9uUmVqZWN0ZWQgPSAnVGhy
b3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblxuXHRcdHRoaXMu
JHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhlbmFibGU6IHRoZW5hYmxlLFxuXHRc
dFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRcdFx0cmVqZWN0SGFuZGxlcjogb25S
ZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRF
X1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoZW5h
YmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpe1xuXHRcdHJldHVy
biB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1cblxufSk7XG5cblRoZW5hYmxlLmV4
dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGhlbmFibGU7XG5c
dFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xuXHRcdFx0dGhlbmFibGUgPSB2YWx1
ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblx0XHRc
dHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xu
XHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0dmFyIHRoZW5hYmxlID0gbmV3
IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdHJldHVybiB0
aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIHJl
c29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09
PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUgPT09IHZhbHVlKXtcblx0XHRcdHJl
amVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gcmVzb2x2ZSBhIHRoZW5hYmxl
IHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUg
PT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpe1xuXHRcdFx0dmFy
IHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0gdmFsdWUudGhlbjtcblx0XHRcdH0g
Y2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9uKTtc
blx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJyl7XG5cdFx0XHRc
dHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZlcihmdW5jdGlvbigpe1xuXHRcdFx0
XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdHZhbHVlLFxu
XHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xuXHRcdFx0XHRcdFx0XHRcdGlmICgh
cmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRc
dFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHR9
XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0
XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9
IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0
XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRc
dH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRc
dFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFibGUs
IGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0
XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTtcblx0XHRcdH1c
blx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0
fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlmICh0aGVuYWJs
ZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9G
VUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVq
ZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09
IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHJlYXNvbjtc
blx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JFSkVDVEVEO1xuXG5cdFx0cmVh
Y3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc2V0KHRoZW5hYmxlKXtcblx0aWYg
KHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0g
U1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiByZWFjdCh0aGVuYWJsZSl7XG5cdHZh
ciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxuXHRcdHJlc3VsdCA9IHRoZW5hYmxl
LiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0aGVuYWJsZS4kdGhlbmFibGVSZWFj
dGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09IFNUQVRFX0ZVTEZJTExFRCl7XG5c
dFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdmdWxmaWxs
SGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfUkVKRUNURUQpe1xuXHRcdHRo
ZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5cGUgPSAncmVqZWN0SGFuZGxl
cic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIoaGFuZGxlLnBhc3MoW3Jlc3VsdCwg
cmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZShyZXN1bHQsIHJl
YWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBsID0gcmVhY3Rpb25zLmxlbmd0aDsg
aSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVhY3Rpb25zW2ldLFxuXHRcdFx0aGFu
ZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhhbmRsZXIgPT09ICdJZGVudGl0eScp
e1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0KTtcblx0XHR9IGVsc2Ug
aWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFi
bGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc29sdmUo
cmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7XG5cdFx0XHR9IGNhdGNoIChleGNl
cHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFibGUsIGV4Y2VwdGlvbik7XG5c
dFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtcbmlmICh0eXBlb2YgcHJvY2VzcyAh
PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbicp
e1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2UgaWYgKHR5cGVvZiBzZXRJbW1l
ZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBzZXRJbW1lZGlhdGU7XG59IGVsc2Ug
e1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRUaW1lb3V0KGZuLCAwKTtcblx0fTtc
bn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmplY3RcblxuZGVzY3JpcHRpb246IE9i
amVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBIYXNoXVxuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRzdWJzZXQ6IGZ1bmN0aW9uKG9iamVj
dCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9
IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRc
dGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVjdFtrXTtcblx0XHR9XG5cdFx0cmV0
dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtc
blx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0
KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFy
IGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0gPSBmbi5jYWxsKGJpbmQsIG9iamVj
dFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxu
XG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMg
PSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldLCB2
YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGtleSwg
b2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRz
O1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIg
a2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlz
Lmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKCFmbi5j
YWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJl
dHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsg
aSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRp
ZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0dXJuIHRydWU7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGsg
PSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2tdKTtcblx0XHR9XG5cdFx0cmV0
dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xuXHR9LFxuXG5cdGtleU9mOiBmdW5j
dGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7
XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBr
ZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXldID09PSB2YWx1ZSkgcmV0dXJuIGtl
eTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9u
KG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5T2Yob2JqZWN0LCB2YWx1ZSkg
IT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbihvYmplY3QsIGJhc2Up
e1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0T2JqZWN0LmVhY2gob2JqZWN0LCBm
dW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNlKSBrZXkgPSBiYXNlICsgJ1snICsg
a2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdHN3aXRjaCAodHlwZU9mKHZhbHVl
KSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5n
KHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0XHRcdHZh
ciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVuY3Rpb24odmFsLCBpKXtcblx0XHRc
dFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJlc3VsdCA9IE9i
amVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRk
ZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xu
XHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5U3RyaW5nLnB1c2gocmVzdWx0
KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxu
fSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBTbGljay5QYXJzZXJcbmRlc2NyaXB0
aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2VyXG5wcm92aWRlczogU2xpY2suUGFy
c2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIHBhcnNlZCxcblx0c2VwYXJhdG9y
SW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJzZWQsXG5cdGNhY2hlID0ge30sXG5c
dHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0gL1xcXFwvZztcblxudmFyIHBhcnNl
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7XG5cdGlmIChleHByZXNzaW9uID09
IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lvbi5TbGljayA9PT0gdHJ1ZSkgcmV0
dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycgKyBleHByZXNzaW9uKS5yZXBsYWNl
KC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0gISFpc1JldmVyc2VkO1xuXHR2YXIg
Y3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VDYWNoZSA6IGNhY2hlO1xuXHRpZiAo
Y3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVudENhY2hlW2V4cHJlc3Npb25d
O1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5cdFx0ZXhwcmVzc2lvbnM6IFtdLFxu
XHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0
dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5cdH07XG5cdHNlcGFyYXRvckluZGV4
ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHByZXNzaW9uID0gZXhwcmVzc2lvbi5y
ZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQubGVuZ3RoID0gcGFyc2VkLmV4cHJl
c3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNoZVtwYXJzZWQucmF3XSA9IChyZXZl
cnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59O1xuXG52YXIgcmV2ZXJzZUNvbWJp
bmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYgKGNvbWJpbmF0b3IgPT09ICchJykg
cmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9PT0gJyAnKSByZXR1cm4gJyEnO1xu
XHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkgcmV0dXJuIGNvbWJpbmF0b3IucmVw
bGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyArIGNvbWJpbmF0b3I7XG59O1xuXG52
YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBl
eHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb25z
Lmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVzc2lvbnNbaV07XG5cdFx0dmFyIGxh
c3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRvcjogcmV2ZXJzZUNvbWJpbmF0b3Io
ZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgZXhwLmxlbmd0
aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xuXHRcdFx0aWYgKCFjZXhwLnJldmVy
c2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9yID0gJyAnO1xuXHRcdFx0Y2V4cC5j
b21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHRcdGRlbGV0ZSBjZXhwLnJl
dmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5yZXZlcnNlKCkucHVzaChsYXN0KTtc
blx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZhciBlc2NhcGVSZWdFeHAgPSBmdW5j
dGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYuMSAoYykgMjAwNy0yMDA4IFN0ZXZl
biBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNvbS9yZWdleC94cmVnZXhwLz4gTUlU
IExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LlxcXFxeJHws
I1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVybiAnXFxcXCcgKyBtYXRjaDtcblx0
fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChcbi8qXG4jIS91c3IvYmluL2VudiBy
dWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1YigvXFwoXFw/eFxcKXxcXHMrIy4q
JHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0XCIoP3gpXig/OlxcXG5cdCAgXFxc
XHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2VwYXJhdG9yICAgICAgICAgIFxcblxc
XG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxzKiAgICMgQ29tYmluYXRvciAgICAg
ICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAgICAgICAgICAgICAjIENvbWJpbmF0
b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29kZT4rIHwgXFxcXCogKSAgICAgIyBU
YWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAgKCA8dW5pY29kZT4rICAgICAgICkg
ICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxcXC4gICggPHVuaWNvZGU+KyAg
ICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5cXFxuXHR8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAgIFxcblxcXG5cdFxcXFxbICBcXFxu
XHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5cdFx0XHRcXFxccyogKFsqXiQhfnxd
Pz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxuXHRcdFx0XHRcdChbXFxcIiddPyko
Lio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAgXFxcblx0XHQpPyAgXFxcXHMqICBc
XFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisgKCA8dW5pY29kZT4rICkoPzpcXFxu
XHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxcXFwxMl0qKVxcXFwxMil8KCg/Olxc
XFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwpXFxcblx0KT9cXFxuXHQpXCJcbiov
XG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNvbWJpbmF0b3I+KylcXFxccyp8KFxc
XFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmljb2RlPispfFxcXFwuKDx1bmljb2Rl
PispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxzKihbKl4kIX58XT89KSg/OlxcXFxz
Kig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxcXFxdKD8hXFxcXF0pfCg6KykoPHVu
aWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxcXFwxM10qKVxcXFwxMyl8KCg/Olxc
XFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxuXHQucmVwbGFjZSgvPGNvbWJpbmF0
b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4mPXt9XFxcXDs8LycpICsgJ10nKVxu
XHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18
XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFjZSgvPHVuaWNvZGUxPi9nLCAnKD86
WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFteXFxcXHMwLTlhLWZdKScpXG4p
O1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxuXG5cdHNlcGFyYXRvcixcblx0Y29t
YmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5cdHRhZ05hbWUsXG5cdGlkLFxuXHRj
bGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRyaWJ1dGVPcGVyYXRvcixcblx0YXR0
cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5cdHBzZXVkb01hcmtlcixcblx0cHNl
dWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlLFxuXHRw
c2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9yIHx8IHNlcGFyYXRvckluZGV4ID09
PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJhdG9ySW5kZXhdID0gW107XG5c
dFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNlcGFyYXRvcikgcmV0dXJuICcnO1xu
XHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNoaWxkcmVuIHx8IGNvbWJpbmF0
b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yIHx8ICcgJztcblx0
XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRl
eF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4
XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4XS5yZXZlcnNlQ29tYmlu
YXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpO1xuXHRcdGN1cnJlbnRTZXBhcmF0
b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6IGNvbWJpbmF0b3IsIHRhZzogJyon
fTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFy
YXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlmICh0YWdOYW1lKXtcblx0XHRjdXJy
ZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0fSBl
bHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9IGlkLnJlcGxhY2UocmVVbmVzY2Fw
ZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtcblx0XHRjbGFzc05hbWUgPSBjbGFz
c05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQu
Y2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtdO1xuXHRcdGlmICghY3VycmVu
dFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNzZXMgPSBbXTtcblx0XHRjdXJyZW50
UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFz
c2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxcblx0XHRcdHJlZ2V4cDogbmV3IFJl
Z0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgJyhcXFxcc3wkKScp
XG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFzcyl7XG5cdFx0cHNldWRvQ2xhc3NW
YWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NRdW90ZWRWYWx1ZTtcblx0XHRw
c2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/IHBzZXVkb0NsYXNzVmFsdWUucmVw
bGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLnBz
ZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQucHNl
dWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3MucmVwbGFjZShyZVVuZXNjYXBlLCAn
JyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxcblx0XHRcdHR5cGU6IHBzZXVkb01h
cmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCdcblx0XHR9KTtcblxuXHR9IGVs
c2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRlS2V5ID0gYXR0cmlidXRlS2V5LnJl
cGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0ZVZhbHVlID0gKGF0dHJpYnV0ZVZh
bHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdHZhciB0ZXN0LCByZWdl
eHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9yKXtcblx0XHRcdGNhc2UgJ149JyA6
IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZh
bHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnJD0nIDogcmVnZXhwID0gbmV3
IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnJCcgICAg
ICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAnKF58
XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyhcXFxcc3wkKScgKTsgYnJl
YWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVz
Y2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICApOyBicmVhaztcblx0XHRcdGNh
c2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiBhdHRyaWJ1
dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnKj0nIDogdGVz
dCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIHZhbHVlICYmIHZhbHVlLmluZGV4
T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGNhc2UgJyE9
JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiBhdHRyaWJ1dGVWYWx1
ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdCAgIDogdGVzdCA9IGZ1
bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFsdWU7XG5cdFx0XHR9O1xuXHRcdH1c
blxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAoL15bKiReXT0kLykudGVzdChhdHRy
aWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xu
XHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRy
ZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xuXHRcdH07XG5cblx0XHRpZiAoIWN1
cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzID0gW107XG5c
dFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0a2V5OiBhdHRyaWJ1dGVL
ZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3IsXG5cdFx0XHR2YWx1ZTogYXR0
cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0fSk7XG5cblx0fVxuXG5cdHJldHVy
biAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9
KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0cmV0dXJuIHBhcnNl
KGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVnRXhwID0gZXNjYXBlUmVnRXhwO1xu
XG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHkoLyo8Q29t
bW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6IC8qPC9D
b21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBTbGljay5GaW5kZXJcbmRlc2NyaXB0
aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVuZ2luZS5cbnByb3ZpZGVzOiBT
bGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJcbi4uLlxuKi9cblxuOyhmdW5jdGlv
bigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXNDYWNoZSA9IHt9LFxuXHR0b1N0cmlu
ZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIEZlYXR1cmUgLyBCdWcgZGV0ZWN0
aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZuKXtcblx0cmV0dXJuICgvXFx7
XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3QoJycgKyBmbik7XG59O1xuXG5sb2Nh
bC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0dXJuICghIWRvY3VtZW50LnhtbFZl
cnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5nLmNhbGwoZG9jdW1lbnQpID09
ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1bWVudC5ub2RlVHlwZSA9PSA5ICYm
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAnSFRNTCcpO1xufTtcblxubG9j
YWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5cblx0Ly8gY29udmVydCBlbGVt
ZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQuIGlmIGRvY3VtZW50IGNhbm5vdCBi
ZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxuXHR2YXIgbm9kZVR5cGUgPSBk
b2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09IDkpOyAvLyBkb2N1bWVudFxuXHRl
bHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVudC5vd25lckRvY3VtZW50OyAvLyBu
b2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9jdW1lbnQgPSBkb2N1bWVudC5k
b2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xuXG5cdC8vIGNoZWNrIGlmIGl0J3Mg
dGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3VtZW50ID09PSBkb2N1bWVudCkgcmV0
dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cblx0Ly8gY2hlY2sgaWYgd2UgaGF2
ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9jdW1lbnQgYmVmb3JlXG5cblx0dmFy
IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0cm9vdFVpZCA9IHRoaXMuZ2V0
VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSxcblx0
XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0Zm9yIChmZWF0dXJlIGluIGZlYXR1
cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0XHR9XG5c
dFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdID0g
e307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZlYXR1cmVzLmlzWE1MRG9jdW1lbnQg
PSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE5cblx0
PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9IGZlYXR1cmVzLmlkR2V0c05hbWVc
blx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0PSBmZWF0dXJlcy5icm9rZW5HRUJD
TlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0PSBmZWF0dXJlcy5icm9rZW5FbXB0
eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERvY3VtZW50XG5cdD0gZmVhdHVyZXMu
bmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5cblx0dmFyIHN0YXJTZWxlY3RzQ2xv
c2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNO
LCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVH
ZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191bmlxdWVpZCc7XG5cdHZhciB0
ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG5cdHZhciB0ZXN0Um9v
dCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHkn
KVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0ZXN0Tm9kZSk7XG5cblx0Ly8g
b24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0RWxlbWVudHNCeUlkIGRvZXNu
dCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGlk
PVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgPSAhIWRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAoZSl7fVxuXG5cdGlmIChmZWF0dXJl
cy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUn
O1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIGZvciBnZXRFbGVtZW50c0J5VGFn
TmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRlc3ROb2RlLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFyU2VsZWN0c0NvbW1lbnRzID0gKHRl
c3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3RoID4gMSk7XG5cblx0XHQvLyBJ
RSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9yIGdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2Rl
LmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNlbGVjdHNDbG9zZWQgPSAoc2VsZWN0
ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDAp
ID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdGZlYXR1cmVzLmJyb2tlblN0YXJH
RUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNlbGVjdHNDbG9zZWQ7XG5cblx0XHQv
LyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5zdGVhZCBvZiBqdXN0IGlkIGZv
ciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5IHtcblx0XHRcdHRl
c3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQgKydcIj48L2E+PGIgaWQ9XCInKyBp
ZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRzTmFtZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSl7XG5cblx0XHRcdC8v
IFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYWNoZXMgcmVzdWx0c1xuXHRcdFx0
dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiZlwiPjwvYT48
YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUuZmlyc3RDaGlsZC5jbGFzc05hbWUg
PSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSAodGVzdE5vZGUu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2gg
KGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGRvZXNu
dCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJzdCBvbmVcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cImFcIj48L2E+PGEgY2xh
c3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiA9
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJykubGVuZ3RoICE9IDIpO1xuXHRc
dFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5icm9rZW5HRUJDTiA9IGNhY2hlZEdl
dEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ047XG5cdFx0
fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwpe1xuXHRcdFx0Ly8gSUUgOCBy
ZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9yIHF1ZXJ5U2VsZWN0b3JBbGwo
JyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlu
bmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLnF1ZXJ5
U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRRU0Eg
PSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUu
Y2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFNhZmFy
aSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRoIG1peGVkY2FzZSBvbiBxdWly
a3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xh
c3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNlUVNBID0g
IXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5sZW5ndGg7XG5cdFx0XHR9IGNhdGNo
IChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEgZG9udCByZXR1cm4gc2VsZWN0ZWQg
b3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9k
ZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPVwic2VsZWN0ZWRcIj5hPC9v
cHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQSA9ICh0
ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxlbmd0aCA9PSAwKTtcblx0XHRc
dH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMg
Zm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0
cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJcIj48L2E+Jztc
blx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgPSAodGVzdE5vZGUucXVl
cnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0aCAhPSAwKTtcblx0XHRcdH0gY2F0
Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBpZiBhIGZvcm0gaGFzIGFuIGlucHV0
IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhl
IGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8Zm9ybSBhY3Rp
b249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9ybT4nO1xuXHRcdFx0YnJva2VuRm9y
bUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgnYWN0
aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHQvLyBuYXRpdmUgbWF0Y2hl
c1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ig
PSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1NlbGVjdG9yIHx8Ki8gcm9vdC5tb3pN
YXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cdFx0aWYgKGZl
YXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtcblx0XHRcdC8vIGlmIG1hdGNoZXNT
ZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNpbnRheGVzIHdlIGNhbiB1c2UgaXRc
blx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKHJvb3QsICc6c2xpY2sn
KTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IG51bGw7XG5cdFx0fSBj
YXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJvb3Quc2xpY2tfZXhwYW5kbyA9IDE7
XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0
aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRo
aXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVtb3ZlQ2hpbGQodGVzdE5vZGUpO1xu
XHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBudWxsO1xuXG5cdC8vIGdldEF0dHJp
YnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChmZWF0dXJlcy5pc0hUTUxEb2N1bWVu
dCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xu
XHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0aWYgKG1l
dGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0g
bm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSkg
PyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBu
YW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xuXHRc
dHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUpIDogbm9kZS5nZXRBdHRyaWJ1dGUo
bmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5cblx0ZmVhdHVyZXMuaGFzQXR0cmli
dXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5oYXNBdHRyaWJ1dGUpKSA/IGZ1
bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKGF0
dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRcdG5vZGUgPSBu
b2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0XHRyZXR1cm4gISEobm9kZSAmJiAo
bm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtcblx0fTtcblxuXHQvLyBjb250YWlu
c1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlucyBzaG91bGQgYmUgZGlmZmVy
ZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2YXIgbmF0aXZlUm9vdENvbnRhaW5z
ID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRhaW5zKSxcblx0XHRuYXRpdmVE
b2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05hdGl2ZUNvZGUoZG9jdW1lbnQu
Y29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0gKG5hdGl2ZVJvb3RDb250YWlucyAm
JiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRc
dHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKG5hdGl2ZVJvb3RDb250YWlu
cyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtc
blx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24gZG9jdW1lbnQuXG5cdFx0cmV0
dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09PSBkb2N1bWVudCkgPyBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlucyhub2RlKTtcblx0fSA6IChyb290
ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oY29udGV4dCwgbm9k
ZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgISEoY29udGV4dC5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUp
e1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9kZSA9PT0gY29udGV4dCkgcmV0dXJu
IHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKTtcblx0XHRyZXR1
cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHQvLyBjcmVk
aXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pXG5cblx0ZmVhdHVyZXMuZG9jdW1l
bnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihhLCBi
KXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xuXHR9IDogKCdzb3VyY2VJbmRleCcg
aW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuc291cmNlSW5kZXggfHwgIWIu
c291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5zb3Vy
Y2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5nZSkgPyBmdW5jdGlvbihhLCBiKXtc
blx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRvY3VtZW50KSByZXR1cm4gMDtc
blx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCksIGJSYW5nZSA9
IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdGFSYW5nZS5zZXRTdGFydChhLCAw
KTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJSYW5nZS5zZXRTdGFydChiLCAwKTtc
blx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVybiBhUmFuZ2UuY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdlKTtcblx0fSA6IG51bGw7XG5cblx0
cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0XHR0aGlzW2Zl
YXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07XG5cbi8vIE1haW4gTWV0aG9kXG5c
bnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/OltcXHctXSt8XFwqKSkkLyxcblx0
cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/OlwiXCJ8JycpP1xcXS8sXG5cdHFzYUZh
aWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHBy
ZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91bmQgPSB0aGlzLmZvdW5kID0gKGZp
cnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRpZiAoIWNvbnRleHQpIHJldHVybiBm
b3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNvbnRleHQgPSBjb250ZXh0LmRv
Y3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5kb3cgdG8gYSBkb2N1bWVudFxu
XHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZvdW5kO1xuXG5cdC8vIHNldHVw
XG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5cdFx0dW5pcXVlcyA9IHRoaXMudW5p
cXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVuZCAmJiBhcHBlbmQubGVuZ3RoKSxc
blx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVUeXBlID09IDkpO1xuXG5cdGlm
ICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1lbnQgPyBjb250ZXh0IDogY29udGV4
dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChjb250ZXh0KTtcblxuXHQvLyBhdm9p
ZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBhcHBlbmQgYXJyYXlcblx0aWYgKGhh
c090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1bmlxdWVzW3RoaXMuZ2V0VUlE
KGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Npb24gY2hlY2tzXG5cblx0aWYgKHR5
cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHN0cmluZ1xu
XG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXHRcdHZhciBzaW1wbGVTZWxl
Y3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rvcik7XG5cdFx0c2ltcGxlU2Vs
ZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0XHR2YXIgc3ltYm9sID0gc2ltcGxl
U2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVTZWxlY3RvclsyXTtcblxuXHRcdFx0
aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09ICcqJyAmJiB0aGlzLmJyb2tlblN0
YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlcyA9IGNvbnRleHQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5v
ZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSld
KSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJv
bCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAhY29udGV4
dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0bm9kZSA9IGNvbnRl
eHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlmICghbm9kZSkgcmV0dXJuIGZvdW5k
O1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5vZGUuZ2V0QXR0cmlidXRlTm9kZSgn
aWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRp
ZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAm
JiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cblx0XHRc
dH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERv
Y3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCB0aGlzLmJyb2tl
bkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSBicmVhayBzaW1wbGVTZWxlY3Rv
cnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgIXRoaXMu
YnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51
bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5k
LnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZh
ciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJysgU2xpY2suZXNjYXBlUmVnRXhw
KG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2kr
K107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lO1xuXHRcdFx0XHRc
dFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChjbGFzc05hbWUpKSkgY29udGlu
dWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlO1xuXHRcdFx0XHRcdFx0aWYg
KCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChu
b2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGFz
T3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJuIChmaXJzdCkgPyBudWxsIDog
Zm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxlY3RvcnMtb3ZlcnJpZGU+Ki9cblxu
XHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cdFx0cXVlcnlTZWxlY3RvcjogaWYg
KGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1
bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl1cblx0XHRcdFx0Ly9U
T0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVhbGx5IG1peGVkIGNhc2Vcblx0
XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0XHRcdFx0fHwgKHRoaXMuYnJva2Vu
Q2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpjaGVja2VkJykgPiAtMSlcblx0XHRc
dFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYgcmVFbXB0eUF0dHJpYnV0ZS50
ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRleHRJc0RvY3VtZW50IC8vQWJvcnQg
d2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0XHRcdFx0Ly8gIHRoZXJlIGFyZSBt
dWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jcblx0XHRcdFx0XHQvLyAgc2luY2Ug
d2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCByb290ZWQgUVNBIGZvciBzaW5nbGUg
ZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBleHByZXNzaW9uLmluZGV4T2YoJywn
KSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2suZGlzYWJsZVFTQVxuXHRcdFx0KSBi
cmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4cHJlc3Npb24gPSBleHByZXNzaW9u
LCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0XHRcdGlmICghY29udGV4dElzRG9j
dW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9vdGVkIFFTQVxuXHRcdFx0XHQvLyBj
cmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3VycmVudElkID0gX2NvbnRleHQuZ2V0
QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRfXyc7XG5cdFx0XHRcdF9jb250ZXh0
LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRcdFx0X2V4cHJlc3Npb24gPSAnIycg
KyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0XHRcdGNvbnRleHQgPSBfY29udGV4
dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoZmlyc3Qp
IHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Npb24pIHx8IG51bGw7XG5cdFx0
XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoX2V4cHJlc3Npb24pO1xu
XHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXSA9
IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRc
dFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0XHRpZiAoY3VycmVudElkKSBf
Y29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTtcblx0XHRcdFx0XHRlbHNlIF9j
b250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdFx0XHRjb250ZXh0ID0gX2NvbnRl
eHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc3RhclNlbGVjdHNDbG9z
ZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdGlmIChub2Rl
Lm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxzZSBmb3IgKGkgPSAwOyBub2RlID0g
bm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdl
dFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGFz
T3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXG5cdFx0fVxu
XHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXG5cdFx0cGFyc2VkID0gdGhpcy5T
bGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBhcnNlZC5sZW5ndGgpIHJldHVybiBm
b3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51bGwpeyAvLyB0aGVyZSBpcyBubyBl
eHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24uU2xp
Y2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNrIG9iamVjdFxuXHRcdHBhcnNlZCA9
IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250YWlucyhjb250ZXh0LmRvY3VtZW50
RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8vIGV4cHJlc3Npb24gaXMgYSBub2Rl
XG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikgOiBmb3VuZCA9IGV4cHJlc3Np
b247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAvLyBvdGhlciBqdW5rXG5cdFx0cmV0
dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1wc2V1ZG8t
c2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMgZm9yIHRoZSBudGggc2VsZWN0b3Jz
XG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NOVEhMYXN0ID0ge307XG5cdHRoaXMu
cG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVMYXN0ID0ge307XG5cblx0Lyo8L250
aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBpZiBh
cHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBzZWxlY3RvciB3aXRoIG9u
ZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1c2hVSURcblx0dGhpcy5wdXNo
ID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVuZ3RoID09IDEgJiYgcGFyc2Vk
LmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5wdXNoQXJyYXkgOiB0aGlzLnB1
c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5kID0gW107XG5cblx0Ly8gZGVmYXVs
dCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNvbWJpbmF0b3IsIHRhZywgaWQsIGNs
YXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcztcblx0dmFyIGN1cnJlbnRJdGVt
cywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RCaXQsIGV4cHJlc3Npb25zID0g
cGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9yIChpID0gMDsgKGN1cnJlbnRFeHBy
ZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9IDA7IChjdXJyZW50Qml0ID0g
Y3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0Y29tYmluYXRvciA9ICdjb21iaW5h
dG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0aWYgKCF0aGlzW2NvbWJpbmF0b3Jd
KSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAgID0gKHRoaXMuaXNYTUxEb2N1bWVu
dCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRvVXBwZXJDYXNlKCk7XG5cdFx0
aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xhc3NMaXN0ICA9IGN1cnJlbnRCaXQu
Y2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50Qml0LmNsYXNzZXM7XG5cdFx0YXR0
cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0XHRwc2V1ZG9zICAgID0gY3VycmVu
dEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9PT0gKGN1cnJlbnRFeHByZXNzaW9u
Lmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVlcyA9IHt9O1xuXG5cdFx0aWYgKGxh
c3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVlcztcblx0XHRcdHRoaXMuZm91bmQg
PSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bmlxdWVzID0ge307XG5cdFx0XHR0
aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGogPT09IDApe1xuXHRcdFx0dGhpc1tj
b21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
LCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQgJiYgZm91bmQubGVuZ3Ro
KSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChmaXJzdCAmJiBsYXN0Qml0
KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0rKyl7XG5cdFx0
XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0XHRpZiAoZm91bmQubGVuZ3Ro
KSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVt
cy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdH1c
blxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5cdH1cblxuXHQvLyBzaG91bGQgc29y
dCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5b3UgcGFzcyBtdWx0aXBsZSBl
eHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0
aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVybiAoZmlyc3QpID8gKGZvdW5kWzBd
IHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xuXG5sb2NhbC51aWR4ID0gMTtcbmxv
Y2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2NhbC5nZXRVSURYTUwgPSBmdW5jdGlv
bihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRlKHRoaXMudWlkayk7XG5cdGlm
ICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0XHRub2RlLnNldEF0dHJpYnV0ZSh0
aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtcbn07XG5cbmxvY2FsLmdldFVJREhU
TUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUudW5pcXVlTnVtYmVyIHx8IChub2Rl
LnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5cbi8vIHNvcnQgYmFzZWQgb24gdGhl
IHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5cblxubG9jYWwuc29ydCA9IGZ1bmN0
aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRTb3J0ZXIpIHJldHVybiByZXN1bHRz
O1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7XG5cdHJldHVybiByZXN1bHRz
O1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiov
XG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1hdGNoTlRIID0gL14oWystXT9cXGQq
KT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5wYXJzZU5USEFyZ3VtZW50ID0gZnVu
Y3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJndW1lbnQubWF0Y2godGhpcy5tYXRj
aE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cdHZhciBzcGVjaWFsID0gcGFy
c2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsxXSB8fCAxO1xuXHRpZiAoYSA9PSAn
LScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7XG5cdHBhcnNlZCA9XG5cdFx0
KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxuXHRcdChzcGVjaWFsID09ICdvZGQn
KVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09ICdldmVuJylcdD8ge2E6IDIsIGI6
IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhpcy5jYWNoZU5USFthcmd1bWVudF0g
PSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNldWRvID0gZnVuY3Rpb24oY2hpbGQs
IHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIGFy
Z3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0aWYgKCF0aGlz
W3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xu
XHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRcdHZhciBlbCA9IHBhcmVudFtj
aGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUpe1xuXHRcdFx0XHR2YXIgbm9kZU5h
bWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKGVsLm5vZGVO
YW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhp
cy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hpbGUgKChlbCA9IGVsW3NpYmxp
bmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKGVsLm5v
ZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdl
dFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10p
KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBhcmd1bWVudCB8fCAnbic7XG5cdFx0
dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8IHRoaXMucGFyc2VOVEhBcmd1
bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0XHR2YXIg
YSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNbcG9zaXRpb25zXVt1aWRdO1xu
XHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0XHRpZiAoYSA+IDApe1xuXHRcdFx0
aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGIgPCBw
b3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICgocG9zIC0gYikgJSBhKSA9PSAw
O1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxl
Y3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcykpIHRoaXMuZm91bmQucHVz
aChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5v
ZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMubWF0Y2hTZWxlY3Rvcihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSl7XG5cdFx0dGhpcy51bmlx
dWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVzaChub2RlKTtcblx0fVxufTtcblxu
bG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAodGhpcy5p
c0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvcil7XG5cdFx0dHJ5IHtc
blx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKG5vZGUsIHNlbGVj
dG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxcXV0rPylcXHMqXFxdL2csICdbJDE9
XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9yKXt9XG5cdH1cblxuXHR2YXIgcGFy
c2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5cdGlmICghcGFyc2VkKSByZXR1cm4g
dHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3JzXG5cdHZhciBleHByZXNzaW9u
cyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291bnRlciA9IDAsIGksIGN1cnJlbnRF
eHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBleHByZXNzaW9u
c1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCA9PSAxKXtcblx0
XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtcblx0XHRcdGlmICh0aGlzLm1hdGNo
U2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBleHAudGFnIDogZXhwLnRhZy50
b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAuYXR0cmlidXRlcywgZXhwLnBz
ZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4cENvdW50ZXIrKztcblx0XHR9XG5c
dH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJzZWQubGVuZ3RoKSByZXR1cm4gZmFs
c2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5kb2N1bWVudCwgcGFyc2VkKSwg
aXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107KXtcblx0XHRpZiAoaXRlbSA9
PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxubG9jYWwu
bWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBhcmd1bWVudCl7XG5cdHZhciBwc2V1
ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRoaXNbcHNldWRvTmFtZV0pIHJldHVy
biB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtcblx0dmFyIGF0dHJpYnV0ZSA9IHRo
aXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1cm4gKGFyZ3VtZW50KSA/IGFyZ3Vt
ZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtcblxubG9jYWwubWF0Y2hTZWxlY3Rv
ciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
e1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/
IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG5cdFx0aWYgKHRh
ZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0AnKSByZXR1cm4gZmFsc2U7IC8vIEZp
eCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVzXG5cdFx0fSBlbHNlIHtcblx0XHRc
dGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpZiAo
aWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQpIHJldHVybiBmYWxzZTtcblxuXHR2
YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9yIChpID0gY2xhc3Nlcy5sZW5ndGg7
IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsICdjbGFzcycpO1xuXHRc
dGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0KGNscykpKSByZXR1cm4gZmFsc2U7
XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpLS07
KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRpZiAocGFydC5vcGVyYXRvciA/ICFw
YXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSA6ICF0aGlzLmhhc0F0
dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAocHNldWRv
cykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xuXHRcdHBhcnQgPSBwc2V1ZG9zW2ld
O1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBwYXJ0LmtleSwgcGFydC52YWx1ZSkp
IHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBjb21iaW5hdG9y
cyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGlsZCBub2RlcywgYW55IGxldmVsXG5c
blx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRpZiAodGhpcy5pc0hUTUxEb2N1bWVu
dCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0XHRpdGVtID0gdGhpcy5kb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgoIWl0ZW0gJiYgbm9kZS5hbGwpIHx8
ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyku
bm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxsW2lkXSByZXR1cm5zIGFsbCB0aGUg
ZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5vZGVcblx0XHRcdFx0XHQvLyBp
ZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVsZW1lbnQsIGVsc2UgaXQgd2ls
bCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJlbiA9IG5vZGUuYWxsW2lkXTtcblx0
XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJlblsw
XSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBj
aGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWROb2RlID0gaXRlbS5nZXRBdHRyaWJ1
dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9kZSAmJiBpZE5vZGUubm9kZVZhbHVl
ID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRc
dFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0
aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyBpbiB0aGUgZG9tIHdl
IHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtpbmcgdGhlIGdldEJ5SWQgbGFi
ZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlzLnJvb3QsIG5vZGUpKSByZXR1cm47
XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMu
ZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMobm9kZSwgaXRlbSkpIHJldHVybjtc
blx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGdldEJ5Q2xhc3M6IGlm
IChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5H
RUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNs
YXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5s
ZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hp
bGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBudWxsLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRnZXRCeVRhZzog
e1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG5cdFx0
XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeVRhZztcblx0
XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51bGw7XG5cdFx0XHRmb3IgKGkg
PSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0Jz4nOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0
IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENoaWxkKSkgZG8ge1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2li
bGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ1xuXHRcdHdoaWxlICgobm9kZSA9
IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0XHRcdHRoaXMu
cHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRc
dGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBjaGlsZFxuXHRcdG5vZGUgPSBu
b2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUg
PT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0J34nOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBz
aWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKXtcblx0XHRcdGlm
IChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVpZCA9IHRoaXMuZ2V0
VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBicmVhaztcblx0XHRc
dHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0Jysr
JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7
IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZ1xuXHRcdHRoaXNbJ2NvbWJpbmF0
b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRc
dHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5ncyBhbmQgcHJldmlvdXMg
c2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiF+J10obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyEnOiBm
dW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8g
YWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUu
cGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1c2gobm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyE+Jzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xu
XHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyErJzogZnVuY3Rpb24o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHByZXZpb3Vz
IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIGlmIChu
b2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5c
dCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUubGFzdENoaWxkO1xuXHRcdGlmIChu
b2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1snY29t
YmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ3Ncblx0XHR3aGlsZSAo
KG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUg
IT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0
XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRVbmlxdWVz
W3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59O1xuXG5mb3IgKHZhciBjIGluIGNv
bWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10gPSBjb21iaW5hdG9yc1tjXTtcblxu
dmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdlbXB0eSc6
IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRy
ZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAxKSAmJiAhKG5vZGUuaW5uZXJUZXh0
IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtcblx0fSxcblxuXHQnbm90JzogZnVu
Y3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICF0aGlzLm1hdGNoTm9kZShub2Rl
LCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMnOiBmdW5jdGlvbihub2RlLCB0ZXh0
KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycp
LmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmlyc3QtY2hpbGQnOiBmdW5jdGlvbihu
b2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIGlmIChub2Rl
Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxu
XHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUu
bmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0
cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxp
bmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIG5leHQg
PSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBpZiAobmV4dC5u
b2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0
Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRoLWNoaWxkJzogbG9jYWwuY3JlYXRl
TlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USCcpLFxuXG5cdCdu
dGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZp
b3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250aC1vZi10eXBlJzogbG9jYWwuY3Jl
YXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USFR5cGUnLCB0
cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnbGFz
dENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBlTGFzdCcsIHRydWUpLFxuXG5c
dCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRv
Om50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkpO1xuXHR9LFxuXG5cdCdldmVuJzog
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2Rl
LCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRo
aXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpO1xuXHR9LFxuXG5cdC8qPC9udGgt
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1lID0g
bm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykp
IGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJu
IHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZh
ciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0
U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5c
dFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUp
e1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdo
aWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZU5hbWUgPT0g
bm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5cdFx0d2hpbGUg
KChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVOYW1lID09IG5vZGVOYW1l
KSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Lyo8L29mLXR5cGUt
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBwc2V1ZG9zXG5cblx0J2VuYWJsZWQn
OiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUuZGlzYWJsZWQ7XG5cdH0sXG5cblx0
J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuZGlzYWJsZWQ7XG5c
dH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5jaGVj
a2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2ZvY3VzJzogZnVuY3Rpb24obm9kZSl7
XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5kb2N1bWVudC5hY3RpdmVF
bGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50eXBlIHx8IHRoaXMuaGFzQXR0
cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxuXHQncm9vdCc6IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290KTtcblx0fSxcblxuXHQnc2VsZWN0
ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5zZWxlY3RlZDtcblx0fVxuXG5c
dC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3IgKHZhciBwIGluIHBzZXVkb3MpIGxv
Y2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxuLy8gYXR0cmlidXRlcyBtZXRob2Rz
XG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0cmlidXRlR2V0dGVycyA9IHtcblxu
XHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdodG1sRm9yJyBpbiB0aGlzKSA/IHRo
aXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3InKTtcblx0fSxcblxuXHQnaHJlZic6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4gdGhpcykgPyB0aGlzLmdldEF0dHJp
YnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblx0fSxcblxuXHQn
c3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5zdHlsZSkgPyB0aGlzLnN0eWxl
LmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblx0fSxcblxuXHQndGFiaW5k
ZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1
dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1
dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0s
XG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgn
dHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRy
aWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdtYXhMZW5ndGgnKTtcblx0XHRyZXR1
cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0cmlidXRl
Tm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5cbmF0dHJpYnV0ZUdldHRlcnMuTUFY
TEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGggPSBhdHRyaWJ1dGVHZXR0ZXJzLm1h
eGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0gbG9jYWwuU2xpY2sgPSAodGhpcy5T
bGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4xLjcnO1xuXG4vLyBTbGljayBmaW5k
ZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5k
KXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpO1xu
fTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24pe1xuXHRyZXR1
cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIG51bGwsIHRydWUpO1xufTtcblxu
Ly8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGljay5jb250YWlucyA9IGZ1bmN0aW9u
KGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KGNvbnRhaW5lcik7XG5cdHJl
dHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpO1xufTtcblxuLy8gU2xpY2sgYXR0
cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbihub2RlLCBuYW1l
KXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5nZXRBdHRyaWJ1
dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRyaWJ1dGUgPSBmdW5jdGlvbihub2Rl
LCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5oYXNB
dHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGljayBtYXRjaGVyXG5cblNsaWNrLm1h
dGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAoIShub2RlICYmIHNlbGVjdG9y
KSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBub2RlKSBy
ZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5t
YXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8gU2xpY2sgYXR0cmlidXRlIGFjY2Vz
c29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtc
blx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuO1xuXHRyZXR1cm4gdGhpcztcbn07
XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpe1xuXHRyZXR1
cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07XG5cbi8vIFNsaWNrIHBzZXVkbyBh
Y2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxv
Y2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xuXHRcdHJl
dHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIHRoaXM7XG59O1xu
XG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1lKXtcblx0dmFyIHBzZXVkbyA9IGxv
Y2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRvKSByZXR1cm4gZnVuY3Rpb24oYXJn
dW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBhcmd1bWVudCk7XG5cdH07XG5c
dHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJpZGVzIGFjY2Vzc29yXG5cblNsaWNr
Lm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5cdGxvY2FsLm92ZXJyaWRlKHJlZ2V4
cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmlzWE1MID0gbG9jYWwuaXNYTUw7
XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiBsb2NhbC5nZXRVSURI
VE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNrID0gU2xpY2s7XG5c
bn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1bmRlZmluZWQnKSA/
IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVt
ZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGl0ZW1zIGluIE1v
b1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0aGUgZG9sbGFycyBmdW5jdGlv
biwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGltZS1zYXZlciBtZXRob2RzIHRv
IGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRzLlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgU3Ry
aW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNrLlBhcnNlciwgU2xpY2suRmluZGVy
XVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAkLCAkJCwgSUZyYW1lLCBTZWxlY3Rv
cnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlzLkVsZW1lbnQgPSBmdW5jdGlvbih0
YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxlbWVudC5Db25zdHJ1Y3RvcnNbdGFn
XTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0b3IocHJvcHMpO1xuXHRpZiAo
dHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3VtZW50LmlkKHRhZykuc2V0KHByb3Bz
KTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5cdGlmICghKC9eW1xcdy1dKyQvKS50
ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0YWcpLmV4cHJlc3Npb25z
WzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcqJykgPyAnZGl2JyA6IHBhcnNlZC50
YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9PSBudWxsKSBwcm9wcy5pZCA9IHBh
cnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFyc2VkLmF0dHJpYnV0ZXM7XG5cdFx0
aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAwLCBsID0gYXR0cmlidXRlcy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJpYnV0ZXNbaV07XG5cdFx0XHRpZiAo
cHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoYXR0ci52YWx1
ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBwcm9wc1thdHRyLmtleV0gPSBhdHRy
LnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUgJiYgIWF0dHIub3BlcmF0b3IpIHBy
b3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnNlZC5jbGFzc0xpc3Qg
JiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNzJ10gPSBwYXJzZWQuY2xhc3NM
aXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KHRhZywg
cHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wcm90b3R5
cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQvLyBJRTggYW5kIElFOSByZXF1aXJl
IHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUuX2ZpcmVFdmVudCA9IChmdW5jdGlv
bihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRy
ZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZlbnQpO1xuXHRcdH07XG5cdH0pKEVs
ZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5ldyBUeXBlKCdFbGVtZW50JywgRWxl
bWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoQXJyYXkucHJvdG90eXBlW25hbWVd
KSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpbbmFtZV0gPSBmdW5jdGlvbigpe1xu
XHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMsIGVsZW1lbnRzID0gdHJ1ZTtc
blx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVzdWx0c1tpXSA9IGVsZW1lbnRbbmFt
ZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVtZW50cyA9IChlbGVtZW50cyAmJiB0
eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGVsZW1lbnRz
KSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7XG5cdH07XG5cblx0RWxlbWVudHMu
aW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50
LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3RvdHlwZSA9IHtcblx0XHQnJGNvbnN0
cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1bmN0aW9uLmNvbnZlcnQoJ2VsZW1l
bnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRo
b2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0aG9kO1xuXHR9KTtcbn1cblxu
RWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZhciBJRnJhbWUgPSBuZXcgVHlwZSgn
SUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRz
LCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxcblx0XHRpZnJhbWU6IGZ1bmN0aW9u
KG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtcblx0XHR9XG5cdH0pO1xuXG5cdHZh
ciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBpZnJhbWU7XG5cdGlmIChwYXJhbXMu
aWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZyYW1lKTtcblx0dmFyIG9ubG9h
ZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5cdGRlbGV0ZSBwcm9wcy5vbmxvYWQ7
XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwgcHJvcHMubmFtZSwgaWZyYW1l
ID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1lXycgKyBTdHJpbmcudW5pcXVl
SUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVudChpZnJhbWUgfHwgJ2lmcmFtZScs
IHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24oKXtcblx0XHRvbmxvYWQuY2FsbChp
ZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYgKHdpbmRvdy5mcmFtZXNbcHJvcHMu
aWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQp
O1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVtZW50cyA9IHRoaXMuRWxlbWVudHMg
PSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGgpe1xuXHRcdHZh
ciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IG5vZGUgPSBub2Rlc1tp
KytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9kZSk7XG5cdFx0XHRpZiAoIXVu
aXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHRcdHRoaXMu
cHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkVsZW1lbnRzLnByb3RvdHlw
ZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0gQXJyYXk7XG5cbm5ldyBUeXBlKCdF
bGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5cdGZpbHRlcjogZnVuY3Rpb24oZmls
dGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJuIHRoaXM7XG5cdFx0cmV0dXJuIG5l
dyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVPZihmaWx0ZXIpID09ICdzdHJpbmcn
KSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0ubWF0Y2goZmlsdGVyKTtcblx0
XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHB1c2g6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHRcdGZvciAodmFyIGkgPSAwLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGRvY3Vt
ZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgdGhpc1tsZW5ndGgrK10gPSBp
dGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoID0gbGVuZ3RoKTtcblx0fS5wcm90
ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgaXRlbXMgPSBbXTtcblx0
XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0aWYgKGl0ZW0p
IGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUudW5z
aGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGNvbmNhdDogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxlbWVudHModGhpcyk7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKFR5cGUuaXNFbnVtZXJhYmxlKGl0
ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0XHRlbHNlIG5ld0VsZW1lbnRzLnB1
c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVtZW50cztcblx0fS5wcm90ZWN0KCks
XG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtcblx0XHRmb3IgKHZhciBpID0gMCwg
bCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLnB1c2goY29sbGVjdGlvbltp
XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGVtcHR5OiBmdW5jdGlv
bigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbLS10aGlzLmxlbmd0aF07
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5cbn0pO1xuXG5cblxuKGZ1bmN0aW9u
KCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UsIG9i
amVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtcblxuc3BsaWNlLmNhbGwob2JqZWN0
LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVudHMuaW1wbGVtZW50KCdzcGxpY2Un
LCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdHZhciByZXN1bHQg
PSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0d2hpbGUgKGxlbmd0aCA+PSB0aGlz
Lmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRyZXR1cm4gcmVzdWx0O1xufS5wcm90
ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0aW9uKG1ldGhvZCwgbmFtZSl7XG5c
dEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xufSk7XG5cbkFycmF5Lm1pcnJvcihF
bGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MO1xu
dHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xufSBjYXRjaCAoZSl7fVxuXG52YXIg
ZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJldHVybiAoJycgKyBodG1sKS5yZXBs
YWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbn07XG4vKjwvbHRJ
RTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRNTCBvZiBz
dHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7XG5cdHZh
ciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcgPSBmYWxz
ZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdpbjogMHB4
O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0
dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5c
blx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdFx0aWYgKHByb3BzKXtcblx0
XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3BzLmRlZmF1bHRDaGVja2VkID0gcHJv
cHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9PSAnY2hlY2tib3gnIHx8IHByb3Bz
LnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0gbnVsbCkgcHJvcHMudmFsdWUgPSAn
b24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMgdGhlIHR5cGUgdG8gYmUgc2V0IGJl
Zm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1lbnRcblx0XHRcdGlmICghY2FuQ2hh
bmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0XHRcdFx0dmFyIHN0eWxlRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cdFx0XHRcdHN0eWxlRWxlbWVu
dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0XHRcdFx0aWYgKHByb3BzLnR5
cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZChzdHlsZUVsZW1l
bnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdC8qPGx0
SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBlIHByb3BlcnRpZXMgaW4gSUUg
PCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MKXtcblx0XHRcdFx0dGFnID0g
JzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkgdGFnICs9ICcgbmFtZT1cIicgKyBl
c2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkg
dGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMudHlwZSkgKyAnXCInO1xuXHRc
dFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMubmFtZTtcblx0XHRcdFx0ZGVs
ZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTg+Ki9cblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRhZykpLnNldChwcm9wcyk7XG5cdH1c
blxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5TbGljay51aWRPZih3aW5kb3cpO1xu
U2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld1Rl
eHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVUZXh0Tm9kZSh0
ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMud2lu
ZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxuXHRcdHZhciB0eXBlcyA9IHtcblxu
XHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0XHRpZCA9IFNs
aWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpO1xuXHRc
dFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQsIG5vY2FzaCkgOiBudWxsO1xuXHRc
dFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWwsIG5vY2FzaCl7XG5cdFx0XHRcdFNs
aWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2ggJiYgIWVsLiRmYW1pbHkgJiYgISgv
Xig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkpe1xuXHRcdFx0XHRcdHZhciBm
aXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0Ly8gd3JhcHBpbmcgbmVlZGVkIGlu
IElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9maXJlRXZlbnQgPSBmdW5jdGlvbih0
eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyZUV2ZW50KHR5cGUsIGV2ZW50KTtc
blx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBlbmQoZWwsIEVsZW1lbnQuUHJvdG90
eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHR9LFxuXG5cdFx0XHRv
YmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0XHRpZiAob2JqLnRvRWxl
bWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxlbWVudChkb2MpLCBub2Nhc2gpO1xu
XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHR0eXBlcy50ZXh0
bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cgPSB0eXBlcy5kb2N1bWVudCA9
IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5cdFx0fTtcblxuXHRcdHJldHVy
biBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0aWYgKGVsICYmIGVsLiRmYW1pbHkg
JiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVPZihl
bCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5cGVzW3R5cGVdKGVsLCBub2Nhc2gs
IGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5cblx0fSkoKVxuXG59KTtcblxuaWYg
KHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQnLCBmdW5jdGlvbihlbCwgbmMp
e1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlzLmRvY3VtZW50KTtcbn0pO1xuXG5X
aW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdp
bXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lvbiwgbmV3IEVsZW1lbnRzKTtcblx0
fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9uKSk7XG5cdH1cblxufSk7XG5cbnZh
ciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHJldHVybiBTbGlj
ay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5pZiAoIWRvY3VtZW50LmNvbnRhaW5z
KSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYgKCFkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuXG5cblxu
Ly8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5hdG9yID0gZnVuY3Rpb24oZXhwcmVz
c2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lvbikgcmV0dXJuIGNvbWJpbmF0b3I7
XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5wYXJzZShleHByZXNzaW9uKSk7
XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztcblx0Zm9yICh2
YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0XHRleHByZXNzaW9uc1tpXVswXS5j
b21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbk9i
amVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRnZXRQcmV2aW91czogJyF+Jyxcblx0
Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1l
bnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtc
blx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXRBbGxOZXh0OiAnficsXG5cdGdl
dEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczogJ35+Jyxcblx0Z2V0Q2hpbGRyZW46
ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlvbihjb21iaW5hdG9yLCBtZXRob2Qp
e1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29t
YmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0Z2V0Rmly
c3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5z
ZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKVswXSk7XG5cdH0s
XG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50
LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+Jykp
LmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7XG5cdH0sXG5cblx0Z2V0RWxl
bWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmlu
ZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxcVykvZywgJ1xcXFwkMScpKSk7XG5c
dH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiAhZXhwcmVz
c2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTtcblx0fVxuXG59KTtcblxuXG5c
bmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCQnLCBmdW5jdGlvbihz
ZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdGlmICh0eXBlb2Yg
c2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFyY2godGhpcy5kb2N1bWVudCwg
c2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBpZiAoVHlwZS5pc0VudW1lcmFibGUo
c2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVjdG9yKTtcblx0fVxuXHRyZXR1cm4g
bmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8gSW5zZXJ0ZXJzXG5cbnZhciBpbnNl
cnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHR2
YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBhcmVudC5p
bnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9u
KGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7
XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50Lm5l
eHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQp
e1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7XG5cdH0sXG5cblx0dG9wOiBmdW5j
dGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50Lmluc2VydEJlZm9yZShjb250ZXh0
LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5cbmluc2VydGVycy5pbnNpZGUgPSBp
bnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVydHkgLyBzZXRQcm9wZXJ0eVxuXG52
YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVycyA9IHt9O1xuXG4vLyBwcm9w
ZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJheS5mb3JFYWNoKFtcblx0J3R5cGUn
LCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tleScsICdjZWxsUGFkZGluZycsICdj
ZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9yZGVyJywgJ3Jvd1NwYW4nLCAndGFi
SW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRwcm9wZXJ0aWVzW3By
b3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59KTtcblxucHJvcGVydGllcy5odG1s
ID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJUZXh0JzogJ3RleHRDb250ZW50
JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocmVhbCwga2V5KXtcblx0
cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVty
ZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xufSk7XG5cbi8qPGx0SUU5PiovXG5w
cm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9k
ZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykgbm9kZS5zZXQo
J2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3BlcnRpZXMudGV4dF0gPSB2YWx1ZTtc
blx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxucHJvcGVydHlHZXR0ZXJzLnRleHQg
PSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVy
biAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9kZS5pbm5lckhUTUwgOiBnZXR0ZXIo
bm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7XG4vKjwvbHRJRTk+Ki9cblxu
Ly8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29tcGFjdCcsICdub3dyYXAnLCAnaXNt
YXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQnLFxuXHQnZGlzYWJsZWQnLCAncmVh
ZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9yZXNpemUnLFxuXHQnZGVmZXInLCAn
ZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xzJywgJ2F1dG9wbGF5Jyxcblx0
J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFycmF5LmZvckVhY2goYm9vbHMsIGZ1
bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRvTG93ZXJDYXNlKCk7XG5cdGJvb2xl
YW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihu
b2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFsdWU7XG5cdH07XG5cdHByb3BlcnR5
R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gISFub2RlW2Jvb2xd
O1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxuT2JqZWN0LmFwcGVuZChwcm9wZXJ0
eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdj
bGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgPSAodmFsdWUgfHwgJycpIDogbm9k
ZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdmb3InOiBmdW5jdGlv
bihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBub2RlKSA/IG5vZGUuaHRtbEZvciA9
IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVlKTtcblx0fSxcblxuXHQnc3R5
bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5vZGUuc3R5bGUpID8gbm9kZS5zdHls
ZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB2YWx1ZSk7XG5c
dH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGUudmFsdWUg
PSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9XG5cbn0pO1xuXG5wcm9wZXJ0eUdl
dHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuICgnY2xhc3NOYW1lJyBp
biBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBub2RlLmdldEF0dHJpYnV0ZSgnY2xh
c3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyByZWFkb25seSBhbmQgdGhyb3dzXG50
cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUpe31cbmlmIChlbC50eXBlICE9ICdi
dXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0
bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59O1xuZWwgPSBudWxsO1xuLyogPC93
ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3OSAtIElFOCBDYW5u
b3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0eWxlSFRNTCA9IChm
dW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSxc
blx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRNTCA9ICcjanVzdFRl
c2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJIVE1MO1xuXHR9IGNh
dGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4qL1xuXG52YXIgaW5w
dXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2b2xhdGlsZUlucHV0VmFsdWUs
IGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5wdXQudmFsdWUgPSAndCc7XG5pbnB1
dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZSAhPSAn
dCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxpZCBBcmd1bWVudFwiIHdoZW4gdHJ5
aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtcblx0aW5wdXQudmFsdWUgPSAnJztc
blx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5wdXRTdXBwb3J0ID0gaW5wdXQudHlw
ZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1dCA9IG51bGw7XG5cbmlmICh2b2xh
dGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0KSBwcm9wZXJ0eVNldHRlcnMudHlw
ZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xuXHRcdHZhciB2YWx1ZSA9IG5vZGUu
dmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRub2RlLnZhbHVlID0gdmFsdWU7XG5c
dH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyogZ2V0UHJvcGVydHksIHNldFByb3Bl
cnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRlc0dldEF0dHJpYnV0ZSA9IChmdW5j
dGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0ZSc7XG5cdHJldHVybiAoZGl2Lmdl
dEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpO1xufSkoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcgPSAoZnVuY3Rpb24odGVzdCl7XG5c
dHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5hbWU9XCJzaG91bGRfZml4XCIgdmFs
dWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0cmV0dXJuIHRlc3QuY2xvbmVOb2Rl
KHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0gMTtcbn0pKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICovXG5cbnZhciBoYXNDbGFzc0xpc3Qg
PSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblxudmFyIGNsYXNz
ZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xhc3NOYW1lcyA9IChjbGFzc05hbWUg
fHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9IHt9O1xuXHRyZXR1cm4gY2xhc3NO
YW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRpZiAoY2xhc3NOYW1lICE9PSAn
JyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5pcXVlc1tjbGFzc05hbWVdID0gY2xh
c3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUp
e1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xuXG52YXIgcmVtb3ZlRnJvbUNsYXNz
TGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5yZW1vdmUobmFtZSk7XG59
O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUs
IHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlTZXR0ZXJzW25hbWUudG9Mb3dlckNh
c2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0ZXIodGhpcywgdmFsdWUpO1xuXHRc
dH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHR2YXIgYXR0cmlidXRlQWxsb3dM
aXN0O1xuXHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBhdHRyaWJ1dGVBbGxvd0xpc3Qg
PSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywge30pO1xuXHRcdFx0LyogPC9s
dElFOT4gKi9cblxuXHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHR0aGlzLnJlbW92
ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0XHRpZiAocG9s
bHV0ZXNHZXRBdHRyaWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV07XG5cdFx0
XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJp
YnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0XHRp
ZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSA9IHRydWU7
XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpe1xuXHRcdGZv
ciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNldFByb3BlcnR5KGF0dHJpYnV0
ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRn
ZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGdldHRlciA9IHByb3BlcnR5R2V0
dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChnZXR0ZXIpIHJldHVybiBnZXR0ZXIo
dGhpcyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSl7
XG5cdFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZShuYW1lKSwgYXR0cmlidXRl
QWxsb3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFsbG93TGlzdCcsIHt9KTtcblx0
XHRcdGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAoYXR0ci5leHBhbmRvICYmICFh
dHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0pe1xuXHRcdFx0XHR2YXIgb3V0ZXIgPSB0aGlzLm91dGVy
SFRNTDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3BlbmluZyB0YWcgYW5kIGZpbmQgbWVu
dGlvbiBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAob3V0ZXIuc3Vic3RyKDAsIG91dGVy
LnNlYXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkvKSkuaW5kZXhPZihuYW1lKSA8IDAp
IHJldHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0gPSB0cnVlO1xu
XHRcdFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdHZhciByZXN1bHQgPSBTbGlj
ay5nZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0dXJuICghcmVzdWx0ICYmICFTbGlj
ay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJlc3VsdDtcblx0fSxcblxuXHRn
ZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuY29udmVydChh
cmd1bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlzLmdldFByb3BlcnR5LCB0aGlzKS5h
c3NvY2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUp
e1xuXHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUsIG51bGwpO1xuXHR9LFxuXG5cdHJl
bW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXkuZWFjaChhcmd1bWVudHMsIHRo
aXMucmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNl
dDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJv
cGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVydHkuc2V0KSA/IHByb3BlcnR5
LnNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJvcGVydHkocHJvcCwgdmFsdWUpO1xu
XHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5jdGlvbihwcm9wKXtcblx0XHR2YXIg
cHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0cmV0dXJuIChwcm9wZXJ0
eSAmJiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFwcGx5KHRoaXMpIDogdGhpcy5nZXRQ
cm9wZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigpLFxuXG5cdGVyYXNlOiBmdW5jdGlv
bihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5c
dFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3BlcnR5LmVyYXNlLmFwcGx5KHRo
aXMpIDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRy
ZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcblx0fSA6IGZ1bmN0aW9u
KGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhpcy5jbGFzc05hbWUpLmNvbnRhaW5z
KGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9u
KGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goYWRkVG9DbGFzc0xp
c3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NOYW1lICsgJyAnICsgdGhpcy5jbGFz
c05hbWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFz
czogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRjbGFzc2VzKGNsYXNz
TmFtZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dmFyIGNsYXNzTmFtZXMgPSBjbGFz
c2VzKHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChjbGFz
c05hbWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFt
ZXMuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBm
dW5jdGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAoZm9yY2UgPT0gbnVsbCkgZm9yY2Ug
PSAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJldHVybiAoZm9yY2UpID8gdGhpcy5h
ZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhjbGFzc05hbWUpO1xuXHR9LFxu
XG5cdGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJlbnQgPSB0aGlzLCBmcmFnbWVudCwg
ZWxlbWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyksIGxlbmd0aCA9IGVsZW1lbnRzLmxl
bmd0aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJhZ21lbnQgPSBkb2N1bWVudC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudHNbaV0sIHRy
dWUpO1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblx0
XHR9XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4dDogZnVuY3Rpb24odGV4dCwgd2hl
cmUpe1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1bWVudCgpLm5ld1RleHROb2Rl
KHRleHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0
XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3VtZW50LmlkKGVsLCB0cnVlKSwgdGhp
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5qZWN0OiBmdW5jdGlvbihlbCwgd2hl
cmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10odGhpcywgZG9jdW1lbnQuaWQo
ZWwsIHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXBsYWNlczogZnVuY3Rp
b24oZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdGVsLnBhcmVudE5v
ZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3
cmFwczogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9IGRvY3VtZW50LmlkKGVsLCB0cnVl
KTtcblx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihlbCwgd2hlcmUpO1xuXHR9LFxu
XG5cdGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc2VsZWN0ZWRJbmRleDsgLy8g
U2FmYXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5jb252ZXJ0KHRoaXMu
b3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5cdFx0XHRyZXR1cm4gb3B0aW9uLnNl
bGVjdGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbigpe1xu
XHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMuZ2V0RWxlbWVudHMoJ2lucHV0LCBz
ZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7XG5cdFx0XHR2YXIgdHlwZSA9IGVs
LnR5cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlzYWJsZWQgfHwgdHlwZSA9PSAnc3Vi
bWl0JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAnZmlsZScgfHwgdHlwZSA9PSAnaW1h
Z2UnKSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChlbC5nZXQoJ3RhZycpID09ICdzZWxl
Y3QnKSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKG9wdCl7XG5cdFx0XHRcdC8vIElF
XG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgndmFsdWUnKTtcblx0XHRcdH0p
IDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSAmJiAhZWwuY2hlY2tl
ZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0XHRBcnJheS5jb252ZXJ0KHZhbHVl
KS5lYWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsICE9ICd1bmRlZmlu
ZWQnKSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChlbC5uYW1lKSArICc9JyAr
IGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHJldHVy
biBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5cblxuLy8gYXBwZW5kSFRNTFxu
XG52YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6ICdiZWZvcmVCZWdpbicsXG5cdGFm
dGVyOiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVFbmQnLFxuXHR0b3A6ICdhZnRlckJl
Z2luJyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoJ2Fw
cGVuZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR0aGlzLmluc2VydEFkamFjZW50
SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddLCBodG1sKTtcblx0cmV0dXJu
IHRoaXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR2YXIgdGVtcCA9IG5ldyBFbGVt
ZW50KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxkcmVuID0gdGVtcC5jaGlsZE5vZGVz
LFxuXHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xuXG5cdGlmICghZnJhZ21lbnQpIHJl
dHVybiB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSl7XG5cdFx0ZnJhZ21lbnQgPSBk
b2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0ZnJhZ21lbnQuYXBwZW5kQ2hp
bGQoY2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGluc2VydGVyc1t3aGVyZSB8fCAnYm90
dG9tJ10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn0pO1xuXG52YXIgY29sbGVj
dGVkID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9IGZ1bmN0aW9uKHVpZCl7XG5cdHJl
dHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7fSkpO1xufTtcblxudmFyIGNs
ZWFuID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBpdGVtLnVuaXF1ZU51bWJlcjtcblx0
aWYgKGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2ZW50cygpO1xuXHRpZiAoaXRlbS5j
bGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdGlmICh1aWQgIT0gbnVs
bCl7XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRcdGRlbGV0ZSBzdG9yYWdlW3VpZF07
XG5cdH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9ybVByb3BzID0ge2lucHV0OiAnY2hl
Y2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2YWx1ZSd9O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKXtcblx0XHR2YXIgY2hpbGRyZW4g
PSBjbGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdEFycmF5LmVhY2go
Y2hpbGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bvc2UodGhpcyk7XG5cdFx0cmV0dXJu
IG51bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXkuY29udmVydCh0
aGlzLmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3NlKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5wYXJlbnRO
b2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKSA6IHRoaXM7XG5cdH0sXG5c
blx0Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQpe1xuXHRcdGNvbnRlbnRzID0gY29u
dGVudHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGNvbnRlbnRz
KSwgY2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxuXHRcdGlmIChjb250ZW50cyl7XG5c
dFx0XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
KicpKSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVydCh0aGlzLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSBjZS5sZW5ndGg7IGktLTspe1xu
XHRcdFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRlW2ldO1xuXHRcdFx0aWYgKCFrZWVw
aWQpIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRc
dGlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRcdG5vZGUuY2xlYXJBdHRyaWJ1dGVz
KCk7XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1lbnQpO1xuXHRcdFx0XHRub2Rl
LnJlbW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5cdFx0XHRcdGlmIChub2RlLm9wdGlv
bnMpe1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9ucywgZW8gPSBlbGVtZW50Lm9wdGlv
bnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0aDsgai0tOykgbm9bal0uc2VsZWN0
ZWQgPSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU5
PiovXG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNh
c2UoKV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3Byb3BdKSBub2RlW3Byb3BdID0gZWxl
bWVudFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmIChoYXNDbG9uZUJ1
Zyl7XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0Jyks
IHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0Jyk7XG5cdFx0XHRmb3IgKGkg
PSBjby5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9IHRvW2ldLm91dGVySFRNTDtcblx0
XHR9XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKGNsb25lKTtcblx0
fVxuXG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50
Jywge1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYgKHdpbmRv
dy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRcdFx0Y29sbGVj
dGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmFkZEV2
ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNb
Ml0pO1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7
XG5cdFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhpcy5yZW1vdmVFdmVudExpc3Rl
bmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxzZSB0aGlzLmRldGFjaEV2ZW50
KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmV0cmlldmU6
IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51
aWRPZih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRpZiAoZGZsdCAhPSBu
dWxsICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldID0gZGZsdDtcblx0
XHRyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7XG5cdH0sXG5cblx0c3RvcmU6IGZ1
bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlk
T2YodGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0dmFyIHN0
b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdGRlbGV0ZSBzdG9yYWdlW3Byb3Bl
cnR5XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLyo8bHRJRTk+Ki9cbmlmICh3
aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIGdj
ID0gZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xsZWN0ZWQsIGNsZWFuKTtcblx0XHRp
ZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFnZSgpO1xuXHRcdHdpbmRvdy5y
ZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xuXHR3aW5kb3cuYWRkTGlzdGVuZXIo
J3VubG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5FbGVtZW50LlByb3BlcnRpZXMgPSB7
fTtcblxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9u
KHN0eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHlsZTtcblx0fSxcblxuXHRnZXQ6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUuY3NzVGV4dDtcblx0fSxcblxuXHRl
cmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSAnJztcblx0fVxuXG59
O1xuXG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxufTtcblxuRWxlbWVu
dC5Qcm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihodG1sKXtcblx0XHRpZiAo
aHRtbCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBpZiAodHlwZU9mKGh0bWwpID09ICdh
cnJheScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0Lyo8bHRJRTk+Ki9cblx0XHRpZiAo
dGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwpIHRoaXMuc3R5bGVTaGVldC5j
c3NUZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4qL3RoaXMuaW5uZXJIVE1MID0gaHRt
bDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZXQoJ2h0bWwnLCAnJyk7
XG5cdH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVtZW50cyA9IHRydWUsIHN1cHBvcnRz
VGFibGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5uZXJIVE1MID0gdHJ1ZTtcblxuLyo8
bHRJRTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQgLSBodHRwOi8vamRiYXJ0bGV0dC5j
b20vaW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xu
dmFyIGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2PjwvbmF2Pic7XG5zdXBwb3J0c0hU
TUw1RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID09IDEpO1xuaWYgKCFzdXBwb3J0
c0hUTUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJyIGFydGljbGUgYXNpZGUgYXVkaW8g
Y2FudmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBo
Z3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNlY3Rpb24gc3VtbWFyeSB0aW1l
IHZpZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGlsZSAobC0tKSBmcmFnbWVudC5jcmVh
dGVFbGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtcbi8qPC9sdElFOT4qL1xuXG4vKjxJ
RT4qL1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24o
KXtcblx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcblx0dGFi
bGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7XG5cdHJldHVybiB0cnVlO1xufSk7
XG5cbi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpLCBo
dG1sID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBodG1sO1xuc3VwcG9ydHNUUklubmVy
SFRNTCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9IG51bGw7XG4vKjwvbHRGRjQ+Ki9c
blxuaWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFzdXBwb3J0c1RSSW5uZXJIVE1MIHx8
ICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1lbnQuUHJvcGVydGllcy5odG1sLnNl
dCA9IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5zbGF0aW9ucyA9IHtcblx0XHRcdHRh
YmxlOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0XHRcdHNlbGVjdDogWzEsICc8c2Vs
ZWN0PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBbMiwgJzx0YWJsZT48dGJvZHk+Jywg
JzwvdGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywgJzx0YWJsZT48dGJvZHk+PHRyPics
ICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5cblx0XHR0cmFuc2xhdGlvbnMudGhl
YWQgPSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlvbnMudGJvZHk7XG5cblx0XHRyZXR1
cm4gZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAodGhpcy5z
dHlsZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7XG5cdFx0XHQvKjwvbHRJRTk+
Ki9cblx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3RoaXMuZ2V0KCd0YWcnKV07XG5cdFx0
XHRpZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgd3JhcCA9IFswLCAnJywgJydd
O1xuXHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7XG5cblx0XHRc
dHZhciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRz
KSBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIuaW5uZXJIVE1M
ID0gW3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4oKS5qb2luKCcnKTtcblx0XHRcdHdo
aWxlIChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RDaGlsZDtcblx0XHRcdHRoaXMuZW1w
dHkoKS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0XHRpZiAoIXN1cHBvcnRzSFRNTDVF
bGVtZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG5cdFx0XHR3cmFwcGVyID0g
bnVsbDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVydGllcy5odG1sLnNldCk7XG59XG4v
KjwvSUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRpb24+czwv
b3B0aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5maXJzdENoaWxkLnZhbHVlICE9ICdz
JykgRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5cdHNldDogZnVuY3Rpb24odmFsdWUp
e1xuXHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5cdFx0aWYgKHRhZyAhPSAnc2VsZWN0
JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFsdWUpO1xuXHRcdHZhciBvcHRp
b25zID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5cdFx0dmFsdWUgPSBTdHJpbmcodmFs
dWUpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0
XHR2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0YXR0ciA9IG9wdGlvbi5nZXRBdHRy
aWJ1dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25WYWx1ZSA9IChhdHRyICYmIGF0dHIu
c3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0XHRcdGlm
IChvcHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xu
XHRcdH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbiA9IHRoaXMs
IHRhZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYgKHRhZyAhPSAnc2VsZWN0JyAmJiB0
YWcgIT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3BlcnR5KCd2YWx1ZScpO1xuXG5cdFx0
aWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlvbi5nZXRTZWxlY3RlZCgpWzBd
KSkgcmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgn
dmFsdWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQpID8gb3B0aW9uLnZh
bHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07XG50ZXN0Rm9ybSA9IG51bGw7XG4v
KjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlByb3BlcnRpZXMuaWQgPSB7XG5cdHNl
dDogZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lk
JykudmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LmlkIHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuaWQgPSB0
aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAnJztcblx0fVxufTtcbi8qPC9JRT4q
L1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50XG5cbmRlc2NyaXB0aW9uOiBDb250
YWlucyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZlbnQgb2JqZWN0IGNyb3NzLWJyb3dz
ZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywg
RG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmplY3RdXG5cbnByb3ZpZGVzOiBF
dmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgX2tleXMgPSB7fTtcbnZhciBu
b3JtYWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgbm9ybWFsaXplZDtc
blx0aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1hbGl6ZWQgPSBldmVudC53aGVlbERl
bHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIwIDogZXZlbnQud2hlZWxEZWx0
YSAvIDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91bnQgPSBldmVudC5kZWx0YVkgfHwg
ZXZlbnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9IC0ocmF3QW1vdW50ICUgMyA9PSAw
ID8gcmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtcblx0fVxuXHRyZXR1cm4gbm9ybWFs
aXplZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9NRXZlbnQgPSBuZXcgVHlwZSgnRE9N
RXZlbnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYgKCF3aW4pIHdpbiA9IHdpbmRvdztc
blx0ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlmIChldmVudC4kZXh0ZW5kZWQpIHJl
dHVybiBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xuXHR0aGlzLiRleHRlbmRlZCA9IHRy
dWU7XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcblx0dGhpcy5jb250cm9sID0gZXZl
bnQuY3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRLZXk7XG5cdHRoaXMubWV0YSA9IGV2
ZW50Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBlID0gZXZlbnQudHlwZTtcblx0dmFy
IHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuXHR3aGlsZSAodGFy
Z2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtc
blx0dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpO1xuXG5cdGlmICh0eXBlLmluZGV4
T2YoJ2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhpcy5jb2RlID0gKGV2ZW50LndoaWNo
IHx8IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5zaGlmdCB8fCB0eXBlICE9ICdrZXlw
cmVzcycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0aWYgKHR5cGUgPT0gJ2tleWRvd24n
IHx8IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29kZSA+IDExMSAmJiBjb2RlIDwgMTI0
KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0XHRcdGVsc2UgaWYgKGNvZGUgPiA5
NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5Njtcblx0XHR9XG5cdFx0aWYgKHRo
aXMua2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKS50b0xv
d2VyQ2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNrJyB8fCB0eXBlID09ICdkYmxj
bGljaycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBl
ID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9mKCdtb3VzZScpID09IDApe1xuXHRc
dHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0gKCFkb2MuY29tcGF0TW9kZSB8fCBk
b2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcblx0
XHR0aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBldmVudC5w
YWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCxcblx0XHRcdHk6IChldmVudC5w
YWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSArIGRvYy5zY3JvbGxU
b3Bcblx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRcdFx0eDogKGV2ZW50LnBhZ2VYICE9
IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQgOiBldmVudC5jbGllbnRYLFxu
XHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgLSB3aW4ucGFnZVlP
ZmZzZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRpZiAodHlwZSA9PSAnRE9NTW91c2VT
Y3JvbGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdtb3VzZXdoZWVsJykgdGhpcy53
aGVlbCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xuXHRcdHRoaXMucmlnaHRDbGljayA9
IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAyKTtcblx0XHRpZiAodHlwZSA9
PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcgfHwgdHlwZSA9PSAnbW91c2VlbnRl
cicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0dmFyIG92ZXJUYXJnZXQgPSB0eXBl
ID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInO1xuXHRcdFx0dmFyIHJlbGF0
ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50WyhvdmVyVGFyZ2V0ID8gJ2Zyb20nIDog
J3RvJykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJlbGF0ZWQgJiYgcmVsYXRlZC5ub2Rl
VHlwZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnROb2RlO1xuXHRcdFx0dGhpcy5yZWxh
dGVkVGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5
cGUuaW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5kZXhPZignZ2VzdHVyZScpID09IDAp
e1xuXHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtcblx0XHR0aGlzLnNjYWxlID0g
ZXZlbnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVzID0gZXZlbnQudGFyZ2V0VG91Y2hl
cztcblx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG5cdFx0
dmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3VjaGVzO1xuXHRcdGlmICh0b3Vj
aGVzICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNoID0gdG91Y2hlc1swXTtcblx0XHRc
dHRoaXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91Y2gucGFnZVl9O1xuXHRcdFx0dGhp
cy5jbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2guY2xpZW50WX07XG5cdFx0fVxu
XHR9XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQgPSB7fTtcblx0aWYgKCF0aGlz
LnBhZ2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2ZW50LmltcGxlbWVudCh7XG5cblx0
c3RvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5wcmV2ZW50RGVmYXVsdCgpLnN0b3BQ
cm9wYWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKXtcblx0
XHRpZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtc
blx0XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5ID0gZnVuY3Rpb24oY29kZSwga2V5
KXtcblx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRE9NRXZlbnQu
ZGVmaW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVybG9hZFNldHRlcih0cnVlKTtcblxu
RE9NRXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcsICc0MCc6ICdkb3duJywgJzM3Jzog
J2xlZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNjJywgJzMyJzogJ3NwYWNlJywgJzgn
OiAnYmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2JzogJ2RlbGV0ZScsICcxMyc6ICdlbnRl
cidcbn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5FdmVu
dFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRob2RzIGZvciBkZWFsaW5nIHdp
dGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3VzZWVudGVyIGFuZCBtb3VzZWxl
YXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNzYXJ5LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFdmVudF1cblxucHJvdmlkZXM6
IEVsZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuRWxlbWVudC5Qcm9w
ZXJ0aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdHRoaXMuYWRkRXZlbnRz
KGV2ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1w
bGVtZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dmFyIGV2
ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtcblx0XHRpZiAoIWV2ZW50c1t0eXBl
XSkgZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6IFtdfTtcblx0XHRpZiAoZXZlbnRz
W3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhpcztcblx0XHRldmVudHNbdHlwZV0u
a2V5cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0eXBlLFxuXHRcdFx0Y3VzdG9tID0g
RWxlbWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRpb24gPSBmbixcblx0XHRcdHNlbGYg
PSB0aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vbkFkZCkgY3VzdG9t
Lm9uQWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1c3RvbS5jb25kaXRpb24p
e1xuXHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdFx0aWYgKGN1
c3RvbS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlwZSkpIHJldHVybiBmbi5jYWxsKHRo
aXMsIGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH1c
blx0XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBGdW5jdGlvbi5jb252ZXJ0KGN1c3Rv
bS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHR2YXIgZGVmbiA9IGZ1bmN0aW9u
KCl7XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0XHR9O1xuXHRcdHZhciBuYXRpdmVF
dmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTtcblx0XHRpZiAobmF0aXZlRXZl
bnQpe1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xuXHRcdFx0XHRkZWZuID0gZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERPTUV2ZW50KGV2ZW50LCBzZWxmLmdl
dFdpbmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9uLmNhbGwoc2VsZiwgZXZlbnQpID09
PSBmYWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5h
ZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJdKTtcblx0XHR9XG5cdFx0ZXZl
bnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMu
cmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJl
dHVybiB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuXHRcdHZhciBpbmRleCA9
IGxpc3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5kZXggPT0gLTEpIHJldHVybiB0aGlz
O1xuXHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC5r
ZXlzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdHZhciBjdXN0
b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAoY3VzdG9tKXtcblx0XHRcdGlmIChj
dXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRoaXMsIGZuLCB0eXBlKTtcblx0
XHRcdGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2Up
LmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiAoRWxlbWVudC5OYXRpdmVFdmVu
dHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2YWx1ZSwgYXJndW1lbnRzWzJd
KSA6IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZv
ciAodmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudChldmVudCwgZXZlbnRzW2V2ZW50
XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihl
dmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0
Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2
ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0dmFyIGF0dGFjaGVk
ID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFhdHRhY2hlZCkgcmV0dXJuIHRo
aXM7XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGF0dGFjaGVkKSB0aGlz
LnJlbW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxpbWluYXRlKCdldmVudHMnKTtcblx0
XHR9IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRcdFx0YXR0YWNoZWRbZXZlbnRzXS5r
ZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50KGV2ZW50cywg
Zm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUgYXR0YWNoZWRbZXZlbnRzXTtcblx0
XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBl
LCBhcmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycp
O1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRcdGFy
Z3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChm
dW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdz
KTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6IGZ1bmN0aW9uKGZyb20sIHR5cGUp
e1xuXHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0XHR2YXIgZXZlbnRzID0gZnJvbS5y
ZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGlm
ICghdHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUgaW4gZXZlbnRzKSB0aGlzLmNsb25l
RXZlbnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNlIGlmIChldmVudHNbdHlwZV0pe1xu
XHRcdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMu
YWRkRXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0
aGlzO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50cyA9IHtcblx0Y2xpY2s6IDIs
IGRibGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIsIGNvbnRleHRtZW51OiAyLCAv
L21vdXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hlZWw6IDIsIERPTU1vdXNlU2Nyb2xs
OiAyLCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwgbW91c2VvdXQ6IDIsIG1vdXNlbW92
ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9tb3VzZSBtb3ZlbWVudFxuXHRr
ZXlkb3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8va2V5Ym9hcmRcblx0b3JpZW50YXRp
b25jaGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0OiAyLCB0b3VjaG1vdmU6IDIsIHRv
dWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hcblx0Z2VzdHVyZXN0YXJ0OiAyLCBn
ZXN0dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBnZXN0dXJlXG5cdGZvY3VzOiAyLCBi
bHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIsIHN1Ym1pdDogMiwgcGFzdGU6
IDIsIGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9hZDogMiwgdW5sb2FkOiAxLCBiZWZv
cmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29udGVudExvYWRlZDogMSwgcmVh
ZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNoYW5nZTogMSwgcG9wc3RhdGU6IDIs
IHBhZ2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9yeVxuXHRlcnJvcjogMSwgYWJvcnQ6
IDEsIHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07XG5cbkVsZW1lbnQuRXZlbnRzID0g
e1xuXHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hlZWwnIGluIGRvY3VtZW50ID8gJ3do
ZWVsJyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8gJ21vdXNld2hlZWwnIDogJ0RPTU1v
dXNlU2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbihldmVudCl7XG5cdHZh
ciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0aWYgKHJlbGF0ZWQgPT0gbnVsbCkg
cmV0dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gKHJl
bGF0ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAneHVsJyAmJiB0eXBlT2YodGhpcykg
IT0gJ2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxhdGVkKSk7XG59O1xuXG5pZiAoJ29u
bW91c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtcblx0RWxlbWVudC5OYXRp
dmVFdmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlbGVhdmUgPSAy
O1xuXHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrO1xufSBlbHNlIHtcblx0RWxlbWVu
dC5FdmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25k
aXRpb246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVudHMubW91c2VsZWF2ZSA9IHtcblx0
XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogY2hlY2tcblx0fTtcbn1cblxuLyo8
bHRJRTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRFbGVtZW50Lk5hdGl2
ZUV2ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1lbnQuRXZlbnRzLmNoYW5nZSA9IHtc
blx0XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdFx0
XHRyZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQnICYmICh0eXBlID09ICdyYWRpbycg
fHwgdHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHljaGFuZ2UnIDogJ2NoYW5nZSc7XG5c
dFx0fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdHJldHVybiBldmVu
dC50eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQuZXZlbnQucHJvcGVydHlOYW1lID09
ICdjaGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5cbn0pKCk7XG5c
bi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uXG5cbmRlc2NyaXB0aW9uOiBFeHRl
bmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSB0aGUgZGVsZWdhdGUgbWV0
aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczog
W0VsZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGV2
ZW50TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcjtcblxuRWxlbWVu
dC5OYXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3Vzb3V0ID0g
MjtcblxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFy
Z2V0KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2VsZil7XG5cdFx0aWYgKG1hdGNo
KHRhcmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJnZXQsIGV2ZW50LCB0YXJnZXQpO1xu
XHRcdHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJlbnROb2RlKTtcblx0fVxufTtcblxu
dmFyIG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRc
dGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0bW91c2VsZWF2ZTog
e1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50
ZXJDaGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6ICdmb2N1cycgKyAoZXZlbnRMaXN0
ZW5lclN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fSxcblx0Ymx1
cjoge1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJ2JsdXInIDogJ2ZvY3Vzb3V0
Jyxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8qPGx0SUU5PiovXG52YXIgX2tleSA9
ICckZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9IGZ1bmN0aW9uKHR5cGUpe1xuXG5c
dHJldHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cblx0XHRyZW1vdmU6IGZ1bmN0aW9u
KHNlbGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUg
KyAnbGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAobGlzdCAmJiBsaXN0LmZvcm1zKSBm
b3IgKHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTspe1xuXHRcdFx0XHQvLyB0aGUgZm9y
bSBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29uJ3QgaGF2ZSB0aGVcblx0XHRcdFx0
Ly8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQgY2FzZSB0aGUgZXZlbnQgd2Fz
XG5cdFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRcdFx0aWYgKGxpc3QuZm9ybXNbaV0u
cmVtb3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQodHlwZSwgbGlzdC5mbnNbaV0p
O1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBmb3JtID0gKHRhcmdldC5nZXQoJ3Rh
ZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQuZ2V0UGFyZW50KCdmb3JtJyk7
XG5cdFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0dmFyIGxpc3RlbmVycyA9IHNlbGYu
cmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pLFxuXHRcdFx0XHRsaXN0ZW5l
ciA9IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZuczogW119LFxuXHRcdFx0XHRmb3Jt
cyA9IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5mbnM7XG5cblx0XHRcdGlmIChmb3Jt
cy5pbmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0XHRmb3Jtcy5wdXNoKGZvcm0pO1xu
XG5cdFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChzZWxm
LCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGZvcm0uYWRkRXZl
bnQodHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7XG5cblx0XHRcdGxpc3RlbmVyc1t1
aWRdID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVy
cycsIGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxudmFyIGlucHV0T2JzZXJ2ZXIgPSBm
dW5jdGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cdFx0bGlz
dGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0dmFy
IGV2ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50cyhl
dmVudHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlwZV0gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0
XHR9O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhldmVudHMpO1xuXHRcdH1cblx0fTtc
bn07XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVjdC5hcHBlbmQobWFwLCB7XG5c
dHN1Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0cmVzZXQ6IGZvcm1PYnNlcnZlcign
cmVzZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFuZ2UnKSxcblx0c2VsZWN0OiBp
bnB1dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIHByb3RvID0g
RWxlbWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJvdG8uYWRkRXZlbnQsXG5cdHJlbW92
ZUV2ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciByZWxheSA9IGZ1bmN0aW9uKG9sZCwg
bWV0aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZuLCB1c2VDYXB0dXJlKXtcblx0XHRp
ZiAodHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5
cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodHlwZSku
ZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5wc2V1ZG9zWzBdLmtleSAhPSAncmVs
YXknKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpO1xuXHRcdHZh
ciBuZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQucHNldWRvcy5zbGljZSgxKS5lYWNo
KGZ1bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9ICc6JyArIHBzZXVkby5rZXkgKyAo
cHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJyknIDogJycpO1xuXHRcdH0pO1xu
XHRcdG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gbWV0aG9kLmNhbGwodGhp
cywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZuKTtcblx0fTtcbn07XG5cbnZh
ciBkZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4p
e1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3Rv
cmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVkKSBmb3IgKHZhciBfdWlkIGluIHN0
b3JlZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09IGZuICYmIHN0b3JlZFtfdWlkXS5t
YXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dmFyIF90eXBlID0gdHlw
ZSwgX21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRc
dHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdl
dCl7XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0LCBfbWF0Y2gpO1xuXHRcdH07XG5c
blx0XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNbX3R5cGVdO1xuXHRcdGlmIChf
bWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxlbWVudEV2ZW50LmNvbmRpdGlvbil7
XG5cdFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRpb24gPSBfbWFwLmNvbmRpdGlvbiB8
fCBlbGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQs
IGV2ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFyZ2V0LCBldmVudCkgJiYgY29uZGl0
aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZh
ciBzZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlEKCk7XG5cdFx0dmFyIGRlbGVnYXRv
ciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7XG5cdFx0XHRpZiAoIXRh
cmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0
XHRcdGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdl
dCwgdWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7XG5cdFx0XHRpZiAoIXRh
cmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0
XHRcdGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7
XG5cdFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQgPSB7fTtcblx0XHRzdG9yZWRbdWlk
XSA9IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRmbjogX2ZuLFxuXHRcdFx0ZGVsZWdh
dG9yOiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkO1xuXHRc
dHJldHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0dXJl
KTtcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuLCBfdWlk
KXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0
b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9yZWQpIHJldHVybiB0aGlzO1xuXG5c
dFx0aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlwZSwgZGVsZWdhdG9yID0gc3RvcmVk
W191aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHRcdHR5cGUgPSBf
bWFwLmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5yZW1vdmUpIF9tYXAucmVtb3ZlKHRo
aXMsIF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlkXTtcblx0XHRcdHN0b3JhZ2VbX3R5
cGVdID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwg
ZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxuXHRcdHZhciBfX3VpZCwgcztcblx0
XHRpZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRd
O1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5mbiA9PSBmbikgcmV0dXJuIGRlbGVn
YXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgZm4sIF9fdWlkKTtcblx0
XHR9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07
XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxs
KHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxl
bWVudCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBkZWxlZ2F0aW9uLmFkZEV2ZW50
KSxcblx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50LCBkZWxlZ2F0aW9uLnJlbW92ZUV2
ZW50KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5TdHlsZVxuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3R5
bGVzIG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxucHJvdmlkZXM6IEVsZW1lbnQuU3R5
bGVcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGh0bWwgPSBkb2N1bWVudC5odG1s
LCBlbDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xkSUUsIHdoaWNoIGRvZXMgbm90IHJl
bW92ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxsXG5lbCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAncmVkJztcbmVsLnN0eWxlLmNvbG9y
ID0gbnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0gZWwuc3R5bGUuY29sb3IgPT0gJ3Jl
ZCc7XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0dXJucyBib3JkZXIqIHNob3J0aGFu
ZCBzdHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13aWR0aC1zdHlsZSBpbnN0ZWFkIG9m
IHdpZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcxcHggc29saWQgIzEyM2FiYyc7XG5l
bC5zdHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJuc0JvcmRlcnNJbldyb25nT3JkZXIg
PSBlbC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBudWxsO1xuLy88L2x0SUU5PlxuXG52
YXIgaGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93LmdldENvbXB1dGVkU3R5bGUsXG5cdHN1
cHBvcnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZS5i
b3JkZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlcyA9IHtzZXQ6
IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVzKHN0eWxlcyk7XG59fTtcblxudmFy
IGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51bGwpLFxuXHRoYXNGaWx0ZXIg
PSAoaHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJlQWxwaGEgPSAvYWxwaGFcXChvcGFj
aXR5PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJpbGl0eSA9IGZ1bmN0aW9uKGVsZW1l
bnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3BhY2l0eScsIG9wYWNpdHkpO1xuXHRl
bGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4gMCB8fCBvcGFjaXR5ID09IG51bGwg
PyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0SUU5PlxudmFyIHNldEZpbHRlciA9
IGZ1bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xuXHR2YXIgc3R5bGUgPSBlbGVtZW50
LnN0eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVk
U3R5bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0ZXIgPSAocmVnZXhwLnRlc3QoZmls
dGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpIDogZmlsdGVyICsgJyAnICsgdmFs
dWUpLnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgn
ZmlsdGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0T3BhY2l0eSA9IChoYXNPcGFjaXR5
ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9
IG9wYWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xu
XHRpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVtZW50LmN1cnJlbnRTdHlsZS5oYXNM
YXlvdXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlmIChvcGFjaXR5ID09IG51bGwgfHwg
b3BhY2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJycpO1xuXHRc
dGlmIChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVtZW50KSAhPSAxKSBzZXRGaWx0ZXIo
ZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAwKScpO1xuXHR9IGVsc2Uge1xuXHRc
dHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0nICsgKG9wYWNpdHkg
KiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7XG5cdH1cbn0gOiBzZXRWaXNpYmls
aXR5KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlvbihlbGVtZW50
KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNpdHkgfHwgZWxlbWVudC5nZXRD
b21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAob3BhY2l0eSA9PSAnJykgPyAxIDog
b3BhY2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xu
XHR2YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0
ZWRTdHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5cdGlmIChmaWx0ZXIpIG9wYWNpdHkg
PSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAob3BhY2l0eSA9PSBudWxsIHx8IGZp
bHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7XG59IDogZnVuY3Rpb24oZWxl
bWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRyaWV2ZSgnJG9wYWNpdHknKTtcblx0
aWYgKG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkg
PT0gJ2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFjaXR5O1xufSkpO1xuXG52YXIgZmxv
YXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkgPyAnc3R5bGVGbG9hdCcgOiAn
Y3NzRmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0OiAnMCUnLCB0b3A6ICcwJScsIGNl
bnRlcjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTogJzEwMCUnfSxcblx0aGFzQmFja2dy
b3VuZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb25YICE9IG51bGwp
LFxuXHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52YXIgY2FtZWxDYXNlID0gZnVuY3Rp
b24ocHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVwbGFjZShwcmVmaXhQYXR0ZXJuLCAn
JDEtJykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5cbnZhciByZW1vdmVTdHlsZSA9IGZ1
bmN0aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBv
c2l0aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5ICsgJ1gnKTtcblx0
XHRwcm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5
KTtcbn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRDb21wdXRl
ZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxl
ICYmIHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJyZW50U3R5bGVbY2FtZWxDYXNl
KHByb3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0gRWxlbWVudC5nZXREb2N1bWVudCh0
aGlzKS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0
Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVsbDtcblx0XHRyZXR1cm4gKGNv
bXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHByb3BlcnR5ID09IGZsb2F0TmFt
ZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDogJyc7XG5cdH0sXG5cblx0c2V0
U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdv
cGFjaXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgdmFsdWUgPSBwYXJzZUZsb2F0KHZh
bHVlKTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUpO1xuXHRcdFx0cmV0dXJuIHRoaXM7
XG5cdFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBm
bG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ3N0cmluZycp
e1xuXHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9wZXJ0eV0gfHwgJ0AnKS5zcGxp
dCgnICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0KHZhbHVlKS5tYXAoZnVuY3Rpb24o
dmFsLCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVybiAnJztcblx0XHRcdFx0cmV0dXJu
ICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVwbGFjZSgnQCcsIE1hdGgucm91
bmQodmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7XG5cdFx0fSBlbHNlIGlmICh2YWx1
ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0dmFsdWUgPSBNYXRoLnJvdW5kKHZh
bHVlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHQvLzxs
dElFOT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVlID09IG51bGwpICYmIGRvZXNOb3RS
ZW1vdmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRyaWJ1dGUpe1xuXHRcdFx0cmVtb3Zl
U3R5bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1cblx0XHQvLzwvbHRJRTk+XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0
XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4gZ2V0T3BhY2l0eSh0aGlzKTtcblx0
XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDog
cHJvcGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFkaXVzICYmIHByb3BlcnR5LmluZGV4
T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJldHVybiBbJ2JvcmRlclRvcExlZnRS
YWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMn
LCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlvbihjb3JuZXIpe1xuXHRcdFx0
XHRyZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgnO1xuXHRcdFx0fSwgdGhpcykuam9p
bignICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhpcy5zdHlsZVtwcm9wZXJ0eV07XG5c
dFx0aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcpe1xuXHRcdFx0aWYgKEVsZW1l
bnQuU2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKXtcblx0XHRcdFx0cmVzdWx0
ID0gW107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1twcm9wZXJ0
eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0
LmpvaW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHls
ZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSAmJiAv
XmJhY2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9wZXJ0eSkpe1xuXHRcdFx0cmV0dXJu
IHJlc3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KS9nLCBmdW5jdGlvbihwb3Np
dGlvbil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9uc1twb3NpdGlvbl07XG5cdFx0XHR9
KSB8fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQgJiYgcHJvcGVydHkgPT0gJ2JhY2tn
cm91bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5cdFx0aWYgKHJlc3VsdCl7XG5cdFx0
XHRyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZhciBjb2xvciA9IHJlc3VsdC5tYXRj
aCgvcmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRpZiAoY29sb3IpIHJlc3VsdCA9IHJl
c3VsdC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hleCgpKTtcblx0XHR9XG5cdFx0
aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0eWxlW3Byb3BlcnR5XSl7XG5cdFx0
XHRpZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9wZXJ0eSkgJiYgISgvcHgkLy50ZXN0
KHJlc3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChwcm9wZXJ0eSA9PSAnd2lkdGgnKSA/
IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10sIHNpemUgPSAwO1xuXHRcdFx0
XHR2YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdFx0c2l6ZSArPSB0aGlzLmdl
dFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRvSW50KCkgKyB0aGlzLmdldFN0
eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0
XHRcdHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2FwaXRhbGl6ZSgpXSAtIHNpemUg
KyAncHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRlciguKylXaWR0aHxtYXJnaW58cGFk
ZGluZy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNlRmxvYXQocmVzdWx0KSkpe1xuXHRc
dFx0XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vPGx0SUU5PlxuXHRcdGlm
IChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRlcihUb3B8UmlnaHR8Qm90dG9t
fExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChyZXN1bHQpKXtcblx0XHRcdHJl
dHVybiByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxzKC4rKSQvLCAnJDIgJDMgJDEnKTtc
blx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHRz
ZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9yICh2YXIgc3R5bGUgaW4gc3R5bGVz
KSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xu
XHRcdEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGtleSl7XG5cdFx0XHRy
ZXN1bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1
cm4gcmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0eWxlcyA9IHtcblx0bGVmdDogJ0Bw
eCcsIHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0OiAnQHB4Jyxcblx0d2lkdGg6ICdA
cHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1heEhlaWdodDogJ0BweCcsIG1p
bldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0YmFja2dyb3VuZENvbG9yOiAncmdi
KEAsIEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBiYWNrZ3JvdW5kUG9zaXRpb246ICdA
cHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRmb250U2l6ZTogJ0BweCcsIGxldHRl
clNwYWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4JywgY2xpcDogJ3JlY3QoQHB4IEBweCBA
cHggQHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcsIHBhZGRpbmc6ICdAcHggQHB4
IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEAp
IEBweCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRoOiAnQHB4IEBweCBAcHggQHB4Jywg
Ym9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdyZ2IoQCwgQCwgQCkgcmdiKEAs
IEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxuXHR6SW5kZXg6ICdAJywgJ3pvb20n
OiAnQCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDogJ0BweCcsIG9wYWNpdHk6ICdAJywg
Ym9yZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtcblxuXG5cblxuXG5FbGVtZW50LlNo
b3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBib3JkZXI6IHt9LCBib3JkZXJX
aWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6IHt9fTtcblxuWydUb3AnLCAn
UmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9uKGRpcmVjdGlvbil7XG5cdHZh
ciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZhciBBbGwgPSBFbGVtZW50LlN0eWxl
cztcblx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rpb24oc3R5bGUpe1xuXHRcdHZh
ciBzZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0W3N0eWxlXVtzZF0gPSBBbGxbc2Rd
ID0gJ0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVyJyArIGRpcmVjdGlvbjtcblx0U2hv
cnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAsIEAsIEApJztcblx0dmFyIGJk
dyA9IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUnLCBiZGMgPSBiZCArICdDb2xvcic7
XG5cdFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJXaWR0aFtiZHddID0gU2hvcnRbYmRd
W2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5ib3JkZXJTdHlsZVtiZHNdID0gU2hv
cnRbYmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hvcnQuYm9yZGVyQ29sb3JbYmRjXSA9
IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAsIEApJztcbn0pO1xuXG5pZiAo
aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hvcnRTdHlsZXMuYmFja2dyb3VuZFBv
c2l0aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywgYmFja2dyb3VuZFBvc2l0aW9uWTog
J0AnfTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EaW1lbnNpb25zXG5cbmRl
c2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0aCBzaXplLCBzY3JvbGwsIG9y
IHBvc2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2luZG93IG9iamVjdC5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWxlbWVudCBwb3NpdGlvbmlu
ZyBiYXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294ZG9vLm9yZy8pIGNvZGUgYW5kIHNt
YXJ0IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl
bnNlcy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVuc2lvbnMgYmFzZWQgb24gW1lVSV0o
aHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29kZSwgW0JTRCBMaWNlbnNlXShodHRw
Oi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1sKS5cblxucmVxdWlyZXM6IFtF
bGVtZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGltZW5zaW9uc11c
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTtcbmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxlbWVudC5hcHBlbmRDaGlsZChjaGls
ZCk7XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9mZnNldFBhcmVudCA9PT0gZWxl
bWVudCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52YXIgaGVpZ2h0Q29tcG9uZW50cyA9
IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRvbScsICdib3JkZXJUb3BXaWR0
aCcsICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENvbXBvbmVudHMgPSBbJ3dpZHRoJywg
J3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVy
UmlnaHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6ZSA9IGZ1bmN0aW9uKGVsKXtcblxu
XHR2YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLFxuXHRcdGJvdW5kcyA9IHt4
OiAwLCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVhY2goZnVuY3Rpb24oY3NzKXtcblx0
XHRib3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0fSk7XG5cdHdpZHRoQ29tcG9u
ZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnggKz0gcGFyc2VGbG9hdChnQ1Nb
Y3NzXSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtcblxudmFyIGlzT2Zmc2V0ID0gZnVu
Y3Rpb24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWwsICdwb3NpdGlvbicpICE9ICdzdGF0
aWMnIHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZzZXRTdGF0aWMgPSBmdW5jdGlvbihl
bCl7XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFibGV8dGR8dGgpJC9pKS50ZXN0
KGVsLnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNjcm9sbFRvOiBm
dW5jdGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKXtcblx0XHRcdHRoaXMuZ2V0V2lu
ZG93KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2Nyb2xsTGVm
dCA9IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkg
cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xuXG5cdFx0Ly88bHRJRTk+XG5cdFx0
Ly8gVGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNhbm5vdCBjYWxjdWxhdGUgZ2V0Qm91
bmRpbmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlzaWJpbGl0eSBoaWRkZW4uXG5cdFx0
aWYgKCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJuIHt4OiB0aGlzLm9mZnNldFdpZHRo
LCB5OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0Ly8gVGhpcyBz
dmcgc2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3VsYXRlU2l6ZSgpYCwgY2FuIGJlIHJl
bW92ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVnLlxuXHRcdC8vIEJ1ZyBpbmZvOiBo
dHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01MzA5ODVcblx0XHRp
ZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3ZnQ2FsY3VsYXRlU2l6ZSh0aGlz
KTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndpZHRoLCB5OiBib3VuZHMuaGVpZ2h0
fTtcblx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdFx0fVxu
XHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlz
KSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6ZSgpO1xuXHRcdHJldHVybiB7
eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWlnaHR9O1xuXHR9LFxuXG5cdGdl
dFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5n
ZXRXaW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsTGVmdCwg
eTogdGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbHM6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9
O1xuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRp
b24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQu
c2Nyb2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHR9XG5c
dFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9mZnNldFBhcmVudDogYnJva2VuT2Zm
c2V0UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0aWYg
KGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAn
Zml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09mZnNldENoZWNrID0gKHN0eWxlU3Ry
aW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/IGlzT2Zmc2V0U3RhdGljIDog
aXNPZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSl7XG5c
dFx0XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxu
XHRcdHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRo
aXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50LCAncG9z
aXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1
cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXHRcdHJldHVybiBu
dWxsO1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGhhc0dldEJv
dW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0O1xuXG5cdFx0aWYg
KGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2YXIgYm91bmQgPSB0aGlzLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0gZG9jdW1lbnQuaWQodGhpcy5nZXRE
b2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRcdGh0bWxTY3JvbGwgPSBodG1sLmdl
dFNjcm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRoaXMuZ2V0U2Nyb2xscygpLFxuXHRc
dFx0XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3NpdGlvbicpID09ICdmaXhlZCcp
O1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3VuZC5sZWZ0LnRvRmxvYXQoKSArIGVs
ZW1TY3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueCkgLSBodG1sLmNsaWVu
dExlZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy55ICsg
KChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5jbGllbnRUb3Bcblx0XHRcdH07
XG5cdFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAw
fTtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRpb247XG5cblx0XHR3aGlsZSAo
ZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVu
dC5vZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50Lm9mZnNldFRvcDtcblxu
XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRcdH1cblxuXHRcdHJldHVy
biBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24ocmVsYXRpdmUpe1xu
XHRcdHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxcblx0XHRcdHNjcm9sbCA9IHRoaXMu
Z2V0U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtcblx0XHRcdHg6IG9mZnNldC54IC0g
c2Nyb2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9sbC55XG5cdFx0fTtcblxuXHRcdGlm
IChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChyZWxhdGl2ZSkpKXtcblx0XHRc
dHZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9zaXRpb24oKTtcblx0XHRcdHJl
dHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24ueCAtIGxlZnRCb3JkZXIocmVs
YXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlvbi55IC0gdG9wQm9yZGVyKHJl
bGF0aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRDb29y
ZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJu
IHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0XHR2YXIgcG9zaXRpb24gPSB0
aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xu
XHRcdHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi54LFxuXHRcdFx0dG9wOiBwb3Np
dGlvbi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRcdGhlaWdodDogc2l6ZS55XG5cdFx0
fTtcblx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0aDtcblx0XHRvYmouYm90dG9t
ID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRjb21w
dXRlUG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxlZnQ6IG9i
ai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0JyksXG5cdFx0XHR0b3A6IG9iai55
IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxuXHRcdH07XG5cdH0sXG5cblx0c2V0
UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMu
Y29tcHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xuXG5cbltEb2N1bWVudCwgV2luZG93
XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZh
ciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDogZG9jLmNsaWVu
dFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCksIGRvYyA9IGdldENvbXBhdEVs
ZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFnZVhPZmZzZXQgfHwgZG9jLnNjcm9s
bExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wfTtcblx0fSxcblxuXHRn
ZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50
KHRoaXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCksXG5cdFx0XHRib2R5ID0gdGhpcy5n
ZXREb2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6IE1hdGgubWF4KGRvYy5zY3JvbGxX
aWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRoLm1heChkb2Muc2Nyb2xsSGVp
Z2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHR9LFxuXG5cdGdldENvb3Jk
aW5hdGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0
cmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6ZS55LCByaWdodDogc2l6ZS54LCBo
ZWlnaHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1cblxufSk7XG5cbi8vIHByaXZhdGUg
bWV0aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50LmdldENvbXB1dGVkU3R5bGU7XG5c
bmZ1bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxlKXtcblx0cmV0dXJuIHN0eWxlU3Ry
aW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59XG5cblxuXG5mdW5jdGlvbiB0b3BC
b3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLXRv
cC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1cm4g
c3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRoJyk7XG59XG5cbmZ1bmN0aW9u
IGlzQm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJvZHl8aHRtbCkkL2kpLnRlc3QoZWxl
bWVudC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGF0RWxlbWVudChlbGVtZW50KXtc
blx0dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtcblx0cmV0dXJuICghZG9jLmNvbXBh
dE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnKSA/IGRvYy5odG1sIDogZG9j
LmJvZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxlbWVudC5hbGlhcyh7cG9zaXRpb246
ICdzZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5cbltXaW5kb3csIERvY3VtZW50LCBF
bGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRIZWlnaHQ6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0sXG5cblx0Z2V0V2lkdGg6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0U2Nyb2xs
VG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLnk7XG5cdH0sXG5c
blx0Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGwo
KS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRnZXRTY3JvbGxXaWR0aDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueDtcblx0fSxcblxuXHRnZXRU
b3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS55O1xuXHR9LFxu
XG5cdGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS54
O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4XG5cbmRlc2NyaXB0aW9uOiBDb250
YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJlIGV4dGVuZGVkIGJ5IGFsbCBvdGhl
ciBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6
IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV1cblxucHJvdmlkZXM6IEZ4
XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBGeCA9IHRoaXMuRnggPSBuZXcgQ2xh
c3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVu
YWJsZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0b25TdGFydDogbmlsLFxuXHRcdG9u
Q2FuY2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxuXHRcdCovXG5cdFx0ZnBzOiA2MCxc
blx0XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAwLFxuXHRcdGZyYW1lczogbnVsbCxc
blx0XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2lnbm9yZSdcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnN1YmplY3QgPSB0aGlzLnN1Ympl
Y3QgfHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0Z2V0
VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gZnVuY3Rpb24ocCl7XG5cdFx0XHRy
ZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAvIDI7XG5cdFx0fTtcblx0fSxcblxu
XHRzdGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKXtc
blx0XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxsKSA/IChub3cgLSB0aGlzLnRpbWUp
IDogMCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRlcnZhbDtcblx0XHRcdHRoaXMudGlt
ZSA9IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVzO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHR0aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1l
cyl7XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRpb24odGhpcy5mcmFtZSAvIHRoaXMu
ZnJhbWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sIHRoaXMudG8s
IGRlbHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJhbWUgPSB0aGlzLmZyYW1lcztc
blx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sIHRoaXMudG8sIDEpKTtcblx0
XHRcdHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5c
dFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVs
dGEpe1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBkZWx0YSk7XG5cdH0sXG5cblx0
Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlzUnVubmluZygpKSByZXR1cm4gdHJ1
ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6
IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNo
YWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihmcm9tLCB0
byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dGhp
cy5mcm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5cdFx0dGhpcy5mcmFtZSA9ICh0aGlz
Lm9wdGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRc
dHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbigpO1xuXHRcdHZhciBmcmFtZXMg
PSB0aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9wdGlvbnMuZnBzLCBkdXJhdGlvbiA9
IHRoaXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1cmF0aW9uID0gRnguRHVyYXRpb25z
W2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRcdHRoaXMuZnJhbWVJbnRlcnZhbCA9
IDEwMDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFtZXMgfHwgTWF0aC5yb3VuZCh0aGlz
LmR1cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0XHRpZiAodGhpcy5nZXRUaGVuYWJs
ZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUodGhpcy5z
dWJqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3N0YXJ0JywgdGhpcy5zdWJqZWN0
KTtcblx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJhbWVzID09IHRoaXMuZnJhbWUpe1xu
XHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0
XHRpZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2ZW50KCdjaGFpbkNvbXBsZXRlJywg
dGhpcy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdz
dG9wJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRcdHRoaXMucmVzb2x2ZSh0aGlzLnN1
YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVu
bmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2Fs
bCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRoaXMuZnJhbWUgPSB0aGlzLmZyYW1l
cztcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlzLnN1YmplY3QpLmNsZWFyQ2hh
aW4oKTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVu
bmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2Fs
bCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUGF1c2VkKCkpIHB1c2hJ
bnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgbGlzdCA9IGluc3RhbmNl
c1t0aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlzdCAmJiBsaXN0LmNvbnRhaW5zKHRo
aXMpO1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5m
cmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmcoKTtcblx0fVxuXG59KTtcblxu
RnguY29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdHJldHVybiAodG8gLSBm
cm9tKSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0aW9ucyA9IHsnc2hvcnQnOiAyNTAs
ICdub3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8vIGdsb2JhbCB0aW1lcnNcblxudmFy
IGluc3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFyIGxvb3AgPSBmdW5jdGlvbigpe1xu
XHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoOyBpLS07
KXtcblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRcdGlmIChpbnN0YW5jZSkgaW5zdGFu
Y2Uuc3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaEluc3RhbmNlID0gZnVuY3Rpb24oZnBz
KXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAoaW5zdGFuY2VzW2Zwc10gPSBbXSk7
XG5cdGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNbZnBzXSkgdGltZXJzW2Zwc10gPSBs
b29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwgbGlzdCk7XG59O1xuXG52YXIg
cHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBz
XTtcblx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhpcyk7XG5cdFx0aWYgKCFsaXN0Lmxl
bmd0aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUgaW5zdGFuY2VzW2Zwc107XG5cdFx0
XHR0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zwc10pO1xuXHRcdH1cblx0fVxu
fTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5DU1NcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5IEZ4LlR3ZWVuLCBGeC5Nb3Jw
aCwgRnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJl
czogW0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogRnguQ1NTXG5cbi4uLlxuKi9cblxu
RnguQ1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeCxcblxuXHQvL3ByZXBhcmVzIHRo
ZSBiYXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTogZnVuY3Rpb24oZWxlbWVudCwgcHJv
cGVydHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXkuY29udmVydCh2YWx1ZXMpO1xuXHRc
dHZhciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sxXTtcblx0XHRpZiAodG8gPT0gbnVs
bCl7XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0gZWxlbWVudC5nZXRTdHlsZShwcm9w
ZXJ0eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51bml0O1xuXHRcdFx0Ly8gYWRh
cHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIvZngvYmxvYi9tYXN0ZXIvZngu
anMjTDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBlb2YgZnJvbSA9PSAnc3RyaW5n
JyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAmJiBwYXJzZUZsb2F0KGZyb20p
ICE9IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0byArIHVuaXQpO1xu
XHRcdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xu
XHRcdFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExlZnQgb3IgcGl4ZWxXaWR0aFxu
XHRcdFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xuXHRcdFx0XHRcdHZhbHVlID0gZWxl
bWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxDYXNlKCldO1xuXHRcdFx0XHRc
dGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8vIGFkYXB0ZWQgZnJvbSBEZWFuIEVk
d2FyZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8yNy8xOC41NC4xNS8j
Y29tbWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0ID0gZWxlbWVudC5zdHlsZS5sZWZ0
O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gdG8gKyB1bml0O1xuXHRcdFx0XHRc
dFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtcblx0XHRcdFx0XHRcdGVsZW1lbnQu
c3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZyb20g
PSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkgKiAocGFyc2VGbG9hdChmcm9t
KSB8fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgZnJvbSArIHVuaXQp
O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206IHRoaXMucGFyc2UoZnJvbSksIHRv
OiB0aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJzZXMgYSB2YWx1ZSBpbnRvIGFuIGFy
cmF5XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YWx1ZSA9IEZ1bmN0aW9uLmNv
bnZlcnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSA/
IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVlKTtcblx0XHRyZXR1cm4gdmFs
dWUubWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBTdHJpbmcodmFsKTtcblx0XHRcdHZh
ciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2goRnguQ1NTLlBhcnNlcnMsIGZ1bmN0
aW9uKHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgcGFy
c2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlmIChwYXJzZWQgfHwgcGFyc2VkID09
PSAwKSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6IHBhcnNlcn07XG5cdFx0XHR9KTtc
blx0XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWwsIHBhcnNlcjogRnguQ1NTLlBhcnNl
cnMuU3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9KTtcblx0fSxcblxuXHQvL2Nv
bXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0cywgdXNpbmcgdGhlaXIgcGFy
c2Vycy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZhciBj
b21wdXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxlbmd0aCwgdG8ubGVuZ3RoKSkudGlt
ZXMoZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNoKHt2YWx1ZTogZnJvbVtpXS5wYXJz
ZXIuY29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1ZSwgZGVsdGEpLCBwYXJzZXI6IGZy
b21baV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0ZWQuJGZhbWlseSA9IEZ1bmN0aW9u
LmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVybiBjb21wdXRlZDtcblx0fSxcblxu
XHQvL3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxuXHRzZXJ2ZTogZnVuY3Rpb24odmFs
dWUsIHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdmeDpjc3M6dmFsdWUnKSB2YWx1
ZSA9IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1cm5lZCA9IFtdO1xuXHRcdHZhbHVl
LmVhY2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVkID0gcmV0dXJuZWQuY29uY2F0KGJp
dC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJl
dHVybmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hhbmdlIHRvIGFuIGVsZW1lbnRcblxu
XHRyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgdW5pdCl7XG5cdFx0
ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2YWx1ZSwgdW5pdCkpO1xuXHR9
LFxuXG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNzcyB0byBmaW5kIHRoZSB2YWx1ZXMg
Zm9yIGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKHNlbGVjdG9yKXtcblx0XHRpZiAo
RnguQ1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl07XG5c
dFx0dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdFeHAoJ14nICsgc2VsZWN0b3Iu
ZXNjYXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNlYXJjaFN0eWxlcyA9IGZ1bmN0aW9u
KHJ1bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1bmN0aW9uKHJ1bGUpe1xuXHRcdFx0
XHRpZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNoU3R5bGVzKHJ1bGUucnVsZXMgfHwg
cnVsZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlm
ICghcnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgc2VsZWN0b3JUZXh0ID0gKHJ1bGUu
c2VsZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJlcGxhY2UoL15cXHcrLywgZnVuY3Rp
b24obSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSkgOiBu
dWxsO1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2VsZWN0b3JUZXN0LnRlc3Qoc2Vs
ZWN0b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3QuZWFjaChFbGVtZW50LlN0eWxlcywg
ZnVuY3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGVbc3R5bGVd
IHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47XG5cdFx0XHRcdFx0dmFsdWUg
PSBTdHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0XHRcdHRvW3N0eWxlXSA9ICgoL15y
Z2IvKS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgpIDogdmFsdWU7XG5cdFx0XHRcdH0p
O1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVhY2goZG9jdW1lbnQuc3R5bGVTaGVl
dHMsIGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVmID0gc2hlZXQuaHJlZjtcblx0XHRc
dGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAmJiBocmVmLmluZGV4T2YoZG9j
dW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0dmFyIHJ1bGVzID0gc2hlZXQucnVs
ZXMgfHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hTdHlsZXMocnVsZXMpO1xuXHRcdH0p
O1xuXHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdID0gdG87XG5cdH1cblxufSk7XG5c
bkZ4LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2VycyA9IHtcblxuXHRDb2xvcjoge1xu
XHRcdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubWF0Y2goL14jWzAt
OWEtZl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1JnYih0cnVlKTtcblx0XHRcdHJldHVy
biAoKHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMqKFxcZCspLFxccyooXFxkKykvKSkp
ID8gW3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDogZmFsc2U7XG5cdFx0fSxcblx0XHRj
b21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdFx0cmV0dXJuIGZyb20ubWFw
KGZ1bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoRnguY29tcHV0
ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0c2VydmU6
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZS5tYXAoTnVtYmVyKTtcblx0XHR9
XG5cdH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBhcnNlRmxvYXQsXG5cdFx0Y29tcHV0
ZTogRnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xuXHRcdFx0
cmV0dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVlO1xuXHRcdH1cblx0fSxcblxuXHRT
dHJpbmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVydChmYWxzZSksXG5cdFx0Y29tcHV0
ZTogZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVybiBvbmU7XG5cdFx0fSxcblx0XHRz
ZXJ2ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9XG5cdH1cblxu
fTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhcblxuZGVzY3JpcHRpb246IEZvcm1l
cmx5IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55IG51bWJlciBvZiBDU1MgcHJv
cGVydGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmplY3Qgb2YgcnVsZXMsIG9yIENTUyBi
YXNlZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBoXG5cbi4uLlxuKi9cblxuRnguTW9y
cGggPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBm
dW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1Ympl
Y3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0
fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHR5cGVvZiBub3cgPT0gJ3N0cmlu
ZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9yICh2YXIgcCBpbiBub3cpIHRoaXMu
cmVuZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRh
KXtcblx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIgcCBpbiBmcm9tKSBub3dbcF0gPSB0
aGlzLnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xuXHRcdHJldHVybiBub3c7XG5cdH0s
XG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xuXHRcdGlmICghdGhpcy5jaGVjayhw
cm9wZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09ICdz
dHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVydGllcyk7XG5cdFx0dmFyIGZy
b20gPSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIHByb3BlcnRpZXMpe1xuXHRcdFx0
dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsIHAsIHByb3BlcnRpZXNbcF0p
O1xuXHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRcdFx0dG9bcF0gPSBwYXJzZWQudG87
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9tLCB0byk7XG5cdH1cblxufSk7XG5c
bkVsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMp
e1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBtb3Jw
aCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYgKCFtb3JwaCl7XG5cdFx0XHRtb3Jw
aCA9IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMuc3Rv
cmUoJ21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9ycGg7XG5cdH1cblxufTtc
blxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBmdW5jdGlvbihwcm9wcyl7XG5cdFx0
dGhpcy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRpb25zXG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9ucyB0byBiZSB1c2VkIHdpdGggYW55
IG9mIHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3Jl
ZGl0czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQZW5uZXIsIDxodHRwOi8vd3d3
LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFuZCBvcHRpbWl6ZWQgdG8gYmUg
dXNlZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhcblxucHJvdmlkZXM6IEZ4LlRyYW5z
aXRpb25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtcblxuXHRnZXRUcmFuc2l0aW9uOiBm
dW5jdGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0aW9ucy50cmFuc2l0aW9uIHx8IEZ4
LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlmICh0eXBlb2YgdHJhbnMgPT0gJ3N0
cmluZycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxpdCgnOicpO1xuXHRcdFx0dHJhbnMg
PSBGeC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJhbnNbZGF0YVswXV0gfHwgdHJhbnNb
ZGF0YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRhdGFbMV0pIHRyYW5zID0gdHJhbnNb
J2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsyXSA/IGRhdGFbMl0uY2FwaXRh
bGl6ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5zO1xuXHR9XG5cbn0pO1xuXG5G
eC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFyYW1zKXtcblx0cGFyYW1zID0g
QXJyYXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUluID0gZnVuY3Rpb24ocG9zKXtcblx0
XHRyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5cdH07XG5cdHJldHVybiBPYmplY3Qu
YXBwZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUluLFxuXHRcdGVhc2VPdXQ6IGZ1bmN0
aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRpb24oMSAtIHBvcywgcGFyYW1zKTtc
blx0XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVybiAocG9z
IDw9IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1zKSA6ICgyIC0gdHJhbnNpdGlvbigy
ICogKDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1cblx0fSk7XG59O1xuXG5GeC5UcmFu
c2l0aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdHJldHVybiB6ZXJv
O1xuXHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQgPSBmdW5jdGlvbih0cmFu
c2l0aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJhbnNpdGlvbnMpIEZ4LlRyYW5z
aXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24odHJhbnNpdGlvbnNbdHJhbnNp
dGlvbl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtcblxuXHRQb3c6IGZ1bmN0aW9u
KHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhbMF0gfHwgNik7XG5cdH0sXG5c
blx0RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDggKiAocCAtIDEp
KTtcblx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGguc2lu
KE1hdGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJu
IDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9LFxuXG5cdEJhY2s6IGZ1bmN0aW9u
KHAsIHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7XG5cdFx0cmV0dXJuIE1hdGgucG93
KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5cblx0Qm91bmNlOiBmdW5jdGlvbihw
KXtcblx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9IDAsIGIgPSAxOyAxOyBhICs9IGIs
IGIgLz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBhKSAvIDExKXtcblx0XHRcdFx0dmFs
dWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEgKiBwKSAvIDQsIDIpO1xuXHRc
dFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXG5c
dEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdygyLCAxMCAqIC0t
cCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYgeFswXSB8fCAxKSAvIDMpO1xu
XHR9XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVhcnQnLCAnUXVpbnQnXS5lYWNoKGZ1
bmN0aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5l
dyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCBpICsg
Mik7XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHdlZW5cblxuZGVzY3JpcHRp
b246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgQ1NTIHByb3Bl
cnR5IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVx
dWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVuLCBFbGVtZW50LmZhZGUsIEVsZW1l
bnQuaGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVuID0gbmV3IENsYXNzKHtcblxuXHRF
eHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9u
cyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVu
dCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihw
cm9wZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKXtcblx0XHRcdG5v
dyA9IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlzLnByb3BlcnR5IHx8IHRoaXMub3B0
aW9ucy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LCBwcm9w
ZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNo
ZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHZhciBhcmdzID0gQXJy
YXkuZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJvcGVydHkgPSB0aGlzLm9wdGlvbnMu
cHJvcGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUo
dGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtcblx0XHRyZXR1cm4gdGhpcy5wYXJl
bnQocGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVy
dGllcy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuZ2V0
KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciB0d2VlbiA9IHRoaXMucmV0cmll
dmUoJ3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0XHR0d2VlbiA9IG5ldyBGeC5Ud2Vl
bih0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3R3ZWVuJywgdHdl
ZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBs
ZW1lbnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0eSwgZnJvbSwgdG8pe1xuXHRcdHRo
aXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0byk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZmFkZSA9IHRoaXMuZ2V0
KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5hcHBlbmQoYXJndW1lbnRzKSwg
dG9nZ2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFyZ3NbMV0gPSAndG9nZ2xlJztcblx0
XHRzd2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4nOiBtZXRob2QgPSAnc3RhcnQnOyBh
cmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQnOiBtZXRob2QgPSAnc3RhcnQnOyBh
cmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93JzogbWV0aG9kID0gJ3NldCc7IGFy
Z3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUnOiBtZXRob2QgPSAnc2V0JzsgYXJn
c1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJzpcblx0XHRcdFx0dmFyIGZsYWcg
PSB0aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdldFN0eWxlKCdvcGFjaXR5JykgPT0g
MSk7XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0XHRcdGFyZ3NbMV0gPSBmbGFnID8g
MCA6IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6ZmxhZycsICFmbGFnKTtcblx0XHRcdFx0
dG9nZ2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OiBtZXRob2QgPSAn
c3RhcnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhpcy5lbGltaW5hdGUoJ2ZhZGU6Zmxh
ZycpO1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBhcmdzKTtcblx0XHR2YXIgdG8gPSBh
cmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0aG9kID09ICdzZXQnKXtcblx0XHRc
dHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAwID8gJ2hpZGRlbicgOiAndmlzaWJs
ZScpO1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0XHRpZiAoZmFkZS4kY2hhaW4ubGVu
Z3RoKXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHRoaXMuZWxl
bWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0dGhpcy5j
YWxsQ2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNl
dFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xu
XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRpZiAodGhpcy5lbGVtZW50Lmdl
dFN0eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0eWxl
KCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0aGlzLmNhbGxDaGFpbigpO1xuXHRc
dFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGlnaGxpZ2h0OiBm
dW5jdGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7XG5cdFx0XHRlbmQgPSB0aGlzLnJl
dHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0eWxlKCdiYWNrZ3JvdW5kLWNv
bG9yJykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNwYXJlbnQnKSA/ICcjZmZmJyA6IGVu
ZDtcblx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQoJ3R3ZWVuJyk7XG5cdFx0dHdlZW4u
c3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2ZmZmY4OCcsIGVuZCkuY2hhaW4o
ZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCB0aGlz
LnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5cdFx0XHR0d2Vlbi5jYWxsQ2hhaW4o
KTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRpb246IFBvd2VyZnVsIGFsbCBwdXJw
b3NlIFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVlc3QuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwgRWxlbWVudCwgQ2hhaW4sIEV2ZW50
cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0
XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbXB0eSA9IGZ1bmN0aW9uKCl7fSxc
blx0cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBuZXcgQnJvd3Nlci5SZXF1ZXN0
KTtcblxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxl
bWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5cblx0b3B0
aW9uczogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigpe30sXG5cdFx0b25Mb2Fkc3RhcnQ6
IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9ncmVzczogZnVuY3Rpb24oZXZlbnQs
IHhocil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigpe30sXG5cdFx0b25DYW5jZWw6IGZ1
bmN0aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCwgcmVzcG9u
c2VYTUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4aHIpe30sXG5cdFx0b25FeGNlcHRp
b246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxuXHRcdG9uVGltZW91dDogZnVuY3Rp
b24oKXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3JkOiAnJyxcblx0XHR3aXRoQ3JlZGVu
dGlhbHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRkYXRhOiAnJyxcblx0XHRoZWFkZXJz
OiB7XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXG5cdFx0XHQn
QWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRl
eHQveG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRmb3JtYXQ6IGZhbHNl
LFxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdpZ25vcmUnLFxuXHRcdGlzU3VjY2Vz
czogbnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0dXJsRW5jb2RlZDogdHJ1ZSxcblx0
XHRlbmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0czogZmFsc2UsXG5cdFx0ZXZhbFJl
c3BvbnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRcdG5vQ2FjaGU6IGZhbHNlXG5cdH0s
XG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy54aHIgPSBuZXcg
QnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHRo
aXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuXHR9LFxuXG5cdG9uU3RhdGVDaGFu
Z2U6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmICh4aHIucmVh
ZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjtcblx0XHR0aGlzLnJ1bm5pbmcg
PSBmYWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0RnVuY3Rpb24uYXR0ZW1wdChmdW5j
dGlvbigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7XG5cdFx0XHR0aGlzLnN0YXR1
cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7XG5cdFx0fS5iaW5kKHRoaXMpKTtc
blx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3Vw
cG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHRpZiAo
dGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxl
dGUgdGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJlc3BvbnNlID0ge3RleHQ6IHRoaXMu
eGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5yZXNwb25zZVhNTH07XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnN0YXR1cykpXG5cdFx0
XHR0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0aGlzLnJlc3BvbnNlLnhtbCk7XG5c
dFx0ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0sXG5cblx0aXNTdWNjZXNzOiBmdW5j
dGlvbigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1cztcblx0XHRyZXR1cm4gKHN0YXR1
cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9LFxuXG5cdHByb2Nlc3NTY3JpcHRz
OiBmdW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZSB8fCAo
LyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRlcignQ29udGVudC10eXBlJykp
KSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJldHVybiB0ZXh0LnN0cmlwU2NyaXB0
cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9u
KHRleHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyh0ZXh0
KSwgeG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRleHQsIHhtbDogeG1sfSk7XG5cdH0s
XG5cblx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0
ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJndW1lbnRzKS5jYWxsQ2hhaW4o
KTtcblx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMub25GYWlsdXJlKCk7
XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4aHI6IHRoaXMueGhyfSk7XG5c
dH0sXG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjb21w
bGV0ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhyKTtcblx0fSxcblxuXHRsb2Fkc3Rh
cnQ6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVudCgnbG9hZHN0YXJ0JywgW2V2
ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBmdW5jdGlvbihldmVudCl7XG5c
dFx0dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxu
XG5cdHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3RpbWVvdXQnLCB0
aGlzLnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ3RpbWVvdXQnLCB4aHI6IHRoaXMu
eGhyfSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0
dGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
Z2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChm
dW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdldFJlc3BvbnNlSGVhZGVyKG5hbWUp
O1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0
aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRcdHN3aXRjaCAodGhpcy5vcHRpb25z
Lmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7
XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVu
dHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0s
XG5cblx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKG9wdGlv
bnMpKSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgPSB0aGlzLm9w
dGlvbnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xuXHRcdHRoaXMucnVubmluZyA9IHRy
dWU7XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25zKTtcblx0XHRpZiAodHlwZSA9PSAn
c3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9IHtkYXRhOiBvcHRpb25zfTtc
blxuXHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0b3B0aW9ucyA9IE9iamVjdC5hcHBl
bmQoe2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1ldGhvZDogb2xkLm1ldGhvZH0sIG9w
dGlvbnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCB1cmwgPSBTdHJpbmcob3B0aW9u
cy51cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0c3dp
dGNoICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxlbWVudCc6IGRhdGEgPSBkb2N1bWVu
dC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnb2JqZWN0Jzog
Y2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTtcblx0XHR9XG5c
blx0XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0XHR2YXIgZm9ybWF0ID0gJ2Zvcm1h
dD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBmb3JtYXQg
KyAnJicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW11
bGF0aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIg
X21ldGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0XHRkYXRhID0gKGRhdGEpID8gX21l
dGhvZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0bWV0aG9kID0gJ3Bvc3QnO1xuXHRc
dH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAmJiBbJ3Bvc3QnLCAncHV0J10u
Y29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2RpbmcgPSAodGhpcy5vcHRpb25zLmVu
Y29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5lbmNvZGluZyA6ICcnO1xuXHRc
dFx0dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5cdFx0aWYgKCF1cmwpIHVybCA9IGRv
Y3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFyIHRyaW1Qb3NpdGlvbiA9IHVybC5s
YXN0SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRpb24gPiAtMSAmJiAodHJpbVBvc2l0
aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJsLnN1YnN0cigwLCB0cmltUG9z
aXRpb24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NhY2hlKVxuXHRcdFx0dXJsICs9ICh1
cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgU3RyaW5nLnVuaXF1ZUlEKCk7XG5c
blx0XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1ldGhvZCA9PSAnZGVsZXRlJykp
e1xuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgZGF0
YTtcblx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZhciB4aHIgPSB0aGlzLnhocjtc
blx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHhoci5vbmxvYWRzdGFydCA9IHRoaXMu
bG9hZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25wcm9ncmVzcyA9IHRoaXMucHJvZ3Jl
c3MuYmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3BlbihtZXRob2QudG9VcHBlckNhc2Uo
KSwgdXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0aW9ucy51c2VyLCB0aGlzLm9wdGlv
bnMucGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25zLndpdGhDcmVkZW50aWFscykgJiYg
J3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcblxu
XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlz
KTtcblxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVuY3Rpb24odmFsdWUsIGtleSl7
XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbHVlKTtc
blx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnZXhjZXB0aW9uJywg
W2tleSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2V4Y2VwdGlvbics
IHhocjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtcblxuXHRc
dGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMu
cmVzZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZl
bnQoJ3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtcblx0XHRpZiAoIXRoaXMub3B0aW9u
cy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0ZWxzZSBpZiAodGhpcy5vcHRpb25z
LnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVsYXkodGhpcy5vcHRpb25zLnRp
bWVvdXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDogZnVuY3Rp
b24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5ydW5u
aW5nID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdHhoci5hYm9ydCgpO1xu
XHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0
XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdl
ID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIu
b25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJlcXVlc3Qo
KTtcblx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNv
bjogJ2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bnZhciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0JywgJ3B1dCcsICdkZWxldGUnLCAncGF0
Y2gnLCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVMRVRFJywgJ1BBVENIJywgJ0hF
QUQnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhvZHNbbWV0aG9kXSA9IGZ1bmN0aW9u
KGRhdGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRtZXRob2Q6IG1ldGhvZFxuXHRcdH07
XG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBkYXRhO1xuXHRcdHJldHVybiB0
aGlzLnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1ZXN0LmltcGxlbWVudChtZXRob2Rz
KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRp
b25zKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJykuY2FuY2VsKCk7XG5cdFx0c2Vu
ZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0cmlldmUoJ3NlbmQnKTtcblx0XHRp
ZiAoIXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0KHtcblx0XHRcdFx0ZGF0YTogdGhp
cywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21ldGhvZCcpIHx8ICdwb3N0Jywg
dXJsOiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zdG9yZSgnc2Vu
ZCcsIHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtcblx0fVxuXG59O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJsKXtcblx0XHR2YXIgc2VuZGVyID0g
dGhpcy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7ZGF0YTogdGhpcywgdXJsOiB1cmwg
fHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5IVE1MXG5cbmRlc2NyaXB0aW9uOiBF
eHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZv
ciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0XVxuXG5wcm92aWRlczogUmVx
dWVzdC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1MID0gbmV3IENsYXNzKHtcblxuXHRF
eHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHR1cGRhdGU6IGZhbHNlLFxuXHRc
dGFwcGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRydWUsXG5cdFx0ZmlsdGVyOiBmYWxz
ZSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0ZXh0L2h0bWwsIGFwcGxpY2F0aW9u
L3htbCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24o
dGV4dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIHJlc3BvbnNlID0gdGhpcy5y
ZXNwb25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0cmlwU2NyaXB0cyhmdW5jdGlv
bihzY3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlwdCA9IHNjcmlwdDtcblx0XHR9KTtc
blxuXHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2goLzxib2R5W14+XSo+KFtcXHNc
XFNdKj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkgcmVzcG9uc2UuaHRtbCA9IG1hdGNo
WzFdO1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2RpdicpLnNldCgnaHRtbCcsIHJlc3Bv
bnNlLmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRlbXAuY2hpbGROb2Rlcztcblx0XHRy
ZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMob3B0aW9ucy5maWx0ZXIgfHwgJyon
KTtcblxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UudHJlZSA9IHJlc3BvbnNlLmVs
ZW1lbnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5cdFx0XHR2YXIgdXBkYXRlID0gZG9j
dW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0
ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7XG5cdFx0XHRlbHNlIHVwZGF0ZS5z
ZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVsc2UgaWYgKG9wdGlvbnMuYXBwZW5k
KXtcblx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChvcHRpb25zLmFwcGVuZCk7XG5cdFx0
XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1lbnRzLnJldmVyc2UoKS5pbmplY3Qo
YXBwZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRlbXAuZ2V0Q2hpbGRyZW4oKSk7XG5c
dFx0fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93c2VyLmV4ZWMocmVzcG9uc2Uu
amF2YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2VzcyhyZXNwb25zZS50cmVlLCByZXNwb25z
ZS5lbGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2UuamF2YXNjcmlwdCk7XG5cdFx0dGhp
cy5yZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVtZW50czogcmVzcG9uc2UuZWxlbWVu
dHMsIGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6IHJlc3BvbnNlLmphdmFzY3JpcHR9
KTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmxvYWQgPSB7XG5cblx0c2V0OiBm
dW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMuZ2V0KCdsb2FkJykuY2FuY2Vs
KCk7XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMucmV0cmlldmUoJ2xv
YWQnKTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9IG5ldyBSZXF1ZXN0LkhUTUwoe2Rh
dGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMsIG1ldGhvZDogJ2dldCd9KTtc
blx0XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0XHR9XG5cdFx0cmV0dXJuIGxvYWQ7
XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGxvYWQ6IGZ1bmN0aW9uKCl7
XG5cdFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5LmxpbmsoYXJndW1lbnRzLCB7ZGF0YTog
VHlwZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05cblxuZGVzY3JpcHRpb246IEpTT04g
ZW5jb2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cblNl
ZUFsc286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVxdWlyZXM6IFtBcnJheSwgU3RyaW5n
LCBOdW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNPTlxuXG4uLi5cbiovXG5cbmlmICh0
eXBlb2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09OID0ge307XG5cblxuXG4oZnVuY3Rp
b24oKXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxcYicsICdcXHQnOiAnXFxcXHQnLCAn
XFxuJzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHInOiAnXFxcXHInLCAnXCInIDogJ1xc
XFxcIicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBlc2NhcGUgPSBmdW5jdGlvbihjaHIp
e1xuXHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScgKyAoJzAwMDAnICsgY2hyLmNoYXJD
b2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xuXG5KU09OLnZhbGlkYXRlID0g
ZnVuY3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcXFwoPzpbXCJc
XFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS5cblx0XHRcdFx0XHRyZXBsYWNl
KC9cIlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51bGx8LT9cXGQrKD86XFwuXFxkKik/
KD86W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRcdFx0XHRyZXBsYWNlKC8oPzpefDp8
LCkoPzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAoL15bXFxdLDp7fVxcc10qJC8pLnRl
c3Qoc3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNPTi5zdHJpbmdpZnkgPyBmdW5jdGlv
bihvYmope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcbn0gOiBmdW5jdGlvbihvYmop
e1xuXHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50b0pTT04oKTtcblxuXHRzd2l0
Y2ggKHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0cmV0dXJuICdcIicg
KyBvYmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9nLCBlc2NhcGUpICsgJ1wiJztcblx0
XHRjYXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsgb2JqLm1hcChKU09OLmVuY29kZSku
Y2xlYW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNoJzpcblx0XHRcdHZh
ciBzdHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtl
eSl7XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFsdWUpO1xuXHRcdFx0XHRpZiAo
anNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6JyArIGpzb24pO1xuXHRcdFx0
fSk7XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nO1xuXHRcdGNhc2UgJ251bWJlcic6
IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5cdFx0Y2FzZSAnbnVsbCc6IHJldHVy
biAnbnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbkpTT04uc2VjdXJlID0gdHJ1
ZTtcblxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmluZywgc2VjdXJlKXtcblx0aWYgKCFz
dHJpbmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuXG5cdGlm
IChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7XG5cdGlmIChzZWN1cmUpe1xu
XHRcdGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShzdHJpbmcpO1xuXHRcdGlmICgh
SlNPTi52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJyb3IoJ0pTT04gY291bGQgbm90IGRl
Y29kZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5kIHRoZSB2YWx1ZSBpcyBub3Qg
c2VjdXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygnICsgc3RyaW5nICsgJyknKTtcbn07
XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5KU09OXG5cbmRlc2NyaXB0aW9u
OiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2Rz
IGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRhLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBKU09OXVxuXG5wcm92aWRlczogUmVx
dWVzdC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09OID0gbmV3IENsYXNzKHtcblxuXHRF
eHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQvKm9uRXJyb3I6IGZ1bmN0aW9u
KHRleHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVlXG5cdH0sXG5cblx0aW5pdGlhbGl6
ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdFx0T2Jq
ZWN0LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdBY2NlcHQnOiAnYXBwbGljYXRpb24v
anNvbicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5cdFx0fSk7XG5cdH0sXG5cblx0c3Vj
Y2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247XG5cdFx0dHJ5IHtcblx0XHRcdGpz
b24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0ZXh0LCB0aGlzLm9wdGlvbnMu
c2VjdXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0XHR0aGlzLmZpcmVFdmVudCgnZXJy
b3InLCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGpzb24g
PT0gbnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhp
cy5vblN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlzLnJlc29sdmUoe2pzb246IGpzb24s
IHRleHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogQ29v
a2llXG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcsIHJlYWRpbmcsIGFuZCBkZWxl
dGluZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5j
cmVkaXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkgUGV0ZXItUGF1bCBLb2NoICho
dHRwOi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczogW09wdGlvbnMsIEJyb3dzZXJdXG5c
bnByb3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIgQ29va2llID0gbmV3IENsYXNzKHtc
blxuXHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlvbnM6IHtcblx0XHRwYXRoOiAnLycs
XG5cdFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogZmFsc2UsXG5cdFx0c2VjdXJlOiBm
YWxzZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0ZW5jb2RlOiB0cnVlLFxuXHRcdGh0
dHBPbmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGtleSwgb3B0aW9u
cyl7XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xu
XHR9LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5l
bmNvZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRpZiAodGhpcy5v
cHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0aGlzLm9wdGlvbnMuZG9tYWlu
O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUgKz0gJzsgcGF0aD0nICsgdGhpcy5v
cHRpb25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kdXJhdGlvbil7XG5cdFx0XHR2YXIg
ZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyB0
aGlzLm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcblx0XHRcdHZhbHVl
ICs9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmcoKTtcblx0XHR9XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3VyZSc7XG5cdFx0aWYgKHRoaXMub3B0
aW9ucy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHknO1xuXHRcdHRoaXMub3B0aW9ucy5k
b2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVlO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHZhbHVlID0gdGhpcy5vcHRp
b25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxcXFxzKicgKyB0aGlzLmtleS5lc2Nh
cGVSZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVybiAodmFsdWUpID8gZGVjb2RlVVJJ
Q29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24o
KXtcblx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3QubWVyZ2Uoe30sIHRoaXMub3B0aW9u
cywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIG9wdGlvbnMpe1xuXHRy
ZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZhbHVlKTtcbn07XG5cbkNvb2tp
ZS5yZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5KS5yZWFkKCk7
XG59O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5cdHJldHVy
biBuZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgpO1xufTtcblxuLypcbi0tLVxuXG5u
YW1lOiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGN1c3RvbSBldmVudCBk
b21yZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQnJv
d3NlciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtET01SZWFkeSwgRG9t
UmVhZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQpe1xuXG52YXIg
cmVhZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5cdHNob3VsZFBvbGwsXG5cdHRpbWVy
LFxuXHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG52YXIg
ZG9tcmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIXJl
YWR5KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1ZTtcblx0XHRkb2N1bWVudC5y
ZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KS5yZW1vdmVMaXN0ZW5l
cigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRkb2N1bWVudC5maXJlRXZlbnQoJ2Rv
bXJlYWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9tcmVhZHknKTtcblx0fVxuXHQvLyBj
bGVhbnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5kb3cgPSB0ZXN0RWxlbWVudCA9IG51
bGw7XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xuXHRmb3IgKHZhciBpID0gY2hlY2tz
Lmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0XHRkb21yZWFkeSgpO1xuXHRcdHJl
dHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBwb2xsID0gZnVuY3Rp
b24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFjaGVjaygpKSB0aW1lciA9IHNl
dFRpbWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ0RPTUNvbnRl
bnRMb2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4PiovXG4vLyBkb1Njcm9sbCB0ZWNobmlx
dWUgYnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRM
b2FkZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRocm93cyB3aGVuIHRoZSBET00gaXMg
bm90IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52YXIgZG9TY3JvbGxXb3JrcyA9IGZ1
bmN0aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQuZG9TY3JvbGwoKTtcblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuLy8gSWYgZG9T
Y3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgZG9tcmVh
ZHlcbi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0RWxlbWVudC5kb1Njcm9sbCAmJiAh
ZG9TY3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9TY3JvbGxXb3Jrcyk7XG5cdHNob3Vs
ZFBvbGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlmIChkb2N1bWVudC5yZWFkeVN0YXRl
KSBjaGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3RhdGUgPSBkb2N1bWVudC5yZWFkeVN0
YXRlO1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8IHN0YXRlID09ICdjb21wbGV0ZScp
O1xufSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBkb2N1bWVudCkgZG9jdW1lbnQu
YWRkTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7XG5lbHNlIHNob3VsZFBvbGwg
PSB0cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xuXG5FbGVtZW50LkV2ZW50cy5kb21y
ZWFkeSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAocmVhZHkpIGZuLmNhbGwo
dGhpcyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0IGRvbXJlYWR5IGZpcmVzIGJlZm9y
ZSBsb2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRiYXNlOiAnbG9hZCcsXG5cdG9uQWRk
OiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0aGlzID09IHdpbmRvdykgZm4uY2Fs
bCh0aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzID09
IHdpbmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0ZGVsZXRlIEVsZW1lbnQuRXZlbnRz
LmxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xuXG4vLyBUaGlzIGlzIGJh
c2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93LmFkZEV2ZW50KCdsb2FkJywgZnVu
Y3Rpb24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59KSh3aW5kb3csIGRvY3VtZW50KTtc
biIKIAogLyoqKi8gfSksCiAvKiA0MDYgKi8KQEAgLTExMzY0MSwxMyArMTEzNjQxLDEzIEBAIG1v
ZHVsZS5leHBvcnRzID0gIi8qanNoaW50IHF1b3RtYXJrOiBmYWwKIC8qIDQxNCAqLwogLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyBsaWJz
L2pxdWVyeS9qcXVlcnkuZC50c1xuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAo
YykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsg
eW91IG1heSBub3QgdXNlXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxuTGljZW5zZSBhdCBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVEhJUyBDT0RFIElTIFBST1ZJ
REVEICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WVxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElN
SVRBVElPTiBBTlkgSU1QTElFRFxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1J
TkZSSU5HRU1FTlQuXG5cblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuYW5kIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLy8gVHlwaW5nIGZv
ciB0aGUgalF1ZXJ5IGxpYnJhcnksIHZlcnNpb24gMS4xMC54IC8gMi4wLnhcbi8vIFByb2plY3Q6
IGh0dHA6Ly9qcXVlcnkuY29tL1xuLy8gRGVmaW5pdGlvbnMgYnk6IEJvcmlzIFlhbmtvdiA8aHR0
cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292Lz4sIENocmlzdGlhbiBIb2ZmbWVpc3RlciA8aHR0
cHM6Ly9naXRodWIuY29tL2Nob2ZmbWVpc3Rlcj4sIFN0ZXZlIEZlbnRvbiwgRGl1bGxlaSBHb21l
cyA8aHR0cHM6Ly9naXRodWIuY29tL0RpdWxsZWk+LCBUYXNzIElsaW9wb3Vsb3MgPGh0dHBzOi8v
Z2l0aHViLmNvbS90YXNvaWxpPiwgSmFzb24gU3dlYXJpbmdlbiwgU2VhbiBIaWxsIDxodHRwczov
L2dpdGh1Yi5jb20vc2VhbnNraT4sIEd1dXMgR29vc3NlbnMgPGh0dHBzOi8vZ2l0aHViLmNvbS9H
dXV6PiwgS2VsbHkgU3VtbWVybGluIDxodHRwczovL2dpdGh1Yi5jb20va3N1bW1lcmxpbj4sIEJh
c2FyYXQgQWxpIFN5ZWQgPGh0dHBzOi8vZ2l0aHViLmNvbS9iYXNhcmF0PiwgTmljaG9sYXMgV29s
dmVyc29uIDxodHRwczovL2dpdGh1Yi5jb20vbndvbHZlcnNvbj4sIERlcmVrIENpY2Vyb25lIDxo
dHRwczovL2dpdGh1Yi5jb20vZGVyZWtjaWNlcm9uZT4sIEFuZHJldyBHYXNwYXIgPGh0dHBzOi8v
Z2l0aHViLmNvbS9BbmRyZXdHYXNwYXI+LCBKYW1lcyBIYXJyaXNvbiBGaXNoZXIgPGh0dHBzOi8v
Z2l0aHViLmNvbS9qYW1lc2hmaXNoZXI+LCBTZWlraWNoaSBLb25kbyA8aHR0cHM6Ly9naXRodWIu
Y29tL3NlaWtpY2hpPiwgQmVuamFtaW4gSmFja21hbiA8aHR0cHM6Ly9naXRodWIuY29tL2Jlbmph
bWluamFja21hbj4sIFBvdWwgU29yZW5zZW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9zMDkzMjk0Piwg
Sm9zaCBTdHJvYmwgPGh0dHBzOi8vZ2l0aHViLmNvbS9Kb3NoU3Ryb2JsPiwgSm9obiBSZWlsbHkg
PGh0dHBzOi8vZ2l0aHViLmNvbS9qb2hubnlyZWlsbHkvPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBz
Oi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuLypcbiAgICBJbnRl
cmZhY2UgZm9yIHRoZSBBSkFYIHNldHRpbmcgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUgQUpBWCBy
ZXF1ZXN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeUFqYXhTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAg
ICogVGhlIGNvbnRlbnQgdHlwZSBzZW50IGluIHRoZSByZXF1ZXN0IGhlYWRlciB0aGF0IHRlbGxz
IHRoZSBzZXJ2ZXIgd2hhdCBraW5kIG9mIHJlc3BvbnNlIGl0IHdpbGwgYWNjZXB0IGluIHJldHVy
bi4gSWYgdGhlIGFjY2VwdHMgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29t
bWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLlxuICAgICAq
L1xuICAgIGFjY2VwdHM/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgYWxsIHJl
cXVlc3RzIGFyZSBzZW50IGFzeW5jaHJvbm91c2x5IChpLmUuIHRoaXMgaXMgc2V0IHRvIHRydWUg
YnkgZGVmYXVsdCkuIElmIHlvdSBuZWVkIHN5bmNocm9ub3VzIHJlcXVlc3RzLCBzZXQgdGhpcyBv
cHRpb24gdG8gZmFsc2UuIENyb3NzLWRvbWFpbiByZXF1ZXN0cyBhbmQgZGF0YVR5cGU6IFwianNv
bnBcIiByZXF1ZXN0cyBkbyBub3Qgc3VwcG9ydCBzeW5jaHJvbm91cyBvcGVyYXRpb24uIE5vdGUg
dGhhdCBzeW5jaHJvbm91cyByZXF1ZXN0cyBtYXkgdGVtcG9yYXJpbHkgbG9jayB0aGUgYnJvd3Nl
ciwgZGlzYWJsaW5nIGFueSBhY3Rpb25zIHdoaWxlIHRoZSByZXF1ZXN0IGlzIGFjdGl2ZS4gQXMg
b2YgalF1ZXJ5IDEuOCwgdGhlIHVzZSBvZiBhc3luYzogZmFsc2Ugd2l0aCBqcVhIUiAoJC5EZWZl
cnJlZCkgaXMgZGVwcmVjYXRlZDsgeW91IG11c3QgdXNlIHRoZSBzdWNjZXNzL2Vycm9yL2NvbXBs
ZXRlIGNhbGxiYWNrIG9wdGlvbnMgaW5zdGVhZCBvZiB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Rz
IG9mIHRoZSBqcVhIUiBvYmplY3Qgc3VjaCBhcyBqcVhIUi5kb25lKCkgb3IgdGhlIGRlcHJlY2F0
ZWQganFYSFIuc3VjY2VzcygpLlxuICAgICAqL1xuICAgIGFzeW5jPzogYm9vbGVhbjtcbiAgICAv
KipcbiAgICAgKiBBIHByZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVz
ZWQgdG8gbW9kaWZ5IHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkg
b2JqZWN0IGJlZm9yZSBpdCBpcyBzZW50LiBVc2UgdGhpcyB0byBzZXQgY3VzdG9tIGhlYWRlcnMs
IGV0Yy4gVGhlIGpxWEhSIGFuZCBzZXR0aW5ncyBvYmplY3RzIGFyZSBwYXNzZWQgYXMgYXJndW1l
bnRzLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuIFJldHVybmluZyBmYWxzZSBpbiB0aGUgYmVmb3Jl
U2VuZCBmdW5jdGlvbiB3aWxsIGNhbmNlbCB0aGUgcmVxdWVzdC4gQXMgb2YgalF1ZXJ5IDEuNSwg
dGhlIGJlZm9yZVNlbmQgb3B0aW9uIHdpbGwgYmUgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5
cGUgb2YgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBiZWZvcmVTZW5kPyAoanFYSFI6IEpRdWVyeVhI
Uiwgc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBJ
ZiBzZXQgdG8gZmFsc2UsIGl0IHdpbGwgZm9yY2UgcmVxdWVzdGVkIHBhZ2VzIG5vdCB0byBiZSBj
YWNoZWQgYnkgdGhlIGJyb3dzZXIuIE5vdGU6IFNldHRpbmcgY2FjaGUgdG8gZmFsc2Ugd2lsbCBv
bmx5IHdvcmsgY29ycmVjdGx5IHdpdGggSEVBRCBhbmQgR0VUIHJlcXVlc3RzLiBJdCB3b3JrcyBi
eSBhcHBlbmRpbmcgXCJfPXt0aW1lc3RhbXB9XCIgdG8gdGhlIEdFVCBwYXJhbWV0ZXJzLiBUaGUg
cGFyYW1ldGVyIGlzIG5vdCBuZWVkZWQgZm9yIG90aGVyIHR5cGVzIG9mIHJlcXVlc3RzLCBleGNl
cHQgaW4gSUU4IHdoZW4gYSBQT1NUIGlzIG1hZGUgdG8gYSBVUkwgdGhhdCBoYXMgYWxyZWFkeSBi
ZWVuIHJlcXVlc3RlZCBieSBhIEdFVC5cbiAgICAgKi9cbiAgICBjYWNoZT86IGJvb2xlYW47XG4g
ICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBm
aW5pc2hlcyAoYWZ0ZXIgc3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCku
IFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0d28gYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpR
dWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBhbmQgYSBzdHJpbmcgY2F0ZWdvcml6
aW5nIHRoZSBzdGF0dXMgb2YgdGhlIHJlcXVlc3QgKFwic3VjY2Vzc1wiLCBcIm5vdG1vZGlmaWVk
XCIsIFwiZXJyb3JcIiwgXCJ0aW1lb3V0XCIsIFwiYWJvcnRcIiwgb3IgXCJwYXJzZXJlcnJvclwi
KS4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGNvbXBsZXRlIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBh
cnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4g
VGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBsZXRlPyAoanFYSFI6IEpR
dWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9i
amVjdCBvZiBzdHJpbmcvcmVndWxhci1leHByZXNzaW9uIHBhaXJzIHRoYXQgZGV0ZXJtaW5lIGhv
dyBqUXVlcnkgd2lsbCBwYXJzZSB0aGUgcmVzcG9uc2UsIGdpdmVuIGl0cyBjb250ZW50IHR5cGUu
ICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udGVudHM/OiB7IFtrZXk6IHN0
cmluZ106IGFueTsgfTtcbiAgICAvL0FjY29yZGluZyB0byBqUXVlcnkuYWpheCBzb3VyY2UgY29k
ZSwgYWpheCdzIG9wdGlvbiBhY3R1YWxseSBhbGxvd3MgY29udGVudFR5cGUgdG8gc2V0IHRvIFwi
ZmFsc2VcIlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5
VHlwZWQvaXNzdWVzLzc0MlxuICAgIC8qKlxuICAgICAqIFdoZW4gc2VuZGluZyBkYXRhIHRvIHRo
ZSBzZXJ2ZXIsIHVzZSB0aGlzIGNvbnRlbnQgdHlwZS4gRGVmYXVsdCBpcyBcImFwcGxpY2F0aW9u
L3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLCB3aGljaCBpcyBmaW5lIGZv
ciBtb3N0IGNhc2VzLiBJZiB5b3UgZXhwbGljaXRseSBwYXNzIGluIGEgY29udGVudC10eXBlIHRv
ICQuYWpheCgpLCB0aGVuIGl0IGlzIGFsd2F5cyBzZW50IHRvIHRoZSBzZXJ2ZXIgKGV2ZW4gaWYg
bm8gZGF0YSBpcyBzZW50KS4gVGhlIFczQyBYTUxIdHRwUmVxdWVzdCBzcGVjaWZpY2F0aW9uIGRp
Y3RhdGVzIHRoYXQgdGhlIGNoYXJzZXQgaXMgYWx3YXlzIFVURi04OyBzcGVjaWZ5aW5nIGFub3Ro
ZXIgY2hhcnNldCB3aWxsIG5vdCBmb3JjZSB0aGUgYnJvd3NlciB0byBjaGFuZ2UgdGhlIGVuY29k
aW5nLlxuICAgICAqL1xuICAgIGNvbnRlbnRUeXBlPzogYW55O1xuICAgIC8qKlxuICAgICAqIFRo
aXMgb2JqZWN0IHdpbGwgYmUgbWFkZSB0aGUgY29udGV4dCBvZiBhbGwgQWpheC1yZWxhdGVkIGNh
bGxiYWNrcy4gQnkgZGVmYXVsdCwgdGhlIGNvbnRleHQgaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVz
ZW50cyB0aGUgYWpheCBzZXR0aW5ncyB1c2VkIGluIHRoZSBjYWxsICgkLmFqYXhTZXR0aW5ncyBt
ZXJnZWQgd2l0aCB0aGUgc2V0dGluZ3MgcGFzc2VkIHRvICQuYWpheCkuXG4gICAgICovXG4gICAg
Y29udGV4dD86IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
VHlwZS10by1kYXRhVHlwZSBjb252ZXJ0ZXJzLiBFYWNoIGNvbnZlcnRlcidzIHZhbHVlIGlzIGEg
ZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBvZiB0aGUgcmVzcG9u
c2UuICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udmVydGVycz86IHsgW2tl
eTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3aXNoIHRvIGZvcmNl
IGEgY3Jvc3NEb21haW4gcmVxdWVzdCAoc3VjaCBhcyBKU09OUCkgb24gdGhlIHNhbWUgZG9tYWlu
LCBzZXQgdGhlIHZhbHVlIG9mIGNyb3NzRG9tYWluIHRvIHRydWUuIFRoaXMgYWxsb3dzLCBmb3Ig
ZXhhbXBsZSwgc2VydmVyLXNpZGUgcmVkaXJlY3Rpb24gdG8gYW5vdGhlciBkb21haW4uICh2ZXJz
aW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY3Jvc3NEb21haW4/OiBib29sZWFuO1xuICAg
IC8qKlxuICAgICAqIERhdGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBJdCBpcyBjb252ZXJ0
ZWQgdG8gYSBxdWVyeSBzdHJpbmcsIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nLiBJdCdzIGFwcGVu
ZGVkIHRvIHRoZSB1cmwgZm9yIEdFVC1yZXF1ZXN0cy4gU2VlIHByb2Nlc3NEYXRhIG9wdGlvbiB0
byBwcmV2ZW50IHRoaXMgYXV0b21hdGljIHByb2Nlc3NpbmcuIE9iamVjdCBtdXN0IGJlIEtleS9W
YWx1ZSBwYWlycy4gSWYgdmFsdWUgaXMgYW4gQXJyYXksIGpRdWVyeSBzZXJpYWxpemVzIG11bHRp
cGxlIHZhbHVlcyB3aXRoIHNhbWUga2V5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdHJhZGl0
aW9uYWwgc2V0dGluZyAoZGVzY3JpYmVkIGJlbG93KS5cbiAgICAgKi9cbiAgICBkYXRhPzogYW55
O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgdXNlZCB0byBoYW5kbGUgdGhlIHJh
dyByZXNwb25zZSBkYXRhIG9mIFhNTEh0dHBSZXF1ZXN0LlRoaXMgaXMgYSBwcmUtZmlsdGVyaW5n
IGZ1bmN0aW9uIHRvIHNhbml0aXplIHRoZSByZXNwb25zZS4gWW91IHNob3VsZCByZXR1cm4gdGhl
IHNhbml0aXplZCBkYXRhLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0d28gYXJndW1lbnRzOiBUaGUg
cmF3IGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIGFuZCB0aGUgJ2RhdGFUeXBlJyBwYXJh
bWV0ZXIuXG4gICAgICovXG4gICAgZGF0YUZpbHRlcj8gKGRhdGE6IGFueSwgdHk6IGFueSk6IGFu
eTtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgeW91J3JlIGV4cGVjdGlu
ZyBiYWNrIGZyb20gdGhlIHNlcnZlci4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIGpRdWVyeSB3aWxs
IHRyeSB0byBpbmZlciBpdCBiYXNlZCBvbiB0aGUgTUlNRSB0eXBlIG9mIHRoZSByZXNwb25zZSAo
YW4gWE1MIE1JTUUgdHlwZSB3aWxsIHlpZWxkIFhNTCwgaW4gMS40IEpTT04gd2lsbCB5aWVsZCBh
IEphdmFTY3JpcHQgb2JqZWN0LCBpbiAxLjQgc2NyaXB0IHdpbGwgZXhlY3V0ZSB0aGUgc2NyaXB0
LCBhbmQgYW55dGhpbmcgZWxzZSB3aWxsIGJlIHJldHVybmVkIGFzIGEgc3RyaW5nKS5cbiAgICAg
Ki9cbiAgICBkYXRhVHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRv
IGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBmYWlscy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRo
cmVlIGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0
KSBvYmplY3QsIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBvY2N1
cnJlZCBhbmQgYW4gb3B0aW9uYWwgZXhjZXB0aW9uIG9iamVjdCwgaWYgb25lIG9jY3VycmVkLiBQ
b3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgKGJlc2lkZXMgbnVsbCkgYXJl
IFwidGltZW91dFwiLCBcImVycm9yXCIsIFwiYWJvcnRcIiwgYW5kIFwicGFyc2VyZXJyb3JcIi4g
V2hlbiBhbiBIVFRQIGVycm9yIG9jY3VycywgZXJyb3JUaHJvd24gcmVjZWl2ZXMgdGhlIHRleHR1
YWwgcG9ydGlvbiBvZiB0aGUgSFRUUCBzdGF0dXMsIHN1Y2ggYXMgXCJOb3QgRm91bmRcIiBvciBc
IkludGVybmFsIFNlcnZlciBFcnJvci5cIiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgZXJyb3Igc2V0
dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxs
IGJlIGNhbGxlZCBpbiB0dXJuLiBOb3RlOiBUaGlzIGhhbmRsZXIgaXMgbm90IGNhbGxlZCBmb3Ig
Y3Jvc3MtZG9tYWluIHNjcmlwdCBhbmQgY3Jvc3MtZG9tYWluIEpTT05QIHJlcXVlc3RzLiBUaGlz
IGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgZXJyb3I/IChqcVhIUjogSlF1ZXJ5WEhS
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGVycm9yVGhyb3c6IHN0cmluZyk6IGFueTtcbiAgICAvKipc
biAgICAgKiBXaGV0aGVyIHRvIHRyaWdnZXIgZ2xvYmFsIEFqYXggZXZlbnQgaGFuZGxlcnMgZm9y
IHRoaXMgcmVxdWVzdC4gVGhlIGRlZmF1bHQgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIHRvIHByZXZl
bnQgdGhlIGdsb2JhbCBoYW5kbGVycyBsaWtlIGFqYXhTdGFydCBvciBhamF4U3RvcCBmcm9tIGJl
aW5nIHRyaWdnZXJlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgQWpheCBF
dmVudHMuXG4gICAgICovXG4gICAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBB
biBvYmplY3Qgb2YgYWRkaXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzIHRvIHNlbmQgYWxv
bmcgd2l0aCByZXF1ZXN0cyB1c2luZyB0aGUgWE1MSHR0cFJlcXVlc3QgdHJhbnNwb3J0LiBUaGUg
aGVhZGVyIFgtUmVxdWVzdGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBhZGRlZCwg
YnV0IGl0cyBkZWZhdWx0IFhNTEh0dHBSZXF1ZXN0IHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGhlcmUu
IFZhbHVlcyBpbiB0aGUgaGVhZGVycyBzZXR0aW5nIGNhbiBhbHNvIGJlIG92ZXJ3cml0dGVuIGZy
b20gd2l0aGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uLiAodmVyc2lvbiBhZGRlZDogMS41KVxu
ICAgICAqL1xuICAgIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipc
biAgICAgKiBBbGxvdyB0aGUgcmVxdWVzdCB0byBiZSBzdWNjZXNzZnVsIG9ubHkgaWYgdGhlIHJl
c3BvbnNlIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHJlcXVlc3QuIFRoaXMgaXMgZG9uZSBi
eSBjaGVja2luZyB0aGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIuIERlZmF1bHQgdmFsdWUgaXMgZmFs
c2UsIGlnbm9yaW5nIHRoZSBoZWFkZXIuIEluIGpRdWVyeSAxLjQgdGhpcyB0ZWNobmlxdWUgYWxz
byBjaGVja3MgdGhlICdldGFnJyBzcGVjaWZpZWQgYnkgdGhlIHNlcnZlciB0byBjYXRjaCB1bm1v
ZGlmaWVkIGRhdGEuXG4gICAgICovXG4gICAgaWZNb2RpZmllZD86IGJvb2xlYW47XG4gICAgLyoq
XG4gICAgICogQWxsb3cgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdG8gYmUgcmVjb2duaXplZCBh
cyBcImxvY2FsLFwiIChlLmcuIHRoZSBmaWxlc3lzdGVtKSwgZXZlbiBpZiBqUXVlcnkgZG9lcyBu
b3QgcmVjb2duaXplIGl0IGFzIHN1Y2ggYnkgZGVmYXVsdC4gVGhlIGZvbGxvd2luZyBwcm90b2Nv
bHMgYXJlIGN1cnJlbnRseSByZWNvZ25pemVkIGFzIGxvY2FsOiBmaWxlLCAqLWV4dGVuc2lvbiwg
YW5kIHdpZGdldC4gSWYgdGhlIGlzTG9jYWwgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0
IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9k
LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgaXNMb2NhbD86IGJvb2xlYW47
XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgaW4g
YSBqc29ucCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mICdjYWxs
YmFjaycgaW4gdGhlICdjYWxsYmFjaz0/JyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgaW4gdGhl
IHVybC4gU28ge2pzb25wOidvbkpTT05QTG9hZCd9IHdvdWxkIHJlc3VsdCBpbiAnb25KU09OUExv
YWQ9PycgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIuIEFzIG9mIGpRdWVyeSAxLjUsIHNldHRpbmcgdGhl
IGpzb25wIG9wdGlvbiB0byBmYWxzZSBwcmV2ZW50cyBqUXVlcnkgZnJvbSBhZGRpbmcgdGhlIFwi
P2NhbGxiYWNrXCIgc3RyaW5nIHRvIHRoZSBVUkwgb3IgYXR0ZW1wdGluZyB0byB1c2UgXCI9P1wi
IGZvciB0cmFuc2Zvcm1hdGlvbi4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIGFsc28gZXhwbGlj
aXRseSBzZXQgdGhlIGpzb25wQ2FsbGJhY2sgc2V0dGluZy4gRm9yIGV4YW1wbGUsIHsganNvbnA6
IGZhbHNlLCBqc29ucENhbGxiYWNrOiBcImNhbGxiYWNrTmFtZVwiIH1cbiAgICAgKi9cbiAgICBq
c29ucD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjYWxsYmFjayBmdW5j
dGlvbiBuYW1lIGZvciBhIEpTT05QIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGlu
c3RlYWQgb2YgdGhlIHJhbmRvbSBuYW1lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGpRdWVy
eS4gSXQgaXMgcHJlZmVyYWJsZSB0byBsZXQgalF1ZXJ5IGdlbmVyYXRlIGEgdW5pcXVlIG5hbWUg
YXMgaXQnbGwgbWFrZSBpdCBlYXNpZXIgdG8gbWFuYWdlIHRoZSByZXF1ZXN0cyBhbmQgcHJvdmlk
ZSBjYWxsYmFja3MgYW5kIGVycm9yIGhhbmRsaW5nLiBZb3UgbWF5IHdhbnQgdG8gc3BlY2lmeSB0
aGUgY2FsbGJhY2sgd2hlbiB5b3Ugd2FudCB0byBlbmFibGUgYmV0dGVyIGJyb3dzZXIgY2FjaGlu
ZyBvZiBHRVQgcmVxdWVzdHMuIEFzIG9mIGpRdWVyeSAxLjUsIHlvdSBjYW4gYWxzbyB1c2UgYSBm
dW5jdGlvbiBmb3IgdGhpcyBzZXR0aW5nLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBvZiBqc29u
cENhbGxiYWNrIGlzIHNldCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uXG4g
ICAgICovXG4gICAganNvbnBDYWxsYmFjaz86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIG1pbWUg
dHlwZSB0byBvdmVycmlkZSB0aGUgWEhSIG1pbWUgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNS4x
KVxuICAgICAqL1xuICAgIG1pbWVUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgcGFz
c3dvcmQgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhU
VFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgcGFzc3dvcmQ/
OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgZGF0YSBwYXNzZWQgaW4gdG8g
dGhlIGRhdGEgb3B0aW9uIGFzIGFuIG9iamVjdCAodGVjaG5pY2FsbHksIGFueXRoaW5nIG90aGVy
IHRoYW4gYSBzdHJpbmcpIHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBpbnRvIGEg
cXVlcnkgc3RyaW5nLCBmaXR0aW5nIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBcImFwcGxp
Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLiBJZiB5b3Ugd2FudCB0byBzZW5kIGEgRE9N
RG9jdW1lbnQsIG9yIG90aGVyIG5vbi1wcm9jZXNzZWQgZGF0YSwgc2V0IHRoaXMgb3B0aW9uIHRv
IGZhbHNlLlxuICAgICAqL1xuICAgIHByb2Nlc3NEYXRhPzogYm9vbGVhbjtcbiAgICAvKipcbiAg
ICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgXCJzY3JpcHRcIiB0cmFuc3BvcnQgaXMgdXNlZCAo
ZS5nLiwgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIHdpdGggXCJqc29ucFwiIG9yIFwic2NyaXB0XCIg
ZGF0YVR5cGUgYW5kIFwiR0VUXCIgdHlwZSkuIFNldHMgdGhlIGNoYXJzZXQgYXR0cmlidXRlIG9u
IHRoZSBzY3JpcHQgdGFnIHVzZWQgaW4gdGhlIHJlcXVlc3QuIFVzZWQgd2hlbiB0aGUgY2hhcmFj
dGVyIHNldCBvbiB0aGUgbG9jYWwgcGFnZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBvbiB0
aGUgcmVtb3RlIHNjcmlwdC5cbiAgICAgKi9cbiAgICBzY3JpcHRDaGFyc2V0Pzogc3RyaW5nO1xu
ICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBudW1lcmljIEhUVFAgY29kZXMgYW5kIGZ1bmN0
aW9ucyB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVzcG9uc2UgaGFzIHRoZSBjb3JyZXNwb25kaW5n
IGNvZGUuIGYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIHN0YXR1cyBjb2RlIGZ1bmN0
aW9ucyB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJhY2s7IGlm
IGl0IHJlc3VsdHMgaW4gYW4gZXJyb3IgKGluY2x1ZGluZyAzeHggcmVkaXJlY3QpLCB0aGV5IHRh
a2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZXJyb3IgY2FsbGJhY2suICh2ZXJzaW9uIGFk
ZGVkOiAxLjUpXG4gICAgICovXG4gICAgc3RhdHVzQ29kZT86IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1
ZXN0IHN1Y2NlZWRzLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdGhyZWUgYXJndW1lbnRzOiBU
aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8g
dGhlIGRhdGFUeXBlIHBhcmFtZXRlcjsgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgc3RhdHVzOyBh
bmQgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QuIEFz
IG9mIGpRdWVyeSAxLjUsIHRoZSBzdWNjZXNzIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBv
ZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBp
cyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIHN1Y2Nlc3M/IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUik6IGFueTtcbiAgICAvKipcbiAgICAgKiBT
ZXQgYSB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB0aGUgcmVxdWVzdC4gVGhpcyB3aWxs
IG92ZXJyaWRlIGFueSBnbG9iYWwgdGltZW91dCBzZXQgd2l0aCAkLmFqYXhTZXR1cCgpLiBUaGUg
dGltZW91dCBwZXJpb2Qgc3RhcnRzIGF0IHRoZSBwb2ludCB0aGUgJC5hamF4IGNhbGwgaXMgbWFk
ZTsgaWYgc2V2ZXJhbCBvdGhlciByZXF1ZXN0cyBhcmUgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBicm93
c2VyIGhhcyBubyBjb25uZWN0aW9ucyBhdmFpbGFibGUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHJl
cXVlc3QgdG8gdGltZSBvdXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50LiBJbiBqUXVlcnkgMS40Lngg
YW5kIGJlbG93LCB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IHdpbGwgYmUgaW4gYW4gaW52YWxp
ZCBzdGF0ZSBpZiB0aGUgcmVxdWVzdCB0aW1lcyBvdXQ7IGFjY2Vzc2luZyBhbnkgb2JqZWN0IG1l
bWJlcnMgbWF5IHRocm93IGFuIGV4Y2VwdGlvbi4gSW4gRmlyZWZveCAzLjArIG9ubHksIHNjcmlw
dCBhbmQgSlNPTlAgcmVxdWVzdHMgY2Fubm90IGJlIGNhbmNlbGxlZCBieSBhIHRpbWVvdXQ7IHRo
ZSBzY3JpcHQgd2lsbCBydW4gZXZlbiBpZiBpdCBhcnJpdmVzIGFmdGVyIHRoZSB0aW1lb3V0IHBl
cmlvZC5cbiAgICAgKi9cbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFNl
dCB0aGlzIHRvIHRydWUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSB0cmFkaXRpb25hbCBzdHlsZSBv
ZiBwYXJhbSBzZXJpYWxpemF0aW9uLlxuICAgICAqL1xuICAgIHRyYWRpdGlvbmFsPzogYm9vbGVh
bjtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiByZXF1ZXN0IHRvIG1ha2UgKFwiUE9TVFwi
IG9yIFwiR0VUXCIpLCBkZWZhdWx0IGlzIFwiR0VUXCIuIE5vdGU6IE90aGVyIEhUVFAgcmVxdWVz
dCBtZXRob2RzLCBzdWNoIGFzIFBVVCBhbmQgREVMRVRFLCBjYW4gYWxzbyBiZSB1c2VkIGhlcmUs
IGJ1dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vycy5cbiAgICAgKi9cbiAg
ICB0eXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhl
IFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqL1xuICAgIHVybD86IHN0
cmluZztcbiAgICAvKipcbiAgICAgKiBBIHVzZXJuYW1lIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRw
UmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1
ZXN0LlxuICAgICAqL1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIENh
bGxiYWNrIGZvciBjcmVhdGluZyB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0LiBEZWZhdWx0cyB0
byB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGF2YWlsYWJsZSAoSUUpLCB0aGUgWE1MSHR0cFJlcXVl
c3Qgb3RoZXJ3aXNlLiBPdmVycmlkZSB0byBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9u
IGZvciBYTUxIdHRwUmVxdWVzdCBvciBlbmhhbmNlbWVudHMgdG8gdGhlIGZhY3RvcnkuXG4gICAg
ICovXG4gICAgeGhyPzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBmaWVsZE5h
bWUtZmllbGRWYWx1ZSBwYWlycyB0byBzZXQgb24gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0LiBGb3Ig
ZXhhbXBsZSwgeW91IGNhbiB1c2UgaXQgdG8gc2V0IHdpdGhDcmVkZW50aWFscyB0byB0cnVlIGZv
ciBjcm9zcy1kb21haW4gcmVxdWVzdHMgaWYgbmVlZGVkLiBJbiBqUXVlcnkgMS41LCB0aGUgd2l0
aENyZWRlbnRpYWxzIHByb3BlcnR5IHdhcyBub3QgcHJvcGFnYXRlZCB0byB0aGUgbmF0aXZlIFhI
UiBhbmQgdGh1cyBDT1JTIHJlcXVlc3RzIHJlcXVpcmluZyBpdCB3b3VsZCBpZ25vcmUgdGhpcyBm
bGFnLiBGb3IgdGhpcyByZWFzb24sIHdlIHJlY29tbWVuZCB1c2luZyBqUXVlcnkgMS41LjErIHNo
b3VsZCB5b3UgcmVxdWlyZSB0aGUgdXNlIG9mIGl0LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4g
ICAgICovXG4gICAgeGhyRmllbGRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG59XG5cbi8q
XG4gICAgSW50ZXJmYWNlIGZvciB0aGUganFYSFIgb2JqZWN0XG4qL1xuaW50ZXJmYWNlIEpRdWVy
eVhIUiBleHRlbmRzIFhNTEh0dHBSZXF1ZXN0LCBKUXVlcnlQcm9taXNlPGFueT4ge1xuICAgIG92
ZXJyaWRlTWltZVR5cGUobWltZVR5cGU6IHN0cmluZyk6IGFueTtcbiAgICBhYm9ydChzdGF0dXNU
ZXh0Pzogc3RyaW5nKTogdm9pZDtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVl
cnkgY2FsbGJhY2tcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5Q2FsbGJhY2sge1xuICAgIGFkZCguLi5j
YWxsYmFja3M6IGFueVtdKTogYW55O1xuICAgIGRpc2FibGUoKTogYW55O1xuICAgIGVtcHR5KCk6
IGFueTtcbiAgICBmaXJlKC4uLmFyZ3VtZW50czogYW55W10pOiBhbnk7XG4gICAgZmlyZWQoKTog
Ym9vbGVhbjtcbiAgICBmaXJlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55
O1xuICAgIGhhcyhjYWxsYmFjazogYW55KTogYm9vbGVhbjtcbiAgICBsb2NrKCk6IGFueTtcbiAg
ICBsb2NrZWQoKTogYm9vbGVhbjtcbiAgICByZW1vdmUoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFu
eTtcbn1cblxuLypcbiAgICBBbGxvd3MgalF1ZXJ5IFByb21pc2VzIHRvIGludGVyb3Agd2l0aCBu
b24talF1ZXJ5IHByb21pc2VzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+
IHtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChy
ZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4o
b25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVj
dD86IChyZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRo
ZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55
KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xu
ICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+LCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4p
OiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRo
ZSBKUXVlcnkgcHJvbWlzZSwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5
UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBh
bHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRv
bmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4u
LmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4u
cHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBhbHdheXMo
Li4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSgu
Li5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5m
YWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4u
cHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIC8vIERl
cHJlY2F0ZWQgLSBnaXZlbiBubyB0eXBpbmdzXG4gICAgcGlwZShkb25lRmlsdGVyPzogKHg6IGFu
eSkgPT4gYW55LCBmYWlsRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBwcm9ncmVzc0ZpbHRlcj86
ICh4OiBhbnkpID0+IGFueSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIHRoZW48VT4ob25G
dWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9
PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5
UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9u
UHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNl
PFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVz
cz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8
VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVy
eVByb21pc2U8VT47XG5cbiAgICAvLyBCZWNhdXNlIEpRdWVyeSBQcm9taXNlcyBTdWNrXG4gICAg
dGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICgu
Li5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55
W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICgu
Li52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAo
Li4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFu
eVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAo
Li4udmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+
IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86
ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jl
c3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xu
fVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBkZWZlcnJlZCwgcGFydCBvZiBj
YWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5RGVmZXJyZWQ8VD4gZXh0ZW5kcyBKUXVlcnlQ
cm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFs
d2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRv
bmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCgu
Li5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcygu
Li5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBhbHdh
eXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRv
bmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWls
KC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jl
c3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAg
ICBub3RpZnkoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBub3RpZnlX
aXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxu
ICAgIHJlamVjdCguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlamVj
dFdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
XG4gICAgcmVzb2x2ZSh2YWw6IFQpOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlKC4u
LmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZVdpdGgoY29udGV4
dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHN0YXRlKCk6
IHN0cmluZztcblxuICAgIHByb21pc2UodGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxUPjtc
bn1cblxuLypcbiAgICBJbnRlcmZhY2Ugb2YgdGhlIEpRdWVyeSBleHRlbnNpb24gb2YgdGhlIFcz
QyBldmVudCBvYmplY3RcbiovXG5cbmludGVyZmFjZSBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QgZXh0
ZW5kcyBFdmVudCB7XG4gICAgZGF0YTogYW55O1xuICAgIGRlbGVnYXRlVGFyZ2V0OiBFbGVtZW50
O1xuICAgIGlzRGVmYXVsdFByZXZlbnRlZCgpOiBib29sZWFuO1xuICAgIGlzSW1tZWRpYXRlUHJv
cG9nYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTog
Ym9vbGVhbjtcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBwcmV2ZW50RGVmYXVsdCgpOiBh
bnk7XG4gICAgcmVsYXRlZFRhcmdldDogRWxlbWVudDtcbiAgICByZXN1bHQ6IGFueTtcbiAgICBz
dG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb24oKTog
dm9pZDtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgd2hpY2g6
IG51bWJlcjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5SW5w
dXRFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgYWx0S2V5
OiBib29sZWFuO1xuICAgIGN0cmxLZXk6IGJvb2xlYW47XG4gICAgbWV0YUtleTogYm9vbGVhbjtc
biAgICBzaGlmdEtleTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBidXR0b246IG51bWJl
cjtcbiAgICBjbGllbnRYOiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAgIG9mZnNl
dFg6IG51bWJlcjtcbiAgICBvZmZzZXRZOiBudW1iZXI7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAg
ICBwYWdlWTogbnVtYmVyO1xuICAgIHNjcmVlblg6IG51bWJlcjtcbiAgICBzY3JlZW5ZOiBudW1i
ZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlLZXlFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlu
cHV0RXZlbnRPYmplY3Qge1xuICAgIGNoYXI6IGFueTtcbiAgICBjaGFyQ29kZTogbnVtYmVyO1xu
ICAgIGtleTogYW55O1xuICAgIGtleUNvZGU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVy
eVBvcFN0YXRlRXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAg
IG9yaWdpbmFsRXZlbnQ6IFBvcFN0YXRlRXZlbnQ7XG59XG5cbmludGVyZmFjZSBKUXVlcnlFdmVu
dE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCwgSlF1ZXJ5SW5wdXRFdmVudE9i
amVjdCwgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCwgSlF1ZXJ5S2V5RXZlbnRPYmplY3QsIEpRdWVy
eVBvcFN0YXRlRXZlbnRPYmplY3Qge1xufVxuXG4vKlxuICAgIENvbGxlY3Rpb24gb2YgcHJvcGVy
dGllcyBvZiB0aGUgY3VycmVudCBicm93c2VyXG4qL1xuXG5pbnRlcmZhY2UgSlF1ZXJ5U3VwcG9y
dCB7XG4gICAgYWpheD86IGJvb2xlYW47XG4gICAgYm94TW9kZWw/OiBib29sZWFuO1xuICAgIGNo
YW5nZUJ1YmJsZXM/OiBib29sZWFuO1xuICAgIGNoZWNrQ2xvbmU/OiBib29sZWFuO1xuICAgIGNo
ZWNrT24/OiBib29sZWFuO1xuICAgIGNvcnM/OiBib29sZWFuO1xuICAgIGNzc0Zsb2F0PzogYm9v
bGVhbjtcbiAgICBocmVmTm9ybWFsaXplZD86IGJvb2xlYW47XG4gICAgaHRtbFNlcmlhbGl6ZT86
IGJvb2xlYW47XG4gICAgbGVhZGluZ1doaXRlc3BhY2U/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVD
aGVja2VkPzogYm9vbGVhbjtcbiAgICBub0Nsb25lRXZlbnQ/OiBib29sZWFuO1xuICAgIG9wYWNp
dHk/OiBib29sZWFuO1xuICAgIG9wdERpc2FibGVkPzogYm9vbGVhbjtcbiAgICBvcHRTZWxlY3Rl
ZD86IGJvb2xlYW47XG4gICAgc2NyaXB0RXZhbD8gKCk6IGJvb2xlYW47XG4gICAgc3R5bGU/OiBi
b29sZWFuO1xuICAgIHN1Ym1pdEJ1YmJsZXM/OiBib29sZWFuO1xuICAgIHRib2R5PzogYm9vbGVh
bjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBhcmFtIHtcbiAgICAob2JqOiBhbnkpOiBzdHJpbmc7
XG4gICAgKG9iajogYW55LCB0cmFkaXRpb25hbDogYm9vbGVhbik6IHN0cmluZztcbn1cblxuLyoq
XG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gY29uc3RydWN0IGpRdWVyeSBldmVudHMgKHdpdGgg
JC5FdmVudCkuIEl0IGlzXG4gKiBkZWZpbmVkIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBpbmxpbmUg
aW4gSlF1ZXJ5U3RhdGljIHRvIGFsbG93XG4gKiBvdmVycmlkaW5nIHRoZSBjb25zdHJ1Y3Rpb24g
ZnVuY3Rpb24gd2l0aCBzcGVjaWZpYyBzdHJpbmdzXG4gKiByZXR1cm5pbmcgc3BlY2lmaWMgZXZl
bnQgb2JqZWN0cy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVyeUV2ZW50Q29uc3RydWN0b3Ige1xuICAg
IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0
O1xuICAgIG5ldyAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlF
dmVudE9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gc3BlY2lmeSBl
YXNpbmcgZnVuY3Rpb25zLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RWFzaW5nIHtcbiAgICBsaW5l
YXIocDogbnVtYmVyKTogbnVtYmVyO1xuICAgIHN3aW5nKHA6IG51bWJlcik6IG51bWJlcjtcbn1c
blxuLypcbiAgICBTdGF0aWMgbWVtYmVycyBvZiBqUXVlcnkgKHRob3NlIG9uICQgYW5kIGpRdWVy
eSB0aGVtc2VsdmVzKVxuKi9cbmludGVyZmFjZSBKUXVlcnlTdGF0aWMge1xuXG4gICAgLyoqXG4g
ICAgICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBj
b25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBk
ZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAg
ICAqL1xuICAgIGFqYXgoc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZ3Mg
QSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3Qu
IEFsbCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkg
b3B0aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHVybDogc3RyaW5n
LCBzZXR0aW5ncz86IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxu
ICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRp
b25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nl
c3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZXMgQW4gb3B0
aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGRhdGFU
eXBlc1xuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1
ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIo
ZGF0YVR5cGVzOiBzdHJpbmcsIGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1
ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuICAgIC8q
KlxuICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBv
cHRpb25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHBy
b2Nlc3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFu
ZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAg
ICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRz
OiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG5c
biAgICBhamF4U2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncztcblxuICAgICAvKipcbiAgICAg
ICogU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy4gSXRzIHVzZSBp
cyBub3QgcmVjb21tZW5kZWQuXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSBvcHRpb25zIEEgc2V0
IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBBamF4IHJlcXVl
c3QuIEFsbCBvcHRpb25zIGFyZSBvcHRpb25hbC5cbiAgICAgICovXG4gICAgYWpheFNldHVwKG9w
dGlvbnM6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2Fk
IGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRo
ZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5j
dGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBw
YXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4g
RGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5c
biAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJp
bmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZl
ciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQg
dG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEg
Y2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVk
cy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9t
IHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlw
dCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAg
ICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9i
amVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVz
dC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhl
Y3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRo
ZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxp
Z2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdl
dCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmlu
Zyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZy
b20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVz
dCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhh
dCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRK
U09OKHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5n
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICog
TG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCBy
ZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRo
ZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBB
IHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0
aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRo
YXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0
SlNPTih1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRl
eHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xu
ICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVz
aW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJp
bmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAg
ICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0
aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxu
ICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/
OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFu
eSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGEgSmF2YVNjcmlwdCBmaWxlIGZy
b20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QsIHRoZW4gZXhlY3V0ZSBpdC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRv
IHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxu
ICAgICAqL1xuICAgIGdldFNjcmlwdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChzY3JpcHQ6IHN0
cmluZywgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVl
cnlYSFI7XG5cbiAgICBwYXJhbTogSlF1ZXJ5UGFyYW07XG5cbiAgICAvKipcbiAgICAgKiBMb2Fk
IGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVu
Y3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQg
aWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4g
ICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUg
c2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRl
eHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0
YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0
YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZy
b20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVl
c3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcg
dGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFy
YW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJl
cXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2Fu
IGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBv
ZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vl
c3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVy
bDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1
czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTog
SlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNp
bmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJp
bmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAg
ICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0
aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBS
ZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQg
Y2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBm
cm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNj
cmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86
IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6
IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcblxuICAg
IC8qKlxuICAgICAqIEEgbXVsdGktcHVycG9zZSBjYWxsYmFja3MgbGlzdCBvYmplY3QgdGhhdCBw
cm92aWRlcyBhIHBvd2VyZnVsIHdheSB0byBtYW5hZ2UgY2FsbGJhY2sgbGlzdHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZmxhZ3MgQW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQg
ZmxhZ3MgdGhhdCBjaGFuZ2UgaG93IHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMuXG4gICAgICov
XG4gICAgQ2FsbGJhY2tzKGZsYWdzPzogc3RyaW5nKTogSlF1ZXJ5Q2FsbGJhY2s7XG5cbiAgICAv
KipcbiAgICAgKiBIb2xkcyBvciByZWxlYXNlcyB0aGUgZXhlY3V0aW9uIG9mIGpRdWVyeSdzIHJl
YWR5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhvbGQgSW5kaWNhdGVzIHdoZXRoZXIg
dGhlIHJlYWR5IGhvbGQgaXMgYmVpbmcgcmVxdWVzdGVkIG9yIHJlbGVhc2VkXG4gICAgICovXG4g
ICAgaG9sZFJlYWR5KGhvbGQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgKHNlbGVjdG9yOiBzdHJp
bmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBKUXVl
cnk7XG4gICAgKG9iamVjdDoge30pOiBKUXVlcnk7XG4gICAgKGVsZW1lbnRBcnJheTogRWxlbWVu
dFtdKTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICAoZnVuYzog
RnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgKGFycmF5OiBhbnlbXSk6IEpRdWVyeTtcbiAgICAoKTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVsaW5xdWlzaCBqUXVlcnkncyBjb250cm9sIG9m
IHRoZSAkIHZhcmlhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlbW92ZUFsbCBBIEJvb2xl
YW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJlbW92ZSBhbGwgalF1ZXJ5IHZhcmlhYmxlcyBmcm9t
IHRoZSBnbG9iYWwgc2NvcGUgKGluY2x1ZGluZyBqUXVlcnkgaXRzZWxmKS5cbiAgICAgKi9cbiAg
ICBub0NvbmZsaWN0KHJlbW92ZUFsbD86IGJvb2xlYW4pOiBPYmplY3Q7XG5cbiAgICAvKipcbiAg
ICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBv
biBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXBy
ZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJl
ZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmpl
Y3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBKUXVlcnlHZW5lcmljUHJv
bWlzZTxUPltdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBh
IHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBv
YmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9u
b3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUg
RGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xu
ICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8q
KlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJh
c2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0
IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRl
ZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0
IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IGFueVtdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGNzc0hvb2tzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtc
biAgICBjc3NOdW1iZXI6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGFyYml0cmFyeSBk
YXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuIFJldHVybnMgdGhlIHZh
bHVlIHRoYXQgd2FzIHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00g
ZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEg
c3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICogQHBhcmFtIHZh
bHVlIFRoZSBuZXcgZGF0YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBkYXRhPFQ+KGVsZW1lbnQ6IEVs
ZW1lbnQsIGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJu
cyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpR
dWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBm
b3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVs
ZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0
cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqL1xuICAgIGRhdGEo
ZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogUmV0
dXJucyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5
IGpRdWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9y
ZSBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9N
IGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICovXG4gICAgZGF0YShl
bGVtZW50OiBFbGVtZW50KTogYW55O1xuXG4gICAgZGVxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBx
dWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBoYXNEYXRhKGVsZW1lbnQ6IEVsZW1lbnQp
OiBib29sZWFuO1xuXG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3Ry
aW5nKTogYW55W107XG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJp
bmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShl
bGVtZW50OiBFbGVtZW50LCBuYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJy
ZWRcbiAgICBEZWZlcnJlZDxUPihiZWZvcmVTdGFydD86IChkZWZlcnJlZDogSlF1ZXJ5RGVmZXJy
ZWQ8VD4pID0+IGFueSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAg
IGZ4OiB7IHRpY2s6ICgpID0+IHZvaWQ7IGludGVydmFsOiBudW1iZXI7IHN0b3A6ICgpID0+IHZv
aWQ7IHNwZWVkczogeyBzbG93OiBudW1iZXI7IGZhc3Q6IG51bWJlcjsgfTsgb2ZmOiBib29sZWFu
OyBzdGVwOiBhbnk7IH07XG5cbiAgICAvLyBFdmVudHNcbiAgICBwcm94eShmbjogKC4uLmFyZ3M6
IGFueVtdKSA9PiBhbnksIGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAg
cHJveHkoY29udGV4dDogYW55LCBuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYW55O1xu
XG4gICAgRXZlbnQ6IEpRdWVyeUV2ZW50Q29uc3RydWN0b3I7XG5cbiAgICAvLyBJbnRlcm5hbHNc
biAgICBlcnJvcihtZXNzYWdlOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3Vz
XG4gICAgZXhwcjogYW55O1xuICAgIGZuOiBhbnk7ICAvL1RPRE86IERlY2lkZSBob3cgd2Ugd2Fu
dCB0byB0eXBlIHRoaXNcbiAgICBpc1JlYWR5OiBib29sZWFuO1xuXG4gICAgLy8gUHJvcGVydGll
c1xuICAgIHN1cHBvcnQ6IEpRdWVyeVN1cHBvcnQ7XG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBj
b250YWlucyhjb250YWluZXI6IEVsZW1lbnQsIGNvbnRhaW5lZDogRWxlbWVudCk6IGJvb2xlYW47
XG5cbiAgICBlYWNoKGNvbGxlY3Rpb246IGFueSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IGFu
eSwgdmFsdWVPZkVsZW1lbnQ6IGFueSkgPT4gYW55KTogYW55O1xuICAgIGVhY2goY29sbGVjdGlv
bjogSlF1ZXJ5LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVu
dDogSFRNTEVsZW1lbnQpID0+IGFueSk6IGFueTtcbiAgICBlYWNoPFQ+KGNvbGxlY3Rpb246IFRb
XSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IFQpID0+
IGFueSk6IGFueTtcblxuICAgIGV4dGVuZCh0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBh
bnk7XG4gICAgZXh0ZW5kKGRlZXA6IGJvb2xlYW4sIHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlb
XSk6IGFueTtcblxuICAgIGdsb2JhbEV2YWwoY29kZTogc3RyaW5nKTogYW55O1xuXG4gICAgZ3Jl
cDxUPihhcnJheTogVFtdLCBmdW5jOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTog
bnVtYmVyKSA9PiBib29sZWFuLCBpbnZlcnQ/OiBib29sZWFuKTogVFtdO1xuXG4gICAgaW5BcnJh
eTxUPih2YWx1ZTogVCwgYXJyYXk6IFRbXSwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyO1xu
XG4gICAgaXNBcnJheShvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNFbXB0eU9iamVjdChvYmo6
IGFueSk6IGJvb2xlYW47XG4gICAgaXNGdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW47XG4gICAg
aXNOdW1lcmljKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgIGlzUGxhaW5PYmplY3Qob2JqOiBh
bnkpOiBib29sZWFuO1xuICAgIGlzV2luZG93KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1hN
TERvYyhub2RlOiBOb2RlKTogYm9vbGVhbjtcblxuICAgIG1ha2VBcnJheShvYmo6IGFueSk6IGFu
eVtdO1xuXG4gICAgbWFwPFQsIFU+KGFycmF5OiBUW10sIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJy
YXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBVKTogVVtdO1xuICAgIG1hcChhcnJheTog
YW55LCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBhbnksIGluZGV4SW5BcnJheTogYW55KSA9
PiBhbnkpOiBhbnk7XG5cbiAgICBtZXJnZTxUPihmaXJzdDogVFtdLCBzZWNvbmQ6IFRbXSk6IFRb
XTtcbiAgICBtZXJnZTxULFU+KGZpcnN0OiBUW10sIHNlY29uZDogVVtdKTogYW55W107XG5cbiAg
ICBub29wKCk6IGFueTtcblxuICAgIG5vdygpOiBudW1iZXI7XG5cbiAgICBwYXJzZUpTT04oanNv
bjogc3RyaW5nKTogYW55O1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8g
YW4gWE1MIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFhIHdlbGwtZm9ybWVk
IFhNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICovXG4gICAgcGFyc2VYTUwoZGF0YTogc3Ry
aW5nKTogWE1MRG9jdW1lbnQ7XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5h
bWU6IHN0cmluZywgbmV3UXVldWU6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgdHJpbShzdHI6IHN0
cmluZyk6IHN0cmluZztcblxuICAgIHR5cGUob2JqOiBhbnkpOiBzdHJpbmc7XG5cbiAgICB1bmlx
dWUoYXJyOiBhbnlbXSk6IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5n
IGludG8gYW4gYXJyYXkgb2YgRE9NIG5vZGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEg
SFRNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICogQHBhcmFtIGNvbnRleHQgRE9NIGVsZW1l
bnQgdG8gc2VydmUgYXMgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIEhUTUwgZnJhZ21lbnQgd2ls
bCBiZSBjcmVhdGVkXG4gICAgICogQHBhcmFtIGtlZXBTY3JpcHRzIEEgQm9vbGVhbiBpbmRpY2F0
aW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgSFRNTCBzdHJpbmdc
biAgICAgKi9cbiAgICBwYXJzZUhUTUwoZGF0YTogc3RyaW5nLCBjb250ZXh0PzogSFRNTEVsZW1l
bnQsIGtlZXBTY3JpcHRzPzogYm9vbGVhbik6IGFueVtdO1xuXG4gICAgQW5pbWF0aW9uKGVsZW06
IGFueSwgcHJvcGVydGllczogYW55LCBvcHRpb25zOiBhbnkpOiBhbnk7XG5cbiAgICBlYXNpbmc6
IEpRdWVyeUVhc2luZztcbn1cblxuLypcbiAgICBUaGUgalF1ZXJ5IGluc3RhbmNlIG1lbWJlcnNc
biovXG5pbnRlcmZhY2UgSlF1ZXJ5IHtcbiAgICAvLyBBSkFYXG4gICAgYWpheENvbXBsZXRlKGhh
bmRsZXI6IGFueSk6IEpRdWVyeTtcbiAgICBhamF4RXJyb3IoaGFuZGxlcjogKGV2ZW50OiBhbnks
IGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgYWpheFNlbmQoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRp
bmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0YXJ0
KGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RvcChoYW5kbGVyOiAoKSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN1Y2Nlc3MoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpx
WEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBsb2FkKHVybDogc3RyaW5nLCBkYXRhPzogYW55LCBjb21wbGV0ZT86IGFueSk6IEpR
dWVyeTtcblxuICAgIHNlcmlhbGl6ZSgpOiBzdHJpbmc7XG4gICAgc2VyaWFsaXplQXJyYXkoKTog
YW55W107XG5cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgYWRkQ2xhc3MoY2xhc3NOYW1lczogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIGFkZENsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjdXJyZW50Q2xh
c3M6IGFueSkgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gaHR0cDovL2FwaS5qcXVlcnku
Y29tL2FkZEJhY2svXG4gICAgYWRkQmFjayhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxu
XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgYXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihhdHRyaWJ1
dGVOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBhdHRyOiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcbiAgICBhdHRyKG1hcDogYW55KTogSlF1ZXJ5O1xuXG4gICAgaGFzQ2xhc3MoY2xhc3NO
YW1lOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gICAgaHRtbCgpOiBzdHJpbmc7XG4gICAgaHRtbCho
dG1sU3RyaW5nOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbChodG1sQ29udGVudDogKGluZGV4
OiBudW1iZXIsIG9sZGh0bWw6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwo
b2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTog
YW55O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7
XG4gICAgcHJvcChtYXA6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3Ry
aW5nLCBmdW5jOiAoaW5kZXg6IGFueSwgb2xkUHJvcGVydHlWYWx1ZTogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICByZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHJlbW92ZUNsYXNzKGNsYXNzTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcbiAgICByZW1v
dmVDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIHJlbW92ZVByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b2dn
bGVDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAg
IHRvZ2dsZUNsYXNzKHN3dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhm
dW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnksIHN3dGNoOiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIHZhbCgpOiBhbnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAg
ICB2YWwodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IG51bWJlcik6IEpR
dWVyeTtcbiAgICB2YWwoZnVuYzogKGluZGV4OiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2Ygc3R5bGUgcHJvcGVydGll
cyBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eS5cbiAgICAg
Ki9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQg
ZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3Bl
cnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJv
cGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVy
dGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1
ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9w
ZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9w
ZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJp
bmdbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3Bl
cnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFs
dWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXJbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hl
ZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJv
cGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhl
IHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUg
aW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1
ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2
YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiBy
ZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBS
ZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQg
dGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFt
ZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+IG51bWJl
cik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRp
ZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBwcm9wZXJ0aWVzIEFuIG9iamVjdCBvZiBwcm9wZXJ0eS12YWx1ZSBwYWlycyB0byBzZXQuXG4g
ICAgICovXG4gICAgY3NzKHByb3BlcnRpZXM6IE9iamVjdCk6IEpRdWVyeTtcblxuICAgIGhlaWdo
dCgpOiBudW1iZXI7XG4gICAgaGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgaGVp
Z2h0KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KGZ1bmM6IChpbmRleDogYW55
LCBoZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJIZWlnaHQoKTogbnVt
YmVyO1xuICAgIGlubmVySGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBpbm5l
cldpZHRoKCk6IG51bWJlcjtcbiAgICBpbm5lcldpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7
XG5cbiAgICBvZmZzZXQoKTogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB9O1xuICAgIG9m
ZnNldChjb29yZGluYXRlczogYW55KTogSlF1ZXJ5O1xuICAgIG9mZnNldChmdW5jOiAoaW5kZXg6
IGFueSwgY29vcmRzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG91dGVySGVpZ2h0KGlu
Y2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVySGVpZ2h0KHZhbHVlOiBu
dW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJXaWR0
aChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlcldpZHRoKHZhbHVl
OiBudW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgcG9zaXRp
b24oKTogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyOyB9O1xuXG4gICAgc2Nyb2xsTGVmdCgp
OiBudW1iZXI7XG4gICAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAg
c2Nyb2xsVG9wKCk6IG51bWJlcjtcbiAgICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcik6IEpRdWVy
eTtcblxuICAgIHdpZHRoKCk6IG51bWJlcjtcbiAgICB3aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1
ZXJ5O1xuICAgIHdpZHRoKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgd2lkdGgoZnVuYzog
KGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEYXRh
XG4gICAgY2xlYXJRdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBkYXRh
KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGRhdGEob2JqOiB7IFtrZXk6
IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICBkYXRhKGtleT86IHN0cmluZyk6IGFueTtc
blxuICAgIGRlcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3Zl
RGF0YShuYW1lT3JMaXN0PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBw
cm9taXNlKHR5cGU/OiBhbnksIHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8YW55Pjtcblxu
ICAgIC8vIEVmZmVjdHNcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBh
bnksIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVz
OiBhbnksIGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNvbXBsZXRlPzogRnVuY3Rp
b24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IHsgZHVy
YXRpb24/OiBhbnk7IGVhc2luZz86IHN0cmluZzsgY29tcGxldGU/OiBGdW5jdGlvbjsgc3RlcD86
IEZ1bmN0aW9uOyBxdWV1ZT86IGJvb2xlYW47IHNwZWNpYWxFYXNpbmc/OiBhbnk7IH0pOiBKUXVl
cnk7XG5cbiAgICBkZWxheShkdXJhdGlvbjogbnVtYmVyLCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNr
PzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0
cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG8oZHVyYXRpb246IGFu
eSwgb3BhY2l0eTogbnVtYmVyLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG8o
ZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVtYmVyLCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNr
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZpbmlzaCgpOiBKUXVl
cnk7XG5cbiAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtc
biAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBK
UXVlcnk7XG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/
OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVUb2dnbGUoZHVy
YXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVG9nZ2xlKGR1
cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
XG4gICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4g
ICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcblxuICAgIHN0b3AoY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86
IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgc3RvcChxdWV1ZT86IGFueSwgY2xlYXJRdWV1ZT86IGJv
b2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICB0b2dnbGUoZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShkdXJhdGlvbj86
IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dn
bGUoc2hvd09ySGlkZTogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIC8vIEV2ZW50c1xuICAgIGJp
bmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50
VHlwZTogc3RyaW5nLCBldmVudERhdGE6IGFueSwgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpR
dWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBwcmV2ZW50QnViYmxlOiBib29sZWFu
KTogSlF1ZXJ5O1xuICAgIGJpbmQoLi4uZXZlbnRzOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIGJs
dXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGJsdXIoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJjaGFuZ2VcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNo
YW5nZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgY2hhbmdlKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwiY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjbGljayhoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVu
dFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiZGJsY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIGRibGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBkZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmlu
ZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJmb2N1c1wiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgZm9jdXMoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29u
dGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1
c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIGZvY3VzaW4oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIGZvY3VzaW4oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGV2ZW50RGF0YTog
T2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIHR3byBoYW5kbGVycyB0byB0aGUgbWF0
Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRl
cnMgYW5kIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ckluIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyB0
aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlck91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4g
ICAgaG92ZXIoaGFuZGxlckluOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnksIGhhbmRsZXJPdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGEgc2luZ2xlIGhhbmRsZXIgdG8gdGhlIG1h
dGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50
ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ckluT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVy
cyBvciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxlckluT3V0
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIGtleWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlkb3duXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUga2V5ZG93blwiXCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnREYXRhPzog
YW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlwcmVzc1wiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5cHJlc3MoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBrZXlwcmVzcyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGtleXByZXNzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5
S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwia2V5dXBcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXVw
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhl
IFwia2V5dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAga2V5dXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBrZXl1cChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgbW91c2Vkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oZXZlbnREYXRhOiBP
YmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWVudGVy
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hl
biB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlZW50ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VsZWF2ZVwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxl
YXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZWxlYXZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2VsZWF2ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlbW92ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2Vtb3ZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoZXZlbnREYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW91dFwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VvdXQoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwiIEph
dmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNl
b3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwibW91c2VvdmVyXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3Vz
ZW92ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNldXBcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIG1vdXNldXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEph
dmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoZXZlbnREYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICovXG4gICAgb2ZmKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZl
bnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3Bh
Y2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0
IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3Ig
XCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBz
aG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFj
aGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVu
Y3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lh
bCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9y
Pzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQg
ZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywg
c3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwi
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0
dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAg
ICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBh
biBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3Qg
d2hlcmUgdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0
ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJl
cHJlc2VudCBoYW5kbGVyIGZ1bmN0aW9ucyBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZl
bnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1h
dGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZl
bnQgaGFuZGxlcnMuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBh
bnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0
YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0
aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS4gUmVzdCBwYXJhbWV0ZXIg
YXJncyBpcyBmb3Igb3B0aW9uYWwgcGFyYW1ldGVycyBwYXNzZWQgdG8galF1ZXJ5LnRyaWdnZXIo
KS4gTm90ZSB0aGF0IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBvbiB0aGUgZXZlbnQgaGFuZGxlciBm
dW5jdGlvbiBtdXN0IGJlIG1hcmtlZCBhcyBvcHRpb25hbCAoPyBzeW50YXgpLlxuICAgICAqL1xu
ICAgIG9uKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMg
dG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBP
bmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVz
cGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAq
IEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRh
bnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0
aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdn
ZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBm
dW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihl
dmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFj
aCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhl
IHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3Ig
bW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMs
IHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJh
bSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9m
IHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2Vs
ZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3
aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
RGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxz
byBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMg
cmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjog
c3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFu
ZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVt
ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRo
ZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50
IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQg
YSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAq
IEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRh
bnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4g
SWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlz
IGNhbGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBh
cmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3
aGVuIGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHsgW2tleTogc3Ry
aW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IGFueSwgZGF0YT86IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50
cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBl
dmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWlu
aW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wi
IG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5k
bGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3Ig
bW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1p
dCxcIiBvciBjdXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGRhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmlu
ZywgZGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRv
IGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1v
c3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5c
Ii5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRo
ZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBl
dmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFs
d2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhh
bmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICov
XG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUg
aGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5
cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFy
YXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNr
XCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2Vs
ZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVs
ZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9y
IG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0
aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3Nl
ZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBz
aG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4g
ICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBh
bnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9y
IHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBl
bGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBv
YmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFj
ZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUg
dmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUg
ZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZp
bHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBj
YWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUg
aGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxl
bWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxl
ciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uZShl
dmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZywgZGF0YT86
IGFueSk6IEpRdWVyeTtcblxuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciB0aGUgRE9NIGlzIHJlYWR5
LlxuICAgICAqL1xuICAgIHJlYWR5KGhhbmRsZXI6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJyZXNpemVcIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIHJlc2l6ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhOiBPYmplY3QsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2Nyb2xsXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBzY3JvbGwoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNlbGVjdFwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2VsZWN0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3Qo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3Rc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzdWJtaXRcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHN1Ym1pdCgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBz
dWJtaXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJz
dWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGV2
ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4
dHJhUGFyYW1ldGVyczogYW55W10pOiBKUXVlcnk7XG4gICAgdHJpZ2dlcihldmVudDogSlF1ZXJ5
RXZlbnRPYmplY3QpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VySGFuZGxlcihldmVudFR5cGU6IHN0
cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IE9iamVjdDtcblxuICAgIHVuYmluZChl
dmVudFR5cGU/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBmbHM6
IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2dDogYW55KTogSlF1ZXJ5O1xuXG4gICAg
dW5kZWxlZ2F0ZSgpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVu
dFR5cGU6IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50czog
YW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUobmFtZXNwYWNlOiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICB1bmxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIHVubG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
LyBJbnRlcm5hbHNcbiAgICBjb250ZXh0OiBFbGVtZW50O1xuICAgIGpxdWVyeTogc3RyaW5nO1xu
XG4gICAgZXJyb3IoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIGVycm9yKGV2ZW50RGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwdXNoU3Rh
Y2soZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55
W10sIG5hbWU6IGFueSwgYXJndW1lbnRzOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNYW5pcHVs
YXRpb25cbiAgICBhZnRlciguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZnRlcihm
dW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kKC4uLmNvbnRl
bnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFwcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDog
YW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVy
eTtcblxuICAgIGJlZm9yZSguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBiZWZvcmUo
ZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb25lKHdpdGhEYXRh
QW5kRXZlbnRzPzogYm9vbGVhbiwgZGVlcFdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbik6IEpR
dWVyeTtcblxuICAgIGRldGFjaChzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGVtcHR5
KCk6IEpRdWVyeTtcblxuICAgIGluc2VydEFmdGVyKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuICAg
IGluc2VydEJlZm9yZSh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmQoLi4uY29u
dGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgcHJlcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRt
bDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kVG8odGFyZ2V0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICByZW1vdmUoc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBs
YWNlQWxsKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZVdpdGgoZnVuYzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgdGV4dCgpOiBzdHJpbmc7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiBh
bnkpOiBKUXVlcnk7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiAoaW5kZXg6IG51bWJlciwgdGV4dDog
c3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b0FycmF5KCk6IGFueVtdO1xuXG4g
ICAgdW53cmFwKCk6IEpRdWVyeTtcblxuICAgIHdyYXAod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBK
UXVlcnk7XG4gICAgd3JhcChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgd3JhcEFsbCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBJbm5l
cih3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwSW5uZXIoZnVuYzogKGlu
ZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBl
YWNoKGZ1bmM6IChpbmRleDogYW55LCBlbGVtOiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICBnZXQoaW5kZXg/OiBudW1iZXIpOiBhbnk7XG5cbiAgICBpbmRleCgpOiBudW1iZXI7XG4g
ICAgaW5kZXgoc2VsZWN0b3I6IHN0cmluZyk6IG51bWJlcjtcbiAgICBpbmRleChlbGVtZW50OiBh
bnkpOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgbGVuZ3RoOiBudW1iZXI7XG4g
ICAgc2VsZWN0b3I6IHN0cmluZztcbiAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIFt4OiBudW1i
ZXJdOiBIVE1MRWxlbWVudDtcblxuICAgIC8vIFRyYXZlcnNpbmdcbiAgICBhZGQoc2VsZWN0b3I6
IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICBhZGQoLi4uZWxlbWVudHM6IGFu
eVtdKTogSlF1ZXJ5O1xuICAgIGFkZChodG1sOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkKG9i
ajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgY2hpbGRyZW4oc2VsZWN0b3I/OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgY2xvc2Vz
dChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogRWxlbWVudCk6IEpRdWVyeTtcbiAgICBjbG9z
ZXN0KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3QoZWxlbWVudDogYW55KTogSlF1
ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3JzOiBhbnksIGNvbnRleHQ/OiBFbGVtZW50KTogYW55
W107XG5cbiAgICBjb250ZW50cygpOiBKUXVlcnk7XG5cbiAgICBlbmQoKTogSlF1ZXJ5O1xuXG4g
ICAgZXEoaW5kZXg6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGZpbHRlcihzZWxlY3Rvcjogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIGZpbHRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGZpbHRlcihlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKG9iajog
SlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGZpbmQoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbmQob2JqOiBKUXVlcnkpOiBK
UXVlcnk7XG5cbiAgICBmaXJzdCgpOiBKUXVlcnk7XG5cbiAgICBoYXMoc2VsZWN0b3I6IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICBoYXMoY29udGFpbmVkOiBFbGVtZW50KTogSlF1ZXJ5O1xuXG4gICAg
aXMoc2VsZWN0b3I6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgaXMoZnVuYzogKGluZGV4OiBhbnkp
ID0+IGFueSk6IGJvb2xlYW47XG4gICAgaXMoZWxlbWVudDogYW55KTogYm9vbGVhbjtcbiAgICBp
cyhvYmo6IEpRdWVyeSk6IGJvb2xlYW47XG5cbiAgICBsYXN0KCk6IEpRdWVyeTtcblxuICAgIG1h
cChjYWxsYmFjazogKGluZGV4OiBhbnksIGRvbUVsZW1lbnQ6IEVsZW1lbnQpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIG5leHQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0
QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dFVudGlsKHNlbGVjdG9y
Pzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKGVsZW1l
bnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKG9i
aj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbm90KHNlbGVjdG9y
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbm90KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgbm90KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBub3Qob2JqOiBKUXVl
cnkpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXRQYXJlbnQoKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50
KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50cyhzZWxlY3Rvcj86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHBhcmVudHNVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmls
dGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChlbGVtZW50PzogRWxlbWVu
dCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChvYmo/OiBKUXVl
cnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXYoc2VsZWN0b3I/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xu
XG4gICAgcHJldlVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgcHJldlVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgcHJldlVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1
ZXJ5O1xuXG4gICAgc2libGluZ3Moc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBz
bGljZShzdGFydDogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICAvLyBVdGls
aXRpZXNcblxuICAgIHF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVl
KHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbiAg
ICBxdWV1ZShuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbn1cbmRlY2xhcmUgbW9k
dWxlIFwianF1ZXJ5XCIge1xuICAgIGV4cG9ydCA9ICQ7XG59XG5kZWNsYXJlIHZhciBqUXVlcnk6
IEpRdWVyeVN0YXRpYztcbmRlY2xhcmUgdmFyICQ6IEpRdWVyeVN0YXRpYztcbi8vIGxpYnMvYW5n
dWxhci9hbmd1bGFyLmQudHNcbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIEFuZ3VsYXIgSlMgMS4w
XG4vLyBQcm9qZWN0OiBodHRwOi8vYW5ndWxhcmpzLm9yZ1xuLy8gRGVmaW5pdGlvbnMgYnk6IERp
ZWdvIFZpbGFyIDxodHRwOi8vZ2l0aHViLmNvbS9kaWVnb3ZpbGFyPlxuLy8gRGVmaW5pdGlvbnM6
IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuXG5cbmRl
Y2xhcmUgdmFyIGFuZ3VsYXI6IG5nLklBbmd1bGFyU3RhdGljO1xuXG4vLyBTdXBwb3J0IGZvciBw
YWlubGVzcyBkZXBlbmRlbmN5IGluamVjdGlvblxuaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAk
aW5qZWN0OnN0cmluZ1tdO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBuZyBtb2R1
bGUgKGFuZ3VsYXIuanMpXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5kZWNsYXJlIG1vZHVsZSBu
ZyB7XG5cbiAgICAvLyBBbGwgc2VydmljZSBwcm92aWRlcnMgZXh0ZW5kIHRoaXMgaW50ZXJmYWNl
XG4gICAgaW50ZXJmYWNlIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICAkZ2V0OiBhbnk7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5ndWxhclN0YXRpY1xuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaVxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJQW5ndWxhclN0YXRpYyB7XG4gICAgICAgIGJpbmQoY29udGV4
dDogYW55LCBmbjogRnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogRnVuY3Rpb247XG4gICAgICAg
IGJvb3RzdHJhcChlbGVtZW50OiBzdHJpbmcsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVj
dG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEpRdWVyeSwgbW9kdWxlcz86
IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVu
dDogRWxlbWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAg
ICAgICBib290c3RyYXAoZWxlbWVudDogRG9jdW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8u
SUluamVjdG9yU2VydmljZTtcbiAgICAgICAgY29weShzb3VyY2U6IGFueSwgZGVzdGluYXRpb24/
OiBhbnkpOiBhbnk7XG4gICAgICAgIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnlTdGF0aWM7XG4g
ICAgICAgIGVxdWFscyh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBleHRlbmQoZGVzdGluYXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7XG4gICAg
ICAgIGZvckVhY2gob2JqOiBhbnksIGl0ZXJhdG9yOiAodmFsdWU6IGFueSwga2V5OiBhbnkpID0+
IGFueSwgY29udGV4dD86IGFueSk6IGFueTtcbiAgICAgICAgZnJvbUpzb24oanNvbjogc3RyaW5n
KTogYW55O1xuICAgICAgICBpZGVudGl0eShhcmc/OiBhbnkpOiBhbnk7XG4gICAgICAgIGluamVj
dG9yKG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgaXNB
cnJheSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEYXRlKHZhbHVlOiBhbnkpOiBi
b29sZWFuO1xuICAgICAgICBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAg
IGlzRWxlbWVudCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNGdW5jdGlvbih2YWx1
ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW47
XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1N0cmlu
Zyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNVbmRlZmluZWQodmFsdWU6IGFueSk6
IGJvb2xlYW47XG4gICAgICAgIGxvd2VyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAg
ICAgLyoqIGNvbnN0cnVjdCB5b3VyIGFuZ3VsYXIgYXBwbGljYXRpb25cblx0XHRvZmZpY2lhbCBk
b2NzOiBJbnRlcmZhY2UgZm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIgbW9kdWxlcy5cblx0XHRzZWU6
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG5cdFx0Ki9cbiAg
ICAgICAgbW9kdWxlKFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgeW91ciBtb2R1bGUgeW91IHdh
bnQgdG8gY3JlYXRlICovXG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAv
KiogbmFtZSBvZiBtb2R1bGVzIHlvdXJzIGRlcGVuZHMgb24gKi9cbiAgICAgICAgICAgIHJlcXVp
cmVzPzogc3RyaW5nW10sXG4gICAgICAgICAgICBjb25maWdGdW5jdGlvbj86IGFueSk6IElNb2R1
bGU7XG4gICAgICAgIG5vb3AoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICB0b0pzb24o
b2JqOiBhbnksIHByZXR0eT86IGJvb2xlYW4pOiBzdHJpbmc7XG4gICAgICAgIHVwcGVyY2FzZShz
dHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgZnVs
bDogc3RyaW5nO1xuICAgICAgICAgICAgbWFqb3I6IG51bWJlcjtcbiAgICAgICAgICAgIG1pbm9y
OiBudW1iZXI7XG4gICAgICAgICAgICBkb3Q6IG51bWJlcjtcbiAgICAgICAgICAgIGNvZGVuYW1l
OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gTW9kdWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2Fu
Z3VsYXIuTW9kdWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElNb2R1
bGUge1xuICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb25GYWN0b3J5OiBG
dW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGlubGlu
ZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihv
YmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcg
c2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVl
ZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNv
bmZpZyhjb25maWdGbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJl
IGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3Jr
IHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xu
ICAgICAgICBjb25maWcoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtc
biAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAg
ICAgICAgY29uc3RhbnQob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9s
bGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1
bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25z
dHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG9iamVjdCA6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2
ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0
cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAg
ZGlyZWN0aXZlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShuYW1l
OiBzdHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAg
ICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlb
XSk6IElNb2R1bGU7XG4gICAgICAgIGZhY3Rvcnkob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xu
ICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5RnVuY3Rpb246IEZ1bmN0
aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG9iamVjdDogT2Jq
ZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJv
dmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIHByb3ZpZGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcnVu
KGluaXRpYWxpemF0aW9uRnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcnVu
KGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZp
Y2UobmFtZTogc3RyaW5nLCBzZXJ2aWNlQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtc
biAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9y
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2Uob2JqZWN0OiBPYmplY3QpOiBJTW9k
dWxlO1xuICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xu
ICAgICAgICB2YWx1ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG5cbiAgICAgICAgLy8gUHJv
cGVydGllc1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlcXVpcmVzOiBzdHJpbmdb
XTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBdHRyaWJ1dGVzXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlLmRpcmVj
dGl2ZS5BdHRyaWJ1dGVzXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElB
dHRyaWJ1dGVzIHtcblx0Ly8gdGhpcyBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBhY2Nlc3Mg
dGhlIHNjb3BlZCBhdHRyaWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5IGVsZWdhbnRcblx0Ly8gYmVjYXVz
ZSB5b3UgaGF2ZSB0byB1c2UgYXR0cnNbJ2ZvbyddIGluc3RlYWQgb2YgYXR0cnMuZm9vIGJ1dCBJ
IGRvbid0IGtub3cgb2YgYSBiZXR0ZXIgd2F5XG5cdC8vIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBs
aW1pdGVkIHRvIHJldHVybiBzdHJpbmcgYnV0IGl0IGNyZWF0ZXMgdGhpcyBwcm9ibGVtOiBodHRw
Oi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xNzIwMTg1NC8xNjU2NTZcblx0W25hbWU6IHN0cmluZ106
IGFueTtcblxuICAgICAgICAvLyBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5
IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgdG8gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFu
aW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWRc
biAgICAgICAgLy8gZm9yIHRoZSBjbGFzcyBhZGRpdGlvbi5cbiAgICAgICAgJGFkZENsYXNzKGNs
YXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFJlbW92ZXMgdGhlIENTUyBjbGFz
cyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciBmcm9tIHRoZVxuICAg
ICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0
aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIGZvclxuICAgICAgICAvLyB0aGUgY2xhc3MgcmVtb3ZhbC5c
biAgICAgICAgJHJlbW92ZUNsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAg
IC8vIFNldCBET00gZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICAgICRzZXQoa2V5OiBz
dHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIE9ic2VydmVzIGFuIGludGVy
cG9sYXRlZCBhdHRyaWJ1dGUuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZlciBmdW5jdGlvbiB3aWxs
IGJlIGludm9rZWQgb25jZSBkdXJpbmcgdGhlIG5leHQgJGRpZ2VzdFxuICAgICAgICAvLyBmb2xs
b3dpbmcgY29tcGlsYXRpb24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hlbmV2ZXIg
dGhlXG4gICAgICAgIC8vIGludGVycG9sYXRlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAgICAkb2Jz
ZXJ2ZShuYW1lOiBzdHJpbmcsIGZuOih2YWx1ZT86YW55KT0+YW55KTogRnVuY3Rpb247XG5cbiAg
ICAgICAgLy8gQSBtYXAgb2YgRE9NIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzIHRvIHRoZSBub3Jt
YWxpemVkIG5hbWUuIFRoaXMgaXMgbmVlZGVkXG4gICAgICAgIC8vIHRvIGRvIHJldmVyc2UgbG9v
a3VwIGZyb20gbm9ybWFsaXplZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuXG4gICAgICAgICRh
dHRyOiBPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRm9y
bUNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
ZGlyZWN0aXZlOmZvcm0uRm9ybUNvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUZvcm1Db250cm9sbGVyIHtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFu
O1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAg
ICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAk
YWRkQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAg
ICAkcmVtb3ZlQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xu
ICAgICAgICAkc2V0RGlydHkoKTogdm9pZDtcbiAgICAgICAgJHNldFByaXN0aW5lKCk6IHZvaWQ7
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTmdNb2RlbENvbnRyb2xs
ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZl
Om5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSU5nTW9kZWxDb250cm9sbGVyIHtcbiAgICAgICAgJHJlbmRlcigpOiB2b2lkO1xu
ICAgICAgICAkc2V0VmFsaWRpdHkodmFsaWRhdGlvbkVycm9yS2V5OiBzdHJpbmcsIGlzVmFsaWQ6
IGJvb2xlYW4pOiB2b2lkO1xuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB2aWV3VmFs
dWUgYW5kIG1vZGVsVmFsdWUgdG8gYmUgYSBzdHJpbmcgYnV0IG90aGVyXG4gICAgICAgIC8vIHR5
cGVzIGRvIHdvcmsgYW5kIGl0J3MgY29tbW9uIHRvIHVzZSB0aGVtLlxuICAgICAgICAkc2V0Vmll
d1ZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgICAgICAkdmlld1ZhbHVlOiBhbnk7XG5cbiAg
ICAgICAgJG1vZGVsVmFsdWU6IGFueTtcblxuICAgICAgICAkcGFyc2VyczogSU1vZGVsUGFyc2Vy
W107XG4gICAgICAgICRmb3JtYXR0ZXJzOiBJTW9kZWxGb3JtYXR0ZXJbXTtcbiAgICAgICAgJGVy
cm9yOiBhbnk7XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBi
b29sZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29s
ZWFuO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxQYXJzZXIge1xuICAgICAgICAodmFs
dWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsRm9ybWF0dGVyIHtc
biAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gU2NvcGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJHJvb3RTY29wZS5TY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJU2NvcGUge1xuICAgICAgICAkYXBwbHkoKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhw
OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IChzY29wZTogSVNjb3BlKSA9PiBh
bnkpOiBhbnk7XG5cbiAgICAgICAgJGJyb2FkY2FzdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFu
eVtdKTogSUFuZ3VsYXJFdmVudDtcbiAgICAgICAgJGRlc3Ryb3koKTogdm9pZDtcbiAgICAgICAg
JGRpZ2VzdCgpOiB2b2lkO1xuICAgICAgICAkZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFu
eVtdKTogSUFuZ3VsYXJFdmVudDtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhw
IGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAg
ICAgICRldmFsKGV4cHJlc3Npb246IHN0cmluZywgYXJncz86IE9iamVjdCk6IGFueTtcbiAgICAg
ICAgJGV2YWwoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgYXJncz86IE9iamVj
dCk6IGFueTtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFs
LCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsQXN5
bmMoZXhwcmVzc2lvbjogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNz
aW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogdm9pZDtcblxuICAgICAgICAvLyBEZWZhdWx0
cyB0byBmYWxzZSBieSB0aGUgaW1wbGVtZW50YXRpb24gY2hlY2tpbmcgc3RyYXRlZ3lcbiAgICAg
ICAgJG5ldyhpc29sYXRlPzogYm9vbGVhbik6IElTY29wZTtcblxuICAgICAgICAkb24obmFtZTog
c3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBJQW5ndWxhckV2ZW50LCAuLi5hcmdzOiBhbnlbXSkg
PT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3Ry
aW5nLCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rp
b247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiAo
bmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmpl
Y3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhw
cmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVj
dEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHBy
ZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55
LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5Pzog
Ym9vbGVhbik6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHBy
ZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwg
c2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaENvbGxlY3Rp
b24od2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcjogKG5l
d1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0
aW9uO1xuXG4gICAgICAgICRwYXJlbnQ6IElTY29wZTtcblxuICAgICAgICAkaWQ6IG51bWJlcjtc
blxuICAgICAgICAvLyBIaWRkZW4gbWVtYmVyc1xuICAgICAgICAkJGlzb2xhdGVCaW5kaW5nczog
YW55O1xuICAgICAgICAkJHBoYXNlOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmd1
bGFyRXZlbnQge1xuICAgICAgICB0YXJnZXRTY29wZTogSVNjb3BlO1xuICAgICAgICBjdXJyZW50
U2NvcGU6IElTY29wZTtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBwcmV2ZW50RGVm
YXVsdDogRnVuY3Rpb247XG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAg
ICAgICAgLy8gQXZhaWxhYmxlIG9ubHkgZXZlbnRzIHRoYXQgd2VyZSAkZW1pdC10ZWRcbiAgICAg
ICAgc3RvcFByb3BhZ2F0aW9uPzogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gV2luZG93U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kd2luZG93XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50
ZXJmYWNlIElXaW5kb3dTZXJ2aWNlIGV4dGVuZHMgV2luZG93IHt9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBCcm93c2VyU2VydmljZVxuICAgIC8vIFRPRE8gdW5kb2N1bWVudGVk
LCBzbyB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQnJvd3NlclNlcnZpY2Uge31cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIFRpbWVvdXRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0aW1lb3V0XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElUaW1lb3V0U2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlv
biwgZGVsYXk/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47
XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnZhbFNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVydmFsXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElJbnRlcnZhbFNlcnZpY2Uge1xuICAgICAg
ICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5OiBudW1iZXIsIGNvdW50PzogbnVtYmVyLCBpbnZva2VB
cHBseT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTog
SVByb21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gRmlsdGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kZmlsdGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRmaWx0ZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJRmlsdGVyU2VydmljZSB7XG4gICAgICAgIChuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbjtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUZpbHRlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQ
cm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeTog
RnVuY3Rpb24pOiBJU2VydmljZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIExvY2FsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGxvY2FsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJTG9jYWxlU2VydmljZSB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG5cbiAgICAgICAgLy8g
VGhlc2UgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIC8vIENoZWNrIGFuZ3VsYXIncyBpMThu
IGZpbGVzIGZvciBleGVtcGxlc1xuICAgICAgICBOVU1CRVJfRk9STUFUUzogSUxvY2FsZU51bWJl
ckZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIERBVEVUSU1FX0ZPUk1BVFM6IElMb2NhbGVEYXRl
VGltZUZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIHBsdXJhbENhdDogKG51bTogYW55KSA9PiBz
dHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlw
dG9yIHtcbiAgICAgICAgREVDSU1BTF9TRVA6IHN0cmluZztcbiAgICAgICAgR1JPVVBfU0VQOiBz
dHJpbmc7XG4gICAgICAgIFBBVFRFUk5TOiBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3Jb
XTtcbiAgICAgICAgQ1VSUkVOQ1lfU1lNOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvciB7XG4gICAgICAgIG1pbkludDogbnVtYmVy
O1xuICAgICAgICBtaW5GcmFjOiBudW1iZXI7XG4gICAgICAgIG1heEZyYWM6IG51bWJlcjtcbiAg
ICAgICAgcG9zUHJlOiBzdHJpbmc7XG4gICAgICAgIHBvc1N1Zjogc3RyaW5nO1xuICAgICAgICBu
ZWdQcmU6IHN0cmluZztcbiAgICAgICAgbmVnU3VmOiBzdHJpbmc7XG4gICAgICAgIGdTaXplOiBu
dW1iZXI7XG4gICAgICAgIGxnU2l6ZTogbnVtYmVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJ
TG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgTU9OVEg6IHN0cmluZ1td
O1xuICAgICAgICBTSE9SVE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgREFZOiBzdHJpbmdbXTtc
biAgICAgICAgU0hPUlREQVk6IHN0cmluZ1tdO1xuICAgICAgICBBTVBNUzogc3RyaW5nW107XG4g
ICAgICAgIG1lZGl1bTogc3RyaW5nO1xuICAgICAgICBzaG9ydDogc3RyaW5nO1xuICAgICAgICBm
dWxsRGF0ZTogc3RyaW5nO1xuICAgICAgICBsb25nRGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRp
dW1EYXRlOiBzdHJpbmc7XG4gICAgICAgIHNob3J0RGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRp
dW1UaW1lOiBzdHJpbmc7XG4gICAgICAgIHNob3J0VGltZTogc3RyaW5nO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvZ1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvZ1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJTG9nU2VydmljZSB7XG4gICAgICAgIGRlYnVnOiBJTG9nQ2FsbDtcbiAg
ICAgICAgZXJyb3I6IElMb2dDYWxsO1xuICAgICAgICBpbmZvOiBJTG9nQ2FsbDtcbiAgICAgICAg
bG9nOiBJTG9nQ2FsbDtcbiAgICAgICAgd2FybjogSUxvZ0NhbGw7XG4gICAgfVxuXG4gICAgLy8g
V2UgZGVmaW5lIHRoaXMgYXMgc2VwYXJldGUgaW50ZXJmYWNlIHNvIHdlIGNhbiByZW9wZW4gaXQg
bGF0ZXIgZm9yXG4gICAgLy8gdGhlIG5nTW9jayBtb2R1bGUuXG4gICAgaW50ZXJmYWNlIElMb2dD
YWxsIHtcbiAgICAgICAgKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBQYXJzZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHBhcnNlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElQYXJzZVNlcnZpY2Uge1xuICAgICAgICAoZXhwcmVzc2lvbjogc3RyaW5n
KTogSUNvbXBpbGVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVk
RXhwcmVzc2lvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtc
blxuICAgICAgICAvLyBJZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIHVuZGVmaW5lZCBpcyBnb25u
YSBiZSB1c2VkIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAvLyBkb2VzIG5vdCBj
aGVjayB0aGUgcGFyYW1ldGVyLiBMZXQncyBmb3JjZSBhIHZhbHVlIGZvciBjb25zaXN0ZW5jeS4g
SWYgY29uc3VtZXJcbiAgICAgICAgLy8gd2hhbnRzIHRvIHVuZGVmaW5lIGl0LCBwYXNzIHRoZSB1
bmRlZmluZWQgdmFsdWUgZXhwbGljaXRseS5cbiAgICAgICAgYXNzaWduKGNvbnRleHQ6IGFueSwg
dmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBMb2NhdGlvblNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGxvY2F0aW9uXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRsb2NhdGlvblByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvZ3VpZGUvZGV2X2d1aWRlLnNlcnZpY2VzLiRsb2NhdGlvblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJTG9jYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgYWJzVXJsKCk6
IHN0cmluZztcbiAgICAgICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2gobmV3SGFzaDog
c3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgaG9zdCgpOiBzdHJpbmc7XG4gICAg
ICAgIHBhdGgoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKG5ld1BhdGg6IHN0cmluZyk6IElMb2Nh
dGlvblNlcnZpY2U7XG4gICAgICAgIHBvcnQoKTogbnVtYmVyO1xuICAgICAgICBwcm90b2NvbCgp
OiBzdHJpbmc7XG4gICAgICAgIHJlcGxhY2UoKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAg
c2VhcmNoKCk6IGFueTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcnNNYXA6IGFueSk6IElMb2Nh
dGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0ZXI6IHN0cmluZywgcGFyYW1ldGVy
VmFsdWU6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHVybCgpOiBzdHJpbmc7XG4g
ICAgICAgIHVybCh1cmw6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElMb2NhdGlvblByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4g
ICAgICAgIGhhc2hQcmVmaXgoKTogc3RyaW5nO1xuICAgICAgICBoYXNoUHJlZml4KHByZWZpeDog
c3RyaW5nKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgICAgIGh0bWw1TW9kZSgpOiBib29sZWFu
O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgcGFyYW1ldGVyIGlzIHN0
cmluZywgYnV0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHRlc3RzIGl0IGFzIGJvb2xlYW4s
IHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2VcbiAgICAgICAgLy8gc2luY2UgdGhpcyBpcyBhIHRvZ2ds
ZXJcbiAgICAgICAgaHRtbDVNb2RlKGFjdGl2ZTogYm9vbGVhbik6IElMb2NhdGlvblByb3ZpZGVy
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERvY3VtZW50U2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZG9jdW1lbnRc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSURvY3VtZW50U2VydmljZSBl
eHRlbmRzIERvY3VtZW50IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBFeGNl
cHRpb25IYW5kbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kZXhjZXB0aW9uSGFuZGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGlu
dGVyZmFjZSBJRXhjZXB0aW9uSGFuZGxlclNlcnZpY2Uge1xuICAgICAgICAoZXhjZXB0aW9uOiBF
cnJvciwgY2F1c2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIFJvb3RFbGVtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdEVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSVJvb3RFbGVtZW50U2VydmljZSBleHRlbmRzIEpRdWVyeSB7fVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHFcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSVFTZXJ2aWNlIHtcbiAgICAgICAgYWxsKHByb21pc2VzOiBJUHJvbWlzZTxh
bnk+W10pOiBJUHJvbWlzZTxhbnlbXT47XG4gICAgICAgIGRlZmVyPFQ+KCk6IElEZWZlcnJlZDxU
PjtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IElQcm9taXNlPHZvaWQ+O1xuICAgICAg
ICB3aGVuPFQ+KHZhbHVlOiBUKTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElQcm9taXNlPFQ+IHtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChw
cm9taXNlVmFsdWU6IFQpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86
IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBh
bnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2Fs
bGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxi
YWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkp
ID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nl
c3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86
IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkg
PT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG5cblxuICAgICAgICBjYXRjaDxUUmVzdWx0Pihv
blJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9t
aXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29u
OiBhbnkpID0+IElQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAg
IGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCk6IElQ
cm9taXNlPFRSZXN1bHQ+O1xuXG4gICAgICAgIGZpbmFsbHk8VFJlc3VsdD4oZmluYWxseUNhbGxi
YWNrOiAoKT0+YW55KTpJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SURlZmVycmVkPFQ+IHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZT86IFQpOiB2b2lkO1xuICAgICAg
ICByZWplY3QocmVhc29uPzogYW55KTogdm9pZDtcbiAgICAgICAgbm90aWZ5KHN0YXRlPzphbnkp
OiB2b2lkO1xuICAgICAgICBwcm9taXNlOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmNob3JTY3JvbGxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRhbmNob3JTY3JvbGxcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFNlcnZpY2Uge1xuICAgICAg
ICAoKTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFByb3ZpZGVy
IGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRpc2FibGVBdXRvU2Nyb2xsaW5n
KCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ2FjaGVG
YWN0b3J5U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kY2FjaGVGYWN0b3J5XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElD
YWNoZUZhY3RvcnlTZXJ2aWNlIHtcbiAgICAgICAgLy8gTGV0cyBub3QgZm9jZSB0aGUgb3B0aW9u
c01hcCB0byBoYXZlIHRoZSBjYXBhY2l0eSBtZW1iZXIuIEV2ZW4gdGhvdWdoXG4gICAgICAgIC8v
IGl0J3MgdGhlIE9OTFkgb3B0aW9uIGNvbnNpZGVyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRv
ZGF5LCBhIGNvbnN1bWVyXG4gICAgICAgIC8vIG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGFzc29j
aWF0ZSBzb21lIG90aGVyIG9wdGlvbnMgdG8gdGhlIGNhY2hlIG9iamVjdC5cbiAgICAgICAgLy8o
Y2FjaGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogQ2Fj
aGVPYmplY3Q7XG4gICAgICAgIChjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFj
aXR5OiBudW1iZXI7IH0pOiBJQ2FjaGVPYmplY3Q7XG5cbiAgICAgICAgLy8gTWV0aG9kcyBiZWxs
b3cgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIGluZm8oKTogYW55O1xuICAgICAgICBnZXQg
KGNhY2hlSWQ6IHN0cmluZyk6IElDYWNoZU9iamVjdDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SUNhY2hlT2JqZWN0IHtcbiAgICAgICAgaW5mbygpOiB7XG4gICAgICAgICAgICBpZDogc3RyaW5n
O1xuICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuXG4gICAgICAgICAgICAvLyBOb3QgZ2FyYW50
ZWVkIHRvIGhhdmUsIHNpbmNlIGl0J3MgYSBub24tbWFuZGF0b3J5IG9wdGlvblxuICAgICAgICAg
ICAgLy9jYXBhY2l0eTogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICBwdXQoa2V5OiBzdHJp
bmcsIHZhbHVlPzogYW55KTogdm9pZDtcbiAgICAgICAgZ2V0IChrZXk6IHN0cmluZyk6IGFueTtc
biAgICAgICAgcmVtb3ZlKGtleTogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgcmVtb3ZlQWxsKCk6
IHZvaWQ7XG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBDb21waWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElDb21waWxlU2VydmljZSB7XG4gICAgICAgIChlbGVtZW50OiBzdHJp
bmcsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5Pzog
bnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogRWxl
bWVudCwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/
OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBK
UXVlcnksIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5
PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJQ29tcGlsZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
IGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSUNv
bXBpbGVQcm92aWRlcjtcblxuICAgICAgICAvLyBVbmRvY3VtZW50ZWQsIGJ1dCBpdCBpcyB0aGVy
ZS4uLlxuICAgICAgICBkaXJlY3RpdmUoZGlyZWN0aXZlc01hcDogYW55KTogSUNvbXBpbGVQcm92
aWRlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uIHtc
biAgICAgICAgLy8gTGV0J3MgaGludCBidXQgbm90IGZvcmNlIGNsb25lQXR0YWNoRm4ncyBzaWdu
YXR1cmVcbiAgICAgICAgKHNjb3BlOiBJU2NvcGUsIGNsb25lQXR0YWNoRm4/OiAoY2xvbmVkRWxl
bWVudD86IEpRdWVyeSwgc2NvcGU/OiBJU2NvcGUpID0+IGFueSk6IEpRdWVyeTtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb250cm9sbGVyU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclByb3ZpZGVy
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyU2Vydmlj
ZSB7XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc3RhdGUg
dGhpcywgbG9jYWxzIGFyZSBvcHRpb25hbFxuICAgICAgICAoY29udHJvbGxlckNvbnN0cnVjdG9y
OiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICAoY29udHJvbGxlck5hbWU6
IHN0cmluZywgbG9jYWxzPzogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29u
dHJvbGxlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lz
dGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IHZvaWQ7
XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZGVwZW5kZW5jeUFubm90YWRlZENvbnN0
cnVjdG9yOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSHR0cFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGh0dHBcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBT
ZXJ2aWNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgbW9ldGhvZCBhbmQgdXJsIG11c3QgYmUgcHJv
dmlkZWQuLi5cbiAgICAgICAgKGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiBJSHR0cFByb21pc2U8
YW55PjtcbiAgICAgICAgZ2V0ICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElI
dHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBkZWxldGUgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29u
ZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGhlYWQodXJsOiBzdHJpbmcs
IFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAganNvbnAo
dXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAg
ICAgICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTog
SUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHB1dCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBS
ZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlZmF1bHRz
OiBJUmVxdWVzdENvbmZpZztcblxuICAgICAgICAvLyBGb3IgZGVidWdnaW5nLCBCVVQgaXQgaXMg
ZG9jdW1lbnRlZCBhcyBwdWJsaWMsIHNvLi4uXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0czogYW55
W107XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBqdXN0IGZvciBoaW50aW5nLlxuICAgIC8vIFNv
bWUgb3BldGlvbnMgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gdGhlIHJlcXVl
c3QuXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwI1Vz
YWdlIGZvciBvcHRpb25zIGV4cGxhbmF0aW9uc1xuICAgIGludGVyZmFjZSBJUmVxdWVzdENvbmZp
ZyB7XG4gICAgICAgIG1ldGhvZDogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAg
ICAgcGFyYW1zPzogYW55O1xuXG4gICAgICAgIC8vIFhYWCBpdCBoYXMgaXQncyBvd24gc3RydWN0
dXJlLi4uICBwZXJoYXBzIHdlIHNob3VsZCBkZWZpbmUgaXQgaW4gdGhlIGZ1dHVyZVxuICAgICAg
ICBoZWFkZXJzPzogYW55O1xuXG4gICAgICAgIGNhY2hlPzogYW55O1xuICAgICAgICB3aXRoQ3Jl
ZGVudGlhbHM/OiBib29sZWFuO1xuXG4gICAgICAgIC8vIFRoZXNlIGFjY2VwdCBtdWx0aXBsZSB0
eXBlcywgc28gbGV0J3MgZGVmaW5lIHRoZW0gYXMgYW55XG4gICAgICAgIGRhdGE/OiBhbnk7XG4g
ICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJlc3BvbnNl
PzogYW55O1xuICAgICAgICB0aW1lb3V0PzogYW55OyAvLyBudW1iZXIgfCBwcm9taXNlXG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+IHtcbiAgICAgICAgKGRh
dGE6IFQsIHN0YXR1czogbnVtYmVyLCBoZWFkZXJzOiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBz
dHJpbmcsIGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPiB7XG4gICAgICAgIGRhdGE/OiBUO1xuICAg
ICAgICBzdGF0dXM/OiBudW1iZXI7XG4gICAgICAgIGhlYWRlcnM/OiAoaGVhZGVyTmFtZTogc3Ry
aW5nKSA9PiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZz86IElSZXF1ZXN0Q29uZmlnO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2U8VD4gZXh0ZW5kcyBJUHJvbWlzZTxUPiB7XG4g
ICAgICAgIHN1Y2Nlc3MoY2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQ
cm9taXNlPFQ+O1xuICAgICAgICBlcnJvcihjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8
VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxi
YWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBUUmVzdWx0LCBl
cnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4g
YW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0Nh
bGxiYWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBJUHJvbWlz
ZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJh
Y2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJSHR0cFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRl
ZmF1bHRzOiBJUmVxdWVzdENvbmZpZztcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAg
ICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvcnM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIEh0dHBCYWNrZW5kU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cEJhY2tlbmRcbiAgICAvLyBZb3Ugc2hvdWxk
IG5ldmVyIG5lZWQgdG8gdXNlIHRoaXMgc2VydmljZSBkaXJlY3RseS5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBCYWNrZW5kU2VydmljZSB7XG4gICAgICAgIC8v
IFhYWCBQZXJoYXBzIGRlZmluZSBjYWxsYmFjayBzaWduYXR1cmUgaW4gdGhlIGZ1dHVyZVxuICAg
ICAgICAobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBwb3N0PzogYW55LCBjYWxsYmFjaz86
IEZ1bmN0aW9uLCBoZWFkZXJzPzogYW55LCB0aW1lb3V0PzogbnVtYmVyLCB3aXRoQ3JlZGVudGlh
bHM/OiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBJbnRlcnBvbGF0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGludGVycG9sYXRlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVNlcnZpY2Uge1xuICAgICAgICAodGV4dDogc3Ry
aW5nLCBtdXN0SGF2ZUV4cHJlc3Npb24/OiBib29sZWFuKTogSUludGVycG9sYXRpb25GdW5jdGlv
bjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2woKTog
c3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uIHtc
biAgICAgICAgKGNvbnRleHQ6IGFueSk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SUludGVycG9sYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAg
c3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCh2YWx1ZTogc3RyaW5n
KTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4g
ICAgICAgIGVuZFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGVtcGxhdGVDYWNoZVNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRlbXBsYXRl
Q2FjaGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlQ2Fj
aGVTZXJ2aWNlIGV4dGVuZHMgSUNhY2hlT2JqZWN0IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBSb290U2NvcGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSVJvb3RTY29wZVNlcnZpY2UgZXh0ZW5kcyBJU2NvcGUge31cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRpbnRl
cmZhY2UgSVNDRVNlcnZpY2Uge1xuXHRcdGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRy
dXN0ZWQ6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkQ3NzKHZhbHVlOiBhbnkpOiBhbnk7XG5c
dFx0Z2V0VHJ1c3RlZEh0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSnModmFs
dWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFu
eTtcblx0XHRnZXRUcnVzdGVkVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0cGFyc2UodHlwZTog
c3RyaW5nLCBleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkg
PT4gYW55O1xuXHRcdHBhcnNlQXNDc3MoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFu
eSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzSHRtbChleHByZXNzaW9uOiBzdHJp
bmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNKcyhl
eHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xu
XHRcdHBhcnNlQXNSZXNvdXJjZVVybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55
LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNVcmwoZXhwcmVzc2lvbjogc3RyaW5n
KTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHR0cnVzdEFzKHR5cGU6
IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSHRtbCh2YWx1ZTogYW55KTog
YW55O1xuXHRcdHRydXN0QXNKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNSZXNvdXJj
ZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNVcmwodmFsdWU6IGFueSk6IGFueTtc
blx0XHRpc0VuYWJsZWQoKTogYm9vbGVhbjtcblx0fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gU0NFUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJHNjZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElTQ0VQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBlbmFi
bGVkKHZhbHVlOiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0ZVNlcnZpY2Uge1xuICAgICAgICBnZXRUcnVzdGVkKHR5
cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG4gICAgICAgIHRydXN0QXModHlw
ZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICB2YWx1ZU9mKHZhbHVlOiBhbnkp
OiBhbnk7XG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VEZWxl
Z2F0ZVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRzY2VEZWxlZ2F0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElTQ0VEZWxlZ2F0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAg
ICAgIHJlc291cmNlVXJsQmxhY2tsaXN0KGJsYWNrbGlzdDogYW55W10pOiB2b2lkO1xuICAgICAg
ICByZXNvdXJjZVVybFdoaXRlbGlzdCh3aGl0ZWxpc3Q6IGFueVtdKTogdm9pZDtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEaXJlY3RpdmVcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmVc
biAgICAvLyBhbmQgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaXJlY3RpdmVcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGludGVyZmFjZSBJRGlyZWN0aXZle1xuICAgICAg
ICBjb21waWxlPzpcbiAgICAgICAgICAgICh0ZW1wbGF0ZUVsZW1lbnQ6IGFueSxcbiAgICAgICAg
ICAgIHRlbXBsYXRlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB0cmFuc2Ns
dWRlOiAoc2NvcGU6IElTY29wZSwgY2xvbmVMaW5raW5nRm46IEZ1bmN0aW9uKSA9PiB2b2lkXG4g
ICAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgY29udHJvbGxlcj86IGFueTtcbiAgICAgICAg
Y29udHJvbGxlckFzPzogc3RyaW5nO1xuICAgICAgICBsaW5rPzpcbiAgICAgICAgICAgIChzY29w
ZTogSVNjb3BlLFxuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50OiBhbnksXG4gICAgICAgICAg
ICBpbnN0YW5jZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgY29udHJvbGxl
cjogYW55XG4gICAgICAgICAgICApID0+IHZvaWQ7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4g
ICAgICAgIHByaW9yaXR5PzogbnVtYmVyO1xuICAgICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAg
ICAgICAgcmVxdWlyZT86IGFueTtcbiAgICAgICAgcmVzdHJpY3Q/OiBzdHJpbmc7XG4gICAgICAg
IHNjb3BlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGVV
cmw/OiBhbnk7XG4gICAgICAgIHRlcm1pbmFsPzogYm9vbGVhbjtcbiAgICAgICAgdHJhbnNjbHVk
ZT86IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhbmd1bGFy
LmVsZW1lbnRcbiAgICAvLyB3aGVuIGNhbGxpbmcgYW5ndWxhci5lbGVtZW50LCBhbmd1bGFyIHJl
dHVybnMgYSBqUXVlcnkgb2JqZWN0LFxuICAgIC8vIGF1Z21lbnRlZCB3aXRoIGFkZGl0aW9uYWwg
bWV0aG9kcyBsaWtlIGUuZy4gc2NvcGUuXG4gICAgLy8gc2VlOiBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9hbmd1bGFyLmVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeVN0YXRpYyBleHRlbmRzIEpRdWVyeVN0YXRpYyB7XG4g
ICAgICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSUF1Z21lbnRlZEpRdWVy
eTtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAg
ICAob2JqZWN0OiB7fSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50QXJyYXk6
IEVsZW1lbnRbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IEpRdWVyeSk6
IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbik6IElBdWdtZW50ZWRK
UXVlcnk7XG4gICAgICAgIChhcnJheTogYW55W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAg
ICAoKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUF1Z21lbnRl
ZEpRdWVyeSBleHRlbmRzIEpRdWVyeSB7XG4gICAgICAgIC8vIFRPRE86IGV2ZW50cywgaG93IHRv
IGRlZmluZT9cbiAgICAgICAgLy8kZGVzdHJveVxuXG4gICAgICAgIGZpbmQoc2VsZWN0b3I6IHN0
cmluZyk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQoZWxlbWVudDogYW55KTogSUF1
Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChvYmo6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVl
cnk7XG5cbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlu
amVjdG9yKCk6IGFueTtcbiAgICAgICAgc2NvcGUoKTogSVNjb3BlO1xuXG4gICAgICAgIGluaGVy
aXRlZERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgICAgIGluaGVy
aXRlZERhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICAgICAg
aW5oZXJpdGVkRGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cblxuICAgIH1cblxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQVVUTyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgZXhwb3J0IG1vZHVsZSBhdXRvIHtcblxuICAgICAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgICAgICAvLyBJbmplY3RvclNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJGluamVjdG9yXG4gICAgICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJSW5qZWN0b3JTZXJ2aWNlIHtcbiAgICAgICAg
ICAgIGFubm90YXRlKGZuOiBGdW5jdGlvbik6IHN0cmluZ1tdO1xuICAgICAgICAgICAgYW5ub3Rh
dGUoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogc3RyaW5nW107XG4gICAgICAgICAg
ICBnZXQgKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgICAgIGluc3RhbnRpYXRlKHR5cGVD
b25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgICAgIGlu
dm9rZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBhbnk7XG4gICAgICAgICAgICBp
bnZva2UoZnVuYzogRnVuY3Rpb24sIGNvbnRleHQ/OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtc
biAgICAgICAgfVxuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIFByb3ZpZGVT
ZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRP
LiRwcm92aWRlXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJUHJv
dmlkZVNlcnZpY2Uge1xuICAgICAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGl0IHJldHVy
bnMgdGhlIHJlZ2lzdGVyZWQgaW5zdGFuY2UsIGJ1dCBhY3R1YWxcbiAgICAgICAgICAgIC8vIGlt
cGxlbWVudGF0aW9uIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAgICAgICAgICAgIC8vIGNv
bnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgICAgIGNvbnN0
YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgICAgIGRlY29y
YXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICAg
ICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9ySW5saW5lOiBhbnlbXSk6IHZvaWQ7
XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlv
bjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgZmFjdG9yeShu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IG5nLklTZXJ2aWNl
UHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBu
Zy5JU2VydmljZVByb3ZpZGVyKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHBy
b3ZpZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9u
KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBjb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAg
ICAgdmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogbmcuSVNlcnZpY2VQcm92aWRlcjtc
biAgICAgICAgfVxuXG4gICAgfVxufVxuLy8gbW9kZWxzL1RvZG9JdGVtLnRzXG5cbm1vZHVsZSB0
b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9JdGVtIHtc
biAgICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyxc
biAgICAgICAgICAgIHB1YmxpYyBjb21wbGV0ZWQ6IGJvb2xlYW5cbiAgICAgICAgICAgICkgeyB9
XG4gICAgfVxufVxuLy8gaW50ZXJmYWNlcy9JVG9kb1Njb3BlLnRzXG5cbm1vZHVsZSB0b2RvcyB7
XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TY29wZSBleHRlbmRzIG5nLklTY29wZSB7XG5cdFx0
dG9kb3M6IFRvZG9JdGVtW107XG5cdFx0bmV3VG9kbzogc3RyaW5nO1xuXHRcdGVkaXRlZFRvZG86
IFRvZG9JdGVtO1xuXHRcdG9yaWdpbmFsVG9kbzogVG9kb0l0ZW07XG5cdFx0cmVtYWluaW5nQ291
bnQ6IG51bWJlcjtcblx0XHRkb25lQ291bnQ6IG51bWJlcjtcblx0XHRhbGxDaGVja2VkOiBib29s
ZWFuO1xuXHRcdHJldmVydGVkOiBib29sZWFuO1xuXHRcdHN0YXR1c0ZpbHRlcjogeyBjb21wbGV0
ZWQ/OiBib29sZWFuIH07XG5cdFx0bG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2U7XG5cdFx0
dm06IFRvZG9DdHJsO1xuXHR9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU3RvcmFnZS50c1xuXG5t
b2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU3RvcmFnZSB7XG5cdFx0Z2V0
ICgpOiBUb2RvSXRlbVtdO1xuXHRcdHB1dCh0b2RvczogVG9kb0l0ZW1bXSk7XG5cdH1cbn0vLyBk
aXJlY3RpdmVzL1RvZG9Gb2N1cy50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7
XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZWxlbWVu
dCBpdCBpcyBhcHBsaWVkIHRvIHdoZW4gdGhlIGV4cHJlc3Npb24gaXQgYmluZHMgdG8gZXZhbHVh
dGVzIHRvIHRydWUuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0aW1lb3V0
OiBuZy5JVGltZW91dFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRc
dFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6
IGFueSkgPT4ge1xuXHRcdFx0XHQkc2NvcGUuJHdhdGNoKGF0dHJpYnV0ZXMudG9kb0ZvY3VzLCBu
ZXd2YWwgPT4ge1xuXHRcdFx0XHRcdGlmIChuZXd2YWwpIHtcblx0XHRcdFx0XHRcdCR0aW1lb3V0
KCgpID0+IGVsZW1lbnRbMF0uZm9jdXMoKSwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRc
dFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHRvZG9Gb2N1cy4kaW5qZWN0ID0gWyck
dGltZW91dCddO1xuXG59Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1ci50c1xuXG5tb2R1bGUgdG9kb3Mg
e1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIERpcmVjdGl2ZSB0aGF0IGV4
ZWN1dGVzIGFuIGV4cHJlc3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIGxv
c2VzIGZvY3VzLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b2RvQmx1cigpOiBuZy5J
RGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbms6ICgkc2NvcGU6
IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcbiAgICAg
ICAgICAgICAgICBlbGVtZW50LmJpbmQoJ2JsdXInLCAoKSA9PiB7ICRzY29wZS4kYXBwbHkoYXR0
cmlidXRlcy50b2RvQmx1cik7IH0pO1xuICAgICAgICAgICAgICAgICRzY29wZS4kb24oJyRkZXN0
cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgnYmx1cicpOyB9KTtcbiAgICAgICAgICAgIH1c
biAgICAgICAgfTtcbiAgICB9XG59XG4vLyBkaXJlY3RpdmVzL1RvZG9Fc2NhcGUudHNcblxubW9k
dWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVTQ0FQRV9LRVkgPSAyNztc
blxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgY2FuY2VscyBlZGl0aW5nIGEgdG9kbyBpZiB0
aGUgdXNlciBwcmVzc2VzIHRoZSBFc2Mga2V5LlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRv
ZG9Fc2NhcGUoKTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgk
c2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtc
blx0XHRcdFx0ZWxlbWVudC5iaW5kKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0
aWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtcblx0XHRcdFx0XHRcdCRzY29wZS4k
YXBwbHkoYXR0cmlidXRlcy50b2RvRXNjYXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xu
XG5cdFx0XHRcdCRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgn
a2V5ZG93bicpOyB9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4vLyBzZXJ2aWNlcy9Ub2Rv
U3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8q
KlxuICAgICAqIFNlcnZpY2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJldHJpZXZlcyBUT0RPcyBmcm9t
IGxvY2FsU3RvcmFnZS5cbiAgICAgKi9cbiAgICBleHBvcnQgY2xhc3MgVG9kb1N0b3JhZ2UgaW1w
bGVtZW50cyBJVG9kb1N0b3JhZ2Uge1xuXG4gICAgICAgIFNUT1JBR0VfSUQgPSAndG9kb3MtYW5n
dWxhcmpzLXR5cGVzY3JpcHQnO1xuXG4gICAgICAgIGdldCAoKTogVG9kb0l0ZW1bXSB7XG4gICAg
ICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JB
R0VfSUQpIHx8ICdbXScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHV0KHRvZG9zOiBUb2RvSXRl
bVtdKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQs
IEpTT04uc3RyaW5naWZ5KHRvZG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG59Ly8gY29udHJvbGxl
cnMvVG9kb0N0cmwudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8q
KlxuXHQgKiBUaGUgbWFpbiBjb250cm9sbGVyIGZvciB0aGUgYXBwLiBUaGUgY29udHJvbGxlcjpc
blx0ICogLSByZXRyaWV2ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2RlbCB2aWEgdGhlIHRvZG9TdG9y
YWdlIHNlcnZpY2Vcblx0ICogLSBleHBvc2VzIHRoZSBtb2RlbCB0byB0aGUgdGVtcGxhdGUgYW5k
IHByb3ZpZGVzIGV2ZW50IGhhbmRsZXJzXG5cdCAqL1xuXHRleHBvcnQgY2xhc3MgVG9kb0N0cmwg
e1xuXG5cdFx0cHJpdmF0ZSB0b2RvczogVG9kb0l0ZW1bXTtcblxuXHRcdC8vICRpbmplY3QgYW5u
b3RhdGlvbi5cblx0XHQvLyBJdCBwcm92aWRlcyAkaW5qZWN0b3Igd2l0aCBpbmZvcm1hdGlvbiBh
Ym91dCBkZXBlbmRlbmNpZXMgdG8gYmUgaW5qZWN0ZWQgaW50byBjb25zdHJ1Y3RvclxuXHRcdC8v
IGl0IGlzIGJldHRlciB0byBoYXZlIGl0IGNsb3NlIHRvIHRoZSBjb25zdHJ1Y3RvciwgYmVjYXVz
ZSB0aGUgcGFyYW1ldGVycyBtdXN0IG1hdGNoIGluIGNvdW50IGFuZCB0eXBlLlxuXHRcdC8vIFNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpXG5cdFx0cHVibGljIHN0YXRpYyAk
aW5qZWN0ID0gW1xuXHRcdFx0JyRzY29wZScsXG5cdFx0XHQnJGxvY2F0aW9uJyxcblx0XHRcdCd0
b2RvU3RvcmFnZScsXG5cdFx0XHQnZmlsdGVyRmlsdGVyJ1xuXHRcdF07XG5cblx0XHQvLyBkZXBl
bmRlbmNpZXMgYXJlIGluamVjdGVkIHZpYSBBbmd1bGFySlMgJGluamVjdG9yXG5cdFx0Ly8gY29u
dHJvbGxlcidzIG5hbWUgaXMgcmVnaXN0ZXJlZCBpbiBBcHBsaWNhdGlvbi50cyBhbmQgc3BlY2lm
aWVkIGZyb20gbmctY29udHJvbGxlciBhdHRyaWJ1dGUgaW4gaW5kZXguaHRtbFxuXHRcdGNvbnN0
cnVjdG9yKFxuXHRcdFx0cHJpdmF0ZSAkc2NvcGU6IElUb2RvU2NvcGUsXG5cdFx0XHRwcml2YXRl
ICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcblx0XHRcdHByaXZhdGUgdG9kb1N0b3Jh
Z2U6IElUb2RvU3RvcmFnZSxcblx0XHRcdHByaXZhdGUgZmlsdGVyRmlsdGVyXG5cdFx0KSB7XG5c
dFx0XHR0aGlzLnRvZG9zID0gJHNjb3BlLnRvZG9zID0gdG9kb1N0b3JhZ2UuZ2V0KCk7XG5cblx0
XHRcdCRzY29wZS5uZXdUb2RvID0gJyc7XG5cdFx0XHQkc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7
XG5cblx0XHRcdC8vICd2bScgc3RhbmRzIGZvciAndmlldyBtb2RlbCcuIFdlJ3JlIGFkZGluZyBh
IHJlZmVyZW5jZSB0byB0aGUgY29udHJvbGxlciB0byB0aGUgc2NvcGVcblx0XHRcdC8vIGZvciBp
dHMgbWV0aG9kcyB0byBiZSBhY2Nlc3NpYmxlIGZyb20gdmlldyAvIEhUTUxcblx0XHRcdCRzY29w
ZS52bSA9IHRoaXM7XG5cblx0XHRcdC8vIHdhdGNoaW5nIGZvciBldmVudHMvY2hhbmdlcyBpbiBz
Y29wZSwgd2hpY2ggYXJlIGNhdXNlZCBieSB2aWV3L3VzZXIgaW5wdXRcblx0XHRcdC8vIGlmIHlv
dSBzdWJzY3JpYmUgdG8gc2NvcGUgb3IgZXZlbnQgd2l0aCBsaWZldGltZSBsb25nZXIgdGhhbiB0
aGlzIGNvbnRyb2xsZXIsIG1ha2Ugc3VyZSB5b3UgdW5zdWJzY3JpYmUuXG5cdFx0XHQkc2NvcGUu
JHdhdGNoKCd0b2RvcycsICgpID0+IHRoaXMub25Ub2RvcygpLCB0cnVlKTtcblx0XHRcdCRzY29w
ZS4kd2F0Y2goJ2xvY2F0aW9uLnBhdGgoKScsIHBhdGggPT4gdGhpcy5vblBhdGgocGF0aCkpXG5c
blx0XHRcdGlmICgkbG9jYXRpb24ucGF0aCgpID09PSAnJykgJGxvY2F0aW9uLnBhdGgoJy8nKTtc
blx0XHRcdCRzY29wZS5sb2NhdGlvbiA9ICRsb2NhdGlvbjtcblx0XHR9XG5cblx0XHRvblBhdGgo
cGF0aDogc3RyaW5nKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5zdGF0dXNGaWx0ZXIgPSAocGF0aCA9
PT0gJy9hY3RpdmUnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHBhdGggPT09
ICcvY29tcGxldGVkJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307XG5cdFx0
fVxuXG5cdFx0b25Ub2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50ID0g
dGhpcy5maWx0ZXJGaWx0ZXIodGhpcy50b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0pLmxlbmd0
aDtcblx0XHRcdHRoaXMuJHNjb3BlLmRvbmVDb3VudCA9IHRoaXMudG9kb3MubGVuZ3RoIC0gdGhp
cy4kc2NvcGUucmVtYWluaW5nQ291bnQ7XG5cdFx0XHR0aGlzLiRzY29wZS5hbGxDaGVja2VkID0g
IXRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50XG5cdFx0XHR0aGlzLnRvZG9TdG9yYWdlLnB1dCh0
aGlzLnRvZG9zKTtcblx0XHR9XG5cblx0XHRhZGRUb2RvKCkge1xuXHRcdFx0dmFyIG5ld1RvZG8g
OiBzdHJpbmcgPSB0aGlzLiRzY29wZS5uZXdUb2RvLnRyaW0oKTtcblx0XHRcdGlmICghbmV3VG9k
by5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRvZG9z
LnB1c2gobmV3IFRvZG9JdGVtKG5ld1RvZG8sIGZhbHNlKSk7XG5cdFx0XHR0aGlzLiRzY29wZS5u
ZXdUb2RvID0gJyc7XG5cdFx0fVxuXG5cdFx0ZWRpdFRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gdG9kb0l0ZW07XG5cblx0XHRcdC8vIENs
b25lIHRoZSBvcmlnaW5hbCB0b2RvIGluIGNhc2UgZWRpdGluZyBpcyBjYW5jZWxsZWQuXG5cdFx0
XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9kb0l0ZW0p
O1xuXHRcdH1cblxuXHRcdHJldmVydEVkaXRzKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0
dGhpcy50b2Rvc1t0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pXSA9IHRoaXMuJHNjb3BlLm9y
aWdpbmFsVG9kbztcblx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gdHJ1ZTtcblx0XHR9XG5c
blx0XHRkb25lRWRpdGluZyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3Bl
LmVkaXRlZFRvZG8gPSBudWxsO1xuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gbnVs
bDtcblx0XHRcdGlmICh0aGlzLiRzY29wZS5yZXZlcnRlZCkge1xuXHRcdFx0XHQvLyBUb2RvIGVk
aXRzIHdlcmUgcmV2ZXJ0ZWQsIGRvbid0IHNhdmUuXG5cdFx0XHRcdHRoaXMuJHNjb3BlLnJldmVy
dGVkID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dG9kb0l0ZW0udGl0
bGUgPSB0b2RvSXRlbS50aXRsZS50cmltKCk7XG5cdFx0XHRpZiAoIXRvZG9JdGVtLnRpdGxlKSB7
XG5cdFx0XHRcdHRoaXMucmVtb3ZlVG9kbyh0b2RvSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5c
dFx0cmVtb3ZlVG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3Muc3Bs
aWNlKHRoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSksIDEpO1xuXHRcdH1cblxuXHRcdGNsZWFy
RG9uZVRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUudG9kb3MgPSB0aGlzLnRvZG9zID0gdGhp
cy50b2Rvcy5maWx0ZXIodG9kb0l0ZW0gPT4gIXRvZG9JdGVtLmNvbXBsZXRlZCk7XG5cdFx0fVxu
XG5cdFx0bWFya0FsbChjb21wbGV0ZWQ6IGJvb2xlYW4pIHtcblx0XHRcdHRoaXMudG9kb3MuZm9y
RWFjaCh0b2RvSXRlbSA9PiB7IHRvZG9JdGVtLmNvbXBsZXRlZCA9IGNvbXBsZXRlZDsgfSk7XG5c
dFx0fVxuXHR9XG5cbn1cbi8vIEFwcGxpY2F0aW9uLnRzXG5cbi8qKlxuICogVGhlIG1haW4gVG9k
b01WQyBhcHAgbW9kdWxlLlxuICpcbiAqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX1cbiAqL1xubW9k
dWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG9kb212YyA9IGFuZ3Vs
YXIubW9kdWxlKCd0b2RvbXZjJywgW10pXG4gICAgICAgICAgICAuY29udHJvbGxlcigndG9kb0N0
cmwnLCBUb2RvQ3RybClcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9CbHVyJywgdG9kb0Js
dXIpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRm9jdXMnLCB0b2RvRm9jdXMpXG4gICAg
ICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRXNjYXBlJywgdG9kb0VzY2FwZSlcbiAgICAgICAgICAg
IC5zZXJ2aWNlKCd0b2RvU3RvcmFnZScsIFRvZG9TdG9yYWdlKTtcbn1cbiIKK21vZHVsZS5leHBv
cnRzID0gIi8vIGxpYnMvanF1ZXJ5L2pxdWVyeS5kLnRzXG4vKiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
XCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXG5MaWNl
bnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5USElT
IENPREUgSVMgUFJPVklERUQgKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJ
TkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5XQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxuTUVSQ0hBTlRB
QkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAg
TGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG5hbmQg
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xu
XG4vLyBUeXBpbmcgZm9yIHRoZSBqUXVlcnkgbGlicmFyeSwgdmVyc2lvbiAxLjEwLnggLyAyLjAu
eFxuLy8gUHJvamVjdDogaHR0cDovL2pxdWVyeS5jb20vXG4vLyBEZWZpbml0aW9ucyBieTogQm9y
aXMgWWFua292IDxodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvPiwgQ2hyaXN0aWFuIEhv
ZmZtZWlzdGVyIDxodHRwczovL2dpdGh1Yi5jb20vY2hvZmZtZWlzdGVyPiwgU3RldmUgRmVudG9u
LCBEaXVsbGVpIEdvbWVzIDxodHRwczovL2dpdGh1Yi5jb20vRGl1bGxlaT4sIFRhc3MgSWxpb3Bv
dWxvcyA8aHR0cHM6Ly9naXRodWIuY29tL3Rhc29pbGk+LCBKYXNvbiBTd2VhcmluZ2VuLCBTZWFu
IEhpbGwgPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWFuc2tpPiwgR3V1cyBHb29zc2VucyA8aHR0cHM6
Ly9naXRodWIuY29tL0d1dXo+LCBLZWxseSBTdW1tZXJsaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9r
c3VtbWVybGluPiwgQmFzYXJhdCBBbGkgU3llZCA8aHR0cHM6Ly9naXRodWIuY29tL2Jhc2FyYXQ+
LCBOaWNob2xhcyBXb2x2ZXJzb24gPGh0dHBzOi8vZ2l0aHViLmNvbS9ud29sdmVyc29uPiwgRGVy
ZWsgQ2ljZXJvbmUgPGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJla2NpY2Vyb25lPiwgQW5kcmV3IEdh
c3BhciA8aHR0cHM6Ly9naXRodWIuY29tL0FuZHJld0dhc3Bhcj4sIEphbWVzIEhhcnJpc29uIEZp
c2hlciA8aHR0cHM6Ly9naXRodWIuY29tL2phbWVzaGZpc2hlcj4sIFNlaWtpY2hpIEtvbmRvIDxo
dHRwczovL2dpdGh1Yi5jb20vc2Vpa2ljaGk+LCBCZW5qYW1pbiBKYWNrbWFuIDxodHRwczovL2dp
dGh1Yi5jb20vYmVuamFtaW5qYWNrbWFuPiwgUG91bCBTb3JlbnNlbiA8aHR0cHM6Ly9naXRodWIu
Y29tL3MwOTMyOTQ+LCBKb3NoIFN0cm9ibCA8aHR0cHM6Ly9naXRodWIuY29tL0pvc2hTdHJvYmw+
LCBKb2huIFJlaWxseSA8aHR0cHM6Ly9naXRodWIuY29tL2pvaG5ueXJlaWxseS8+XG4vLyBEZWZp
bml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxu
XG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEFKQVggc2V0dGluZyB0aGF0IHdpbGwgY29uZmln
dXJlIHRoZSBBSkFYIHJlcXVlc3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5QWpheFNldHRpbmdzIHtc
biAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNlbnQgaW4gdGhlIHJlcXVlc3QgaGVh
ZGVyIHRoYXQgdGVsbHMgdGhlIHNlcnZlciB3aGF0IGtpbmQgb2YgcmVzcG9uc2UgaXQgd2lsbCBh
Y2NlcHQgaW4gcmV0dXJuLiBJZiB0aGUgYWNjZXB0cyBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlv
biwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBt
ZXRob2QuXG4gICAgICovXG4gICAgYWNjZXB0cz86IGFueTtcbiAgICAvKipcbiAgICAgKiBCeSBk
ZWZhdWx0LCBhbGwgcmVxdWVzdHMgYXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgKGkuZS4gdGhpcyBp
cyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0KS4gSWYgeW91IG5lZWQgc3luY2hyb25vdXMgcmVxdWVz
dHMsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS4gQ3Jvc3MtZG9tYWluIHJlcXVlc3RzIGFuZCBk
YXRhVHlwZTogXCJqc29ucFwiIHJlcXVlc3RzIGRvIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIG9w
ZXJhdGlvbi4gTm90ZSB0aGF0IHN5bmNocm9ub3VzIHJlcXVlc3RzIG1heSB0ZW1wb3JhcmlseSBs
b2NrIHRoZSBicm93c2VyLCBkaXNhYmxpbmcgYW55IGFjdGlvbnMgd2hpbGUgdGhlIHJlcXVlc3Qg
aXMgYWN0aXZlLiBBcyBvZiBqUXVlcnkgMS44LCB0aGUgdXNlIG9mIGFzeW5jOiBmYWxzZSB3aXRo
IGpxWEhSICgkLkRlZmVycmVkKSBpcyBkZXByZWNhdGVkOyB5b3UgbXVzdCB1c2UgdGhlIHN1Y2Nl
c3MvZXJyb3IvY29tcGxldGUgY2FsbGJhY2sgb3B0aW9ucyBpbnN0ZWFkIG9mIHRoZSBjb3JyZXNw
b25kaW5nIG1ldGhvZHMgb2YgdGhlIGpxWEhSIG9iamVjdCBzdWNoIGFzIGpxWEhSLmRvbmUoKSBv
ciB0aGUgZGVwcmVjYXRlZCBqcVhIUi5zdWNjZXNzKCkuXG4gICAgICovXG4gICAgYXN5bmM/OiBi
b29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgcHJlLXJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24g
dGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhN
TEhUVFBSZXF1ZXN0KSBvYmplY3QgYmVmb3JlIGl0IGlzIHNlbnQuIFVzZSB0aGlzIHRvIHNldCBj
dXN0b20gaGVhZGVycywgZXRjLiBUaGUganFYSFIgYW5kIHNldHRpbmdzIG9iamVjdHMgYXJlIHBh
c3NlZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC4gUmV0dXJuaW5nIGZhbHNl
IGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uIHdpbGwgY2FuY2VsIHRoZSByZXF1ZXN0LiBBcyBv
ZiBqUXVlcnkgMS41LCB0aGUgYmVmb3JlU2VuZCBvcHRpb24gd2lsbCBiZSBjYWxsZWQgcmVnYXJk
bGVzcyBvZiB0aGUgdHlwZSBvZiByZXF1ZXN0LlxuICAgICAqL1xuICAgIGJlZm9yZVNlbmQ/IChq
cVhIUjogSlF1ZXJ5WEhSLCBzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogYW55O1xuICAg
IC8qKlxuICAgICAqIElmIHNldCB0byBmYWxzZSwgaXQgd2lsbCBmb3JjZSByZXF1ZXN0ZWQgcGFn
ZXMgbm90IHRvIGJlIGNhY2hlZCBieSB0aGUgYnJvd3Nlci4gTm90ZTogU2V0dGluZyBjYWNoZSB0
byBmYWxzZSB3aWxsIG9ubHkgd29yayBjb3JyZWN0bHkgd2l0aCBIRUFEIGFuZCBHRVQgcmVxdWVz
dHMuIEl0IHdvcmtzIGJ5IGFwcGVuZGluZyBcIl89e3RpbWVzdGFtcH1cIiB0byB0aGUgR0VUIHBh
cmFtZXRlcnMuIFRoZSBwYXJhbWV0ZXIgaXMgbm90IG5lZWRlZCBmb3Igb3RoZXIgdHlwZXMgb2Yg
cmVxdWVzdHMsIGV4Y2VwdCBpbiBJRTggd2hlbiBhIFBPU1QgaXMgbWFkZSB0byBhIFVSTCB0aGF0
IGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGJ5IGEgR0VULlxuICAgICAqL1xuICAgIGNhY2hl
PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVu
IHRoZSByZXF1ZXN0IGZpbmlzaGVzIChhZnRlciBzdWNjZXNzIGFuZCBlcnJvciBjYWxsYmFja3Mg
YXJlIGV4ZWN1dGVkKS4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHR3byBhcmd1bWVudHM6IFRo
ZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGFuZCBhIHN0
cmluZyBjYXRlZ29yaXppbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVxdWVzdCAoXCJzdWNjZXNzXCIs
IFwibm90bW9kaWZpZWRcIiwgXCJlcnJvclwiLCBcInRpbWVvdXRcIiwgXCJhYm9ydFwiLCBvciBc
InBhcnNlcmVycm9yXCIpLiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgY29tcGxldGUgc2V0dGluZyBj
YW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNh
bGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgY29tcGxl
dGU/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoq
XG4gICAgICogQW4gb2JqZWN0IG9mIHN0cmluZy9yZWd1bGFyLWV4cHJlc3Npb24gcGFpcnMgdGhh
dCBkZXRlcm1pbmUgaG93IGpRdWVyeSB3aWxsIHBhcnNlIHRoZSByZXNwb25zZSwgZ2l2ZW4gaXRz
IGNvbnRlbnQgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb250ZW50
cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8vQWNjb3JkaW5nIHRvIGpRdWVyeS5h
amF4IHNvdXJjZSBjb2RlLCBhamF4J3Mgb3B0aW9uIGFjdHVhbGx5IGFsbG93cyBjb250ZW50VHlw
ZSB0byBzZXQgdG8gXCJmYWxzZVwiXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFu
a292L0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvNzQyXG4gICAgLyoqXG4gICAgICogV2hlbiBzZW5k
aW5nIGRhdGEgdG8gdGhlIHNlcnZlciwgdXNlIHRoaXMgY29udGVudCB0eXBlLiBEZWZhdWx0IGlz
IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsIHdo
aWNoIGlzIGZpbmUgZm9yIG1vc3QgY2FzZXMuIElmIHlvdSBleHBsaWNpdGx5IHBhc3MgaW4gYSBj
b250ZW50LXR5cGUgdG8gJC5hamF4KCksIHRoZW4gaXQgaXMgYWx3YXlzIHNlbnQgdG8gdGhlIHNl
cnZlciAoZXZlbiBpZiBubyBkYXRhIGlzIHNlbnQpLiBUaGUgVzNDIFhNTEh0dHBSZXF1ZXN0IHNw
ZWNpZmljYXRpb24gZGljdGF0ZXMgdGhhdCB0aGUgY2hhcnNldCBpcyBhbHdheXMgVVRGLTg7IHNw
ZWNpZnlpbmcgYW5vdGhlciBjaGFyc2V0IHdpbGwgbm90IGZvcmNlIHRoZSBicm93c2VyIHRvIGNo
YW5nZSB0aGUgZW5jb2RpbmcuXG4gICAgICovXG4gICAgY29udGVudFR5cGU/OiBhbnk7XG4gICAg
LyoqXG4gICAgICogVGhpcyBvYmplY3Qgd2lsbCBiZSBtYWRlIHRoZSBjb250ZXh0IG9mIGFsbCBB
amF4LXJlbGF0ZWQgY2FsbGJhY2tzLiBCeSBkZWZhdWx0LCB0aGUgY29udGV4dCBpcyBhbiBvYmpl
Y3QgdGhhdCByZXByZXNlbnRzIHRoZSBhamF4IHNldHRpbmdzIHVzZWQgaW4gdGhlIGNhbGwgKCQu
YWpheFNldHRpbmdzIG1lcmdlZCB3aXRoIHRoZSBzZXR0aW5ncyBwYXNzZWQgdG8gJC5hamF4KS5c
biAgICAgKi9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGFUeXBlLXRvLWRhdGFUeXBlIGNvbnZlcnRlcnMuIEVhY2ggY29udmVydGVy
J3MgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRyYW5zZm9ybWVkIHZhbHVl
IG9mIHRoZSByZXNwb25zZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb252
ZXJ0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogSWYgeW91
IHdpc2ggdG8gZm9yY2UgYSBjcm9zc0RvbWFpbiByZXF1ZXN0IChzdWNoIGFzIEpTT05QKSBvbiB0
aGUgc2FtZSBkb21haW4sIHNldCB0aGUgdmFsdWUgb2YgY3Jvc3NEb21haW4gdG8gdHJ1ZS4gVGhp
cyBhbGxvd3MsIGZvciBleGFtcGxlLCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbiB0byBhbm90aGVy
IGRvbWFpbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjcm9zc0RvbWFpbj86
IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIu
IEl0IGlzIGNvbnZlcnRlZCB0byBhIHF1ZXJ5IHN0cmluZywgaWYgbm90IGFscmVhZHkgYSBzdHJp
bmcuIEl0J3MgYXBwZW5kZWQgdG8gdGhlIHVybCBmb3IgR0VULXJlcXVlc3RzLiBTZWUgcHJvY2Vz
c0RhdGEgb3B0aW9uIHRvIHByZXZlbnQgdGhpcyBhdXRvbWF0aWMgcHJvY2Vzc2luZy4gT2JqZWN0
IG11c3QgYmUgS2V5L1ZhbHVlIHBhaXJzLiBJZiB2YWx1ZSBpcyBhbiBBcnJheSwgalF1ZXJ5IHNl
cmlhbGl6ZXMgbXVsdGlwbGUgdmFsdWVzIHdpdGggc2FtZSBrZXkgYmFzZWQgb24gdGhlIHZhbHVl
IG9mIHRoZSB0cmFkaXRpb25hbCBzZXR0aW5nIChkZXNjcmliZWQgYmVsb3cpLlxuICAgICAqL1xu
ICAgIGRhdGE/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSB1c2VkIHRv
IGhhbmRsZSB0aGUgcmF3IHJlc3BvbnNlIGRhdGEgb2YgWE1MSHR0cFJlcXVlc3QuVGhpcyBpcyBh
IHByZS1maWx0ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNlLiBZb3Ugc2hv
dWxkIHJldHVybiB0aGUgc2FuaXRpemVkIGRhdGEuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHR3byBh
cmd1bWVudHM6IFRoZSByYXcgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHRoZSAn
ZGF0YVR5cGUnIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBkYXRhRmlsdGVyPyAoZGF0YTogYW55
LCB0eTogYW55KTogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB5
b3UncmUgZXhwZWN0aW5nIGJhY2sgZnJvbSB0aGUgc2VydmVyLiBJZiBub25lIGlzIHNwZWNpZmll
ZCwgalF1ZXJ5IHdpbGwgdHJ5IHRvIGluZmVyIGl0IGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUgb2Yg
dGhlIHJlc3BvbnNlIChhbiBYTUwgTUlNRSB0eXBlIHdpbGwgeWllbGQgWE1MLCBpbiAxLjQgSlNP
TiB3aWxsIHlpZWxkIGEgSmF2YVNjcmlwdCBvYmplY3QsIGluIDEuNCBzY3JpcHQgd2lsbCBleGVj
dXRlIHRoZSBzY3JpcHQsIGFuZCBhbnl0aGluZyBlbHNlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBz
dHJpbmcpLlxuICAgICAqL1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAq
IEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxzLiBUaGUgZnVuY3Rp
b24gcmVjZWl2ZXMgdGhyZWUgYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwg
WE1MSHR0cFJlcXVlc3QpIG9iamVjdCwgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBl
cnJvciB0aGF0IG9jY3VycmVkIGFuZCBhbiBvcHRpb25hbCBleGNlcHRpb24gb2JqZWN0LCBpZiBv
bmUgb2NjdXJyZWQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCAoYmVz
aWRlcyBudWxsKSBhcmUgXCJ0aW1lb3V0XCIsIFwiZXJyb3JcIiwgXCJhYm9ydFwiLCBhbmQgXCJw
YXJzZXJlcnJvclwiLiBXaGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJzLCBlcnJvclRocm93biByZWNl
aXZlcyB0aGUgdGV4dHVhbCBwb3J0aW9uIG9mIHRoZSBIVFRQIHN0YXR1cywgc3VjaCBhcyBcIk5v
dCBGb3VuZFwiIG9yIFwiSW50ZXJuYWwgU2VydmVyIEVycm9yLlwiIEFzIG9mIGpRdWVyeSAxLjUs
IHRoZSBlcnJvciBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNo
IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIE5vdGU6IFRoaXMgaGFuZGxlciBpcyBu
b3QgY2FsbGVkIGZvciBjcm9zcy1kb21haW4gc2NyaXB0IGFuZCBjcm9zcy1kb21haW4gSlNPTlAg
cmVxdWVzdHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBlcnJvcj8gKGpx
WEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZywgZXJyb3JUaHJvdzogc3RyaW5nKTog
YW55O1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdHJpZ2dlciBnbG9iYWwgQWpheCBldmVu
dCBoYW5kbGVycyBmb3IgdGhpcyByZXF1ZXN0LiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBTZXQgdG8g
ZmFsc2UgdG8gcHJldmVudCB0aGUgZ2xvYmFsIGhhbmRsZXJzIGxpa2UgYWpheFN0YXJ0IG9yIGFq
YXhTdG9wIGZyb20gYmVpbmcgdHJpZ2dlcmVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wg
dmFyaW91cyBBamF4IEV2ZW50cy5cbiAgICAgKi9cbiAgICBnbG9iYWw/OiBib29sZWFuO1xuICAg
IC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWUgcGFp
cnMgdG8gc2VuZCBhbG9uZyB3aXRoIHJlcXVlc3RzIHVzaW5nIHRoZSBYTUxIdHRwUmVxdWVzdCB0
cmFuc3BvcnQuIFRoZSBoZWFkZXIgWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QgaXMg
YWx3YXlzIGFkZGVkLCBidXQgaXRzIGRlZmF1bHQgWE1MSHR0cFJlcXVlc3QgdmFsdWUgY2FuIGJl
IGNoYW5nZWQgaGVyZS4gVmFsdWVzIGluIHRoZSBoZWFkZXJzIHNldHRpbmcgY2FuIGFsc28gYmUg
b3ZlcndyaXR0ZW4gZnJvbSB3aXRoaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24uICh2ZXJzaW9u
IGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSByZXF1ZXN0IHRvIGJlIHN1Y2Nlc3NmdWwg
b25seSBpZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcmVxdWVzdC4g
VGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSBMYXN0LU1vZGlmaWVkIGhlYWRlci4gRGVmYXVs
dCB2YWx1ZSBpcyBmYWxzZSwgaWdub3JpbmcgdGhlIGhlYWRlci4gSW4galF1ZXJ5IDEuNCB0aGlz
IHRlY2huaXF1ZSBhbHNvIGNoZWNrcyB0aGUgJ2V0YWcnIHNwZWNpZmllZCBieSB0aGUgc2VydmVy
IHRvIGNhdGNoIHVubW9kaWZpZWQgZGF0YS5cbiAgICAgKi9cbiAgICBpZk1vZGlmaWVkPzogYm9v
bGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB0byBi
ZSByZWNvZ25pemVkIGFzIFwibG9jYWwsXCIgKGUuZy4gdGhlIGZpbGVzeXN0ZW0pLCBldmVuIGlm
IGpRdWVyeSBkb2VzIG5vdCByZWNvZ25pemUgaXQgYXMgc3VjaCBieSBkZWZhdWx0LiBUaGUgZm9s
bG93aW5nIHByb3RvY29scyBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYXMgbG9jYWw6IGZpbGUs
ICotZXh0ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJZiB0aGUgaXNMb2NhbCBzZXR0aW5nIG5lZWRzIG1v
ZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4
U2V0dXAoKSBtZXRob2QuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBpc0xv
Y2FsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgY2FsbGJhY2sgZnVu
Y3Rpb24gbmFtZSBpbiBhIGpzb25wIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGlu
c3RlYWQgb2YgJ2NhbGxiYWNrJyBpbiB0aGUgJ2NhbGxiYWNrPT8nIHBhcnQgb2YgdGhlIHF1ZXJ5
IHN0cmluZyBpbiB0aGUgdXJsLiBTbyB7anNvbnA6J29uSlNPTlBMb2FkJ30gd291bGQgcmVzdWx0
IGluICdvbkpTT05QTG9hZD0/JyBwYXNzZWQgdG8gdGhlIHNlcnZlci4gQXMgb2YgalF1ZXJ5IDEu
NSwgc2V0dGluZyB0aGUganNvbnAgb3B0aW9uIHRvIGZhbHNlIHByZXZlbnRzIGpRdWVyeSBmcm9t
IGFkZGluZyB0aGUgXCI/Y2FsbGJhY2tcIiBzdHJpbmcgdG8gdGhlIFVSTCBvciBhdHRlbXB0aW5n
IHRvIHVzZSBcIj0/XCIgZm9yIHRyYW5zZm9ybWF0aW9uLiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91
bGQgYWxzbyBleHBsaWNpdGx5IHNldCB0aGUganNvbnBDYWxsYmFjayBzZXR0aW5nLiBGb3IgZXhh
bXBsZSwgeyBqc29ucDogZmFsc2UsIGpzb25wQ2FsbGJhY2s6IFwiY2FsbGJhY2tOYW1lXCIgfVxu
ICAgICAqL1xuICAgIGpzb25wPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhl
IGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgZm9yIGEgSlNPTlAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3
aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgcmFuZG9tIG5hbWUgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgYnkgalF1ZXJ5LiBJdCBpcyBwcmVmZXJhYmxlIHRvIGxldCBqUXVlcnkgZ2VuZXJhdGUg
YSB1bmlxdWUgbmFtZSBhcyBpdCdsbCBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2UgdGhlIHJlcXVl
c3RzIGFuZCBwcm92aWRlIGNhbGxiYWNrcyBhbmQgZXJyb3IgaGFuZGxpbmcuIFlvdSBtYXkgd2Fu
dCB0byBzcGVjaWZ5IHRoZSBjYWxsYmFjayB3aGVuIHlvdSB3YW50IHRvIGVuYWJsZSBiZXR0ZXIg
YnJvd3NlciBjYWNoaW5nIG9mIEdFVCByZXF1ZXN0cy4gQXMgb2YgalF1ZXJ5IDEuNSwgeW91IGNh
biBhbHNvIHVzZSBhIGZ1bmN0aW9uIGZvciB0aGlzIHNldHRpbmcsIGluIHdoaWNoIGNhc2UgdGhl
IHZhbHVlIG9mIGpzb25wQ2FsbGJhY2sgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhh
dCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBqc29ucENhbGxiYWNrPzogYW55O1xuICAgIC8qKlxu
ICAgICAqIEEgbWltZSB0eXBlIHRvIG92ZXJyaWRlIHRoZSBYSFIgbWltZSB0eXBlLiAodmVyc2lv
biBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgbWltZVR5cGU/OiBzdHJpbmc7XG4gICAgLyoq
XG4gICAgICogQSBwYXNzd29yZCB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVz
cG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9c
biAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkYXRh
IHBhc3NlZCBpbiB0byB0aGUgZGF0YSBvcHRpb24gYXMgYW4gb2JqZWN0ICh0ZWNobmljYWxseSwg
YW55dGhpbmcgb3RoZXIgdGhhbiBhIHN0cmluZykgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIHRyYW5z
Zm9ybWVkIGludG8gYSBxdWVyeSBzdHJpbmcsIGZpdHRpbmcgdG8gdGhlIGRlZmF1bHQgY29udGVu
dC10eXBlIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIuIElmIHlvdSB3YW50
IHRvIHNlbmQgYSBET01Eb2N1bWVudCwgb3Igb3RoZXIgbm9uLXByb2Nlc3NlZCBkYXRhLCBzZXQg
dGhpcyBvcHRpb24gdG8gZmFsc2UuXG4gICAgICovXG4gICAgcHJvY2Vzc0RhdGE/OiBib29sZWFu
O1xuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwbGllcyB3aGVuIHRoZSBcInNjcmlwdFwiIHRyYW5z
cG9ydCBpcyB1c2VkIChlLmcuLCBjcm9zcy1kb21haW4gcmVxdWVzdHMgd2l0aCBcImpzb25wXCIg
b3IgXCJzY3JpcHRcIiBkYXRhVHlwZSBhbmQgXCJHRVRcIiB0eXBlKS4gU2V0cyB0aGUgY2hhcnNl
dCBhdHRyaWJ1dGUgb24gdGhlIHNjcmlwdCB0YWcgdXNlZCBpbiB0aGUgcmVxdWVzdC4gVXNlZCB3
aGVuIHRoZSBjaGFyYWN0ZXIgc2V0IG9uIHRoZSBsb2NhbCBwYWdlIGlzIG5vdCB0aGUgc2FtZSBh
cyB0aGUgb25lIG9uIHRoZSByZW1vdGUgc2NyaXB0LlxuICAgICAqL1xuICAgIHNjcmlwdENoYXJz
ZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIG51bWVyaWMgSFRUUCBj
b2RlcyBhbmQgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBoYXMgdGhl
IGNvcnJlc3BvbmRpbmcgY29kZS4gZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgc3Rh
dHVzIGNvZGUgZnVuY3Rpb25zIHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgc3VjY2Vz
cyBjYWxsYmFjazsgaWYgaXQgcmVzdWx0cyBpbiBhbiBlcnJvciAoaW5jbHVkaW5nIDN4eCByZWRp
cmVjdCksIHRoZXkgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBlcnJvciBjYWxsYmFj
ay4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBzdGF0dXNDb2RlPzogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0aHJl
ZSBhcmd1bWVudHM6IFRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwgZm9ybWF0dGVk
IGFjY29yZGluZyB0byB0aGUgZGF0YVR5cGUgcGFyYW1ldGVyOyBhIHN0cmluZyBkZXNjcmliaW5n
IHRoZSBzdGF0dXM7IGFuZCB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVl
c3QpIG9iamVjdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIHN1Y2Nlc3Mgc2V0dGluZyBjYW4gYWNj
ZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBp
biB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgc3VjY2Vzcz8gKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKTogYW55O1xuICAg
IC8qKlxuICAgICAqIFNldCBhIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHRoZSByZXF1
ZXN0LiBUaGlzIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCB0aW1lb3V0IHNldCB3aXRoICQuYWph
eFNldHVwKCkuIFRoZSB0aW1lb3V0IHBlcmlvZCBzdGFydHMgYXQgdGhlIHBvaW50IHRoZSAkLmFq
YXggY2FsbCBpcyBtYWRlOyBpZiBzZXZlcmFsIG90aGVyIHJlcXVlc3RzIGFyZSBpbiBwcm9ncmVz
cyBhbmQgdGhlIGJyb3dzZXIgaGFzIG5vIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSwgaXQgaXMgcG9z
c2libGUgZm9yIGEgcmVxdWVzdCB0byB0aW1lIG91dCBiZWZvcmUgaXQgY2FuIGJlIHNlbnQuIElu
IGpRdWVyeSAxLjQueCBhbmQgYmVsb3csIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2lsbCBi
ZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIHRoZSByZXF1ZXN0IHRpbWVzIG91dDsgYWNjZXNzaW5n
IGFueSBvYmplY3QgbWVtYmVycyBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uLiBJbiBGaXJlZm94IDMu
MCsgb25seSwgc2NyaXB0IGFuZCBKU09OUCByZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2VsbGVkIGJ5
IGEgdGltZW91dDsgdGhlIHNjcmlwdCB3aWxsIHJ1biBldmVuIGlmIGl0IGFycml2ZXMgYWZ0ZXIg
dGhlIHRpbWVvdXQgcGVyaW9kLlxuICAgICAqL1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAg
LyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHRyYWRp
dGlvbmFsIHN0eWxlIG9mIHBhcmFtIHNlcmlhbGl6YXRpb24uXG4gICAgICovXG4gICAgdHJhZGl0
aW9uYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHJlcXVlc3QgdG8g
bWFrZSAoXCJQT1NUXCIgb3IgXCJHRVRcIiksIGRlZmF1bHQgaXMgXCJHRVRcIi4gTm90ZTogT3Ro
ZXIgSFRUUCByZXF1ZXN0IG1ldGhvZHMsIHN1Y2ggYXMgUFVUIGFuZCBERUxFVEUsIGNhbiBhbHNv
IGJlIHVzZWQgaGVyZSwgYnV0IHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJz
LlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICov
XG4gICAgdXJsPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgdXNlcm5hbWUgdG8gYmUgdXNl
ZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhl
bnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAg
LyoqXG4gICAgICogQ2FsbGJhY2sgZm9yIGNyZWF0aW5nIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmpl
Y3QuIERlZmF1bHRzIHRvIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gYXZhaWxhYmxlIChJRSksIHRo
ZSBYTUxIdHRwUmVxdWVzdCBvdGhlcndpc2UuIE92ZXJyaWRlIHRvIHByb3ZpZGUgeW91ciBvd24g
aW1wbGVtZW50YXRpb24gZm9yIFhNTEh0dHBSZXF1ZXN0IG9yIGVuaGFuY2VtZW50cyB0byB0aGUg
ZmFjdG9yeS5cbiAgICAgKi9cbiAgICB4aHI/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2Jq
ZWN0IG9mIGZpZWxkTmFtZS1maWVsZFZhbHVlIHBhaXJzIHRvIHNldCBvbiB0aGUgbmF0aXZlIFhI
UiBvYmplY3QuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBpdCB0byBzZXQgd2l0aENyZWRlbnRp
YWxzIHRvIHRydWUgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBpZiBuZWVkZWQuIEluIGpRdWVy
eSAxLjUsIHRoZSB3aXRoQ3JlZGVudGlhbHMgcHJvcGVydHkgd2FzIG5vdCBwcm9wYWdhdGVkIHRv
IHRoZSBuYXRpdmUgWEhSIGFuZCB0aHVzIENPUlMgcmVxdWVzdHMgcmVxdWlyaW5nIGl0IHdvdWxk
IGlnbm9yZSB0aGlzIGZsYWcuIEZvciB0aGlzIHJlYXNvbiwgd2UgcmVjb21tZW5kIHVzaW5nIGpR
dWVyeSAxLjUuMSsgc2hvdWxkIHlvdSByZXF1aXJlIHRoZSB1c2Ugb2YgaXQuICh2ZXJzaW9uIGFk
ZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICB4aHJGaWVsZHM/OiB7IFtrZXk6IHN0cmluZ106IGFu
eTsgfTtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBqcVhIUiBvYmplY3RcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5WEhSIGV4dGVuZHMgWE1MSHR0cFJlcXVlc3QsIEpRdWVyeVByb21pc2U8
YW55PiB7XG4gICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lVHlwZTogc3RyaW5nKTogYW55O1xuICAg
IGFib3J0KHN0YXR1c1RleHQ/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKlxuICAgIEludGVyZmFj
ZSBmb3IgdGhlIEpRdWVyeSBjYWxsYmFja1xuKi9cbmludGVyZmFjZSBKUXVlcnlDYWxsYmFjayB7
XG4gICAgYWRkKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG4gICAgZGlzYWJsZSgpOiBhbnk7
XG4gICAgZW1wdHkoKTogYW55O1xuICAgIGZpcmUoLi4uYXJndW1lbnRzOiBhbnlbXSk6IGFueTtc
biAgICBmaXJlZCgpOiBib29sZWFuO1xuICAgIGZpcmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJn
czogYW55W10pOiBhbnk7XG4gICAgaGFzKGNhbGxiYWNrOiBhbnkpOiBib29sZWFuO1xuICAgIGxv
Y2soKTogYW55O1xuICAgIGxvY2tlZCgpOiBib29sZWFuO1xuICAgIHJlbW92ZSguLi5jYWxsYmFj
a3M6IGFueVtdKTogYW55O1xufVxuXG4vKlxuICAgIEFsbG93cyBqUXVlcnkgUHJvbWlzZXMgdG8g
aW50ZXJvcCB3aXRoIG5vbi1qUXVlcnkgcHJvbWlzZXNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VD4ge1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUs
IG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47
XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/
OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIElu
dGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBwcm9taXNlLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmlu
dGVyZmFjZSBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNh
bGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21p
c2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+
O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAg
ICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
blxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxU
PjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
biAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAg
ICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+
O1xuXG4gICAgLy8gRGVwcmVjYXRlZCAtIGdpdmVuIG5vIHR5cGluZ3NcbiAgICBwaXBlKGRvbmVG
aWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIGZhaWxGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIHBy
b2dyZXNzRmlsdGVyPzogKHg6IGFueSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVh
c29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9
PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6
IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4g
VSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5
UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkg
PT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcblxuICAgIC8vIEJlY2F1c2UgSlF1ZXJ5IFByb21p
c2VzIFN1Y2tcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUs
IG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnBy
b2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+
KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+
LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5w
cm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxV
PihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFz
b25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4u
cHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8
VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVy
eVByb21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGRlZmVy
cmVkLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlEZWZlcnJlZDxUPiBl
eHRlbmRzIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2Fs
bGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcblxuICAgIG5vdGlmeSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+
O1xuICAgIG5vdGlmeVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuXG4gICAgcmVqZWN0KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8
VD47XG4gICAgcmVqZWN0V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG5cbiAgICByZXNvbHZlKHZhbDogVCk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIHJlc29sdmUoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNv
bHZlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47
XG4gICAgc3RhdGUoKTogc3RyaW5nO1xuXG4gICAgcHJvbWlzZSh0YXJnZXQ/OiBhbnkpOiBKUXVl
cnlQcm9taXNlPFQ+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBvZiB0aGUgSlF1ZXJ5IGV4dGVu
c2lvbiBvZiB0aGUgVzNDIGV2ZW50IG9iamVjdFxuKi9cblxuaW50ZXJmYWNlIEJhc2VKUXVlcnlF
dmVudE9iamVjdCBleHRlbmRzIEV2ZW50IHtcbiAgICBkYXRhOiBhbnk7XG4gICAgZGVsZWdhdGVU
YXJnZXQ6IEVsZW1lbnQ7XG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47XG4gICAg
aXNJbW1lZGlhdGVQcm9wb2dhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBpc1Byb3BhZ2F0
aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHByZXZl
bnREZWZhdWx0KCk6IGFueTtcbiAgICByZWxhdGVkVGFyZ2V0OiBFbGVtZW50O1xuICAgIHJlc3Vs
dDogYW55O1xuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHN0b3BQ
cm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJl
cjtcbiAgICB3aGljaDogbnVtYmVyO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG59XG5cbmludGVy
ZmFjZSBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0
IHtcbiAgICBhbHRLZXk6IGJvb2xlYW47XG4gICAgY3RybEtleTogYm9vbGVhbjtcbiAgICBtZXRh
S2V5OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAg
IGJ1dHRvbjogbnVtYmVyO1xuICAgIGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1i
ZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBwYWdl
WDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgc2NyZWVuWDogbnVtYmVyO1xuICAg
IHNjcmVlblk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUtleUV2ZW50T2JqZWN0IGV4
dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgY2hhcjogYW55O1xuICAgIGNoYXJD
b2RlOiBudW1iZXI7XG4gICAga2V5OiBhbnk7XG4gICAga2V5Q29kZTogbnVtYmVyO1xufVxuXG5p
bnRlcmZhY2UgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVu
dE9iamVjdCB7XG4gICAgb3JpZ2luYWxFdmVudDogUG9wU3RhdGVFdmVudDtcbn1cblxuaW50ZXJm
YWNlIEpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0LCBKUXVl
cnlJbnB1dEV2ZW50T2JqZWN0LCBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0LCBKUXVlcnlLZXlFdmVu
dE9iamVjdCwgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCB7XG59XG5cbi8qXG4gICAgQ29sbGVj
dGlvbiBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzZXJcbiovXG5cbmludGVyZmFj
ZSBKUXVlcnlTdXBwb3J0IHtcbiAgICBhamF4PzogYm9vbGVhbjtcbiAgICBib3hNb2RlbD86IGJv
b2xlYW47XG4gICAgY2hhbmdlQnViYmxlcz86IGJvb2xlYW47XG4gICAgY2hlY2tDbG9uZT86IGJv
b2xlYW47XG4gICAgY2hlY2tPbj86IGJvb2xlYW47XG4gICAgY29ycz86IGJvb2xlYW47XG4gICAg
Y3NzRmxvYXQ/OiBib29sZWFuO1xuICAgIGhyZWZOb3JtYWxpemVkPzogYm9vbGVhbjtcbiAgICBo
dG1sU2VyaWFsaXplPzogYm9vbGVhbjtcbiAgICBsZWFkaW5nV2hpdGVzcGFjZT86IGJvb2xlYW47
XG4gICAgbm9DbG9uZUNoZWNrZWQ/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVFdmVudD86IGJvb2xl
YW47XG4gICAgb3BhY2l0eT86IGJvb2xlYW47XG4gICAgb3B0RGlzYWJsZWQ/OiBib29sZWFuO1xu
ICAgIG9wdFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBzY3JpcHRFdmFsPyAoKTogYm9vbGVhbjtc
biAgICBzdHlsZT86IGJvb2xlYW47XG4gICAgc3VibWl0QnViYmxlcz86IGJvb2xlYW47XG4gICAg
dGJvZHk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UGFyYW0ge1xuICAgIChvYmo6
IGFueSk6IHN0cmluZztcbiAgICAob2JqOiBhbnksIHRyYWRpdGlvbmFsOiBib29sZWFuKTogc3Ry
aW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBjb25zdHJ1Y3QgalF1ZXJ5
IGV2ZW50cyAod2l0aCAkLkV2ZW50KS4gSXQgaXNcbiAqIGRlZmluZWQgc2VwYXJhdGVseSBpbnN0
ZWFkIG9mIGlubGluZSBpbiBKUXVlcnlTdGF0aWMgdG8gYWxsb3dcbiAqIG92ZXJyaWRpbmcgdGhl
IGNvbnN0cnVjdGlvbiBmdW5jdGlvbiB3aXRoIHNwZWNpZmljIHN0cmluZ3NcbiAqIHJldHVybmlu
ZyBzcGVjaWZpYyBldmVudCBvYmplY3RzLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRDb25z
dHJ1Y3RvciB7XG4gICAgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1
ZXJ5RXZlbnRPYmplY3Q7XG4gICAgbmV3IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86
IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNl
ZCB0byBzcGVjaWZ5IGVhc2luZyBmdW5jdGlvbnMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFYXNp
bmcge1xuICAgIGxpbmVhcihwOiBudW1iZXIpOiBudW1iZXI7XG4gICAgc3dpbmcocDogbnVtYmVy
KTogbnVtYmVyO1xufVxuXG4vKlxuICAgIFN0YXRpYyBtZW1iZXJzIG9mIGpRdWVyeSAodGhvc2Ug
b24gJCBhbmQgalF1ZXJ5IHRoZW1zZWx2ZXMpXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVN0YXRpYyB7
XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSBy
ZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1
ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJl
IG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWph
eFNldHVwKCkuXG4gICAgICovXG4gICAgYWpheChzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdz
KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhU
VFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhl
IEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBi
ZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFq
YXgodXJsOiBzdHJpbmcsIHNldHRpbmdzPzogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhS
O1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5
IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUg
dGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRh
dGFUeXBlcyBBbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBzcGFjZS1z
ZXBhcmF0ZWQgZGF0YVR5cGVzXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNl
dCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAg
YWpheFByZWZpbHRlcihkYXRhVHlwZXM6IHN0cmluZywgaGFuZGxlcjogKG9wdHM6IGFueSwgb3Jp
Z2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6
IHZvaWQ7XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9k
aWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZv
cmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXgg
cmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihoYW5kbGVyOiAob3B0czogYW55
LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55KTogdm9pZDtcblxuICAgIGFqYXhTZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzO1xuXG4g
ICAgIC8qKlxuICAgICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVl
c3RzLiBJdHMgdXNlIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgICpcbiAgICAgICogQHBhcmFt
IG9wdGlvbnMgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBkZWZh
dWx0IEFqYXggcmVxdWVzdC4gQWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsLlxuICAgICAgKi9cbiAg
ICBhamF4U2V0dXAob3B0aW9uczogSlF1ZXJ5QWpheFNldHRpbmdzKTogdm9pZDtcblxuICAgIC8q
KlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBB
IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJv
bSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3Jp
cHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChk
YXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBk
YXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEg
ZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5n
IHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBh
cmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRh
IGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHht
bCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcs
IGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcs
IGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7
XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAg
R0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBk
YXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3
aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rp
b24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFy
YW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERl
ZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4g
ICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1l
bmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdo
aWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAg
ICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAg
ICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2lu
ZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5n
IGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAq
IEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhl
IHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJh
Y2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAg
ICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzog
KGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkp
OiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9t
IHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBh
cmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3Qg
aXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhh
dCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IHN0
cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpR
dWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgYSBKYXZh
U2NyaXB0IGZpbGUgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdCwgdGhl
biBleGVjdXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWlu
aW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0U2NyaXB0KHVybDogc3RyaW5nLCBzdWNjZXNz
PzogKHNjcmlwdDogc3RyaW5nLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIp
ID0+IGFueSk6IEpRdWVyeVhIUjtcblxuICAgIHBhcmFtOiBKUXVlcnlQYXJhbTtcblxuICAgIC8q
KlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVx
dWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUg
VVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mg
QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2Nl
ZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGlu
IHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBl
Y3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpz
b24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywg
c3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhI
UikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAg
KiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3
aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2Jq
ZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0
LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVj
dXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJv
dmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFU
eXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJ
bnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAq
L1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTog
YW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5
cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20g
dGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBh
cmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3Qg
aXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhh
dCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJl
IG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBk
YXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3Mg
KHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDog
c3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czog
c3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1
ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogQSBtdWx0aS1wdXJwb3NlIGNhbGxiYWNrcyBsaXN0
IG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgcG93ZXJmdWwgd2F5IHRvIG1hbmFnZSBjYWxsYmFjayBs
aXN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbGFncyBBbiBvcHRpb25hbCBsaXN0IG9mIHNw
YWNlLXNlcGFyYXRlZCBmbGFncyB0aGF0IGNoYW5nZSBob3cgdGhlIGNhbGxiYWNrIGxpc3QgYmVo
YXZlcy5cbiAgICAgKi9cbiAgICBDYWxsYmFja3MoZmxhZ3M/OiBzdHJpbmcpOiBKUXVlcnlDYWxs
YmFjaztcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIG9yIHJlbGVhc2VzIHRoZSBleGVjdXRpb24g
b2YgalF1ZXJ5J3MgcmVhZHkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG9sZCBJbmRp
Y2F0ZXMgd2hldGhlciB0aGUgcmVhZHkgaG9sZCBpcyBiZWluZyByZXF1ZXN0ZWQgb3IgcmVsZWFz
ZWRcbiAgICAgKi9cbiAgICBob2xkUmVhZHkoaG9sZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAo
c2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudDog
RWxlbWVudCk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiB7fSk6IEpRdWVyeTtcbiAgICAoZWxlbWVu
dEFycmF5OiBFbGVtZW50W10pOiBKUXVlcnk7XG4gICAgKG9iamVjdDogSlF1ZXJ5KTogSlF1ZXJ5
O1xuICAgIChmdW5jOiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICAoYXJyYXk6IGFueVtdKTogSlF1
ZXJ5O1xuICAgICgpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZWxpbnF1aXNoIGpRdWVy
eSdzIGNvbnRyb2wgb2YgdGhlICQgdmFyaWFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVt
b3ZlQWxsIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBqUXVlcnkg
dmFyaWFibGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZSAoaW5jbHVkaW5nIGpRdWVyeSBpdHNlbGYp
LlxuICAgICAqL1xuICAgIG5vQ29uZmxpY3QocmVtb3ZlQWxsPzogYm9vbGVhbik6IE9iamVjdDtc
blxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVu
Y3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2Jq
ZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBK
YXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFQ+W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAg
ICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9u
IG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJl
c2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVk
cyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVj
dHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IFRbXSk6IEpRdWVyeVByb21p
c2U8VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFj
ayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJl
ZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBs
YWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVk
czogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgY3NzSG9va3M6IHsgW2tleTogc3Ry
aW5nXTogYW55OyB9O1xuICAgIGNzc051bWJlcjogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3Rv
cmUgYXJiaXRyYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4g
UmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVs
ZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAq
IEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAg
ICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyBkYXRhIHZhbHVlLlxuICAgICAqL1xuICAgIGRhdGE8
VD4oZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogVDtcbiAgICAvKipc
biAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50
LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVs
bCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVt
ZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBA
cGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAg
ICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGFueTtcbiAgICAv
KipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVt
ZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUg
ZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
bGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAg
Ki9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueTtcblxuICAgIGhhc0RhdGEoZWxl
bWVudDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBx
dWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBx
dWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICByZW1vdmVEYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICAvLyBEZWZlcnJlZFxuICAgIERlZmVycmVkPFQ+KGJlZm9yZVN0YXJ0PzogKGRlZmVycmVk
OiBKUXVlcnlEZWZlcnJlZDxUPikgPT4gYW55KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICAv
LyBFZmZlY3RzXG4gICAgZng6IHsgdGljazogKCkgPT4gdm9pZDsgaW50ZXJ2YWw6IG51bWJlcjsg
c3RvcDogKCkgPT4gdm9pZDsgc3BlZWRzOiB7IHNsb3c6IG51bWJlcjsgZmFzdDogbnVtYmVyOyB9
OyBvZmY6IGJvb2xlYW47IHN0ZXA6IGFueTsgfTtcblxuICAgIC8vIEV2ZW50c1xuICAgIHByb3h5
KGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSwgY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlb
XSk6IGFueTtcbiAgICBwcm94eShjb250ZXh0OiBhbnksIG5hbWU6IHN0cmluZywgLi4uYXJnczog
YW55W10pOiBhbnk7XG5cbiAgICBFdmVudDogSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvcjtcblxuICAg
IC8vIEludGVybmFsc1xuICAgIGVycm9yKG1lc3NhZ2U6IGFueSk6IEpRdWVyeTtcblxuICAgIC8v
IE1pc2NlbGxhbmVvdXNcbiAgICBleHByOiBhbnk7XG4gICAgZm46IGFueTsgIC8vVE9ETzogRGVj
aWRlIGhvdyB3ZSB3YW50IHRvIHR5cGUgdGhpc1xuICAgIGlzUmVhZHk6IGJvb2xlYW47XG5cbiAg
ICAvLyBQcm9wZXJ0aWVzXG4gICAgc3VwcG9ydDogSlF1ZXJ5U3VwcG9ydDtcblxuICAgIC8vIFV0
aWxpdGllc1xuICAgIGNvbnRhaW5zKGNvbnRhaW5lcjogRWxlbWVudCwgY29udGFpbmVkOiBFbGVt
ZW50KTogYm9vbGVhbjtcblxuICAgIGVhY2goY29sbGVjdGlvbjogYW55LCBjYWxsYmFjazogKGlu
ZGV4SW5BcnJheTogYW55LCB2YWx1ZU9mRWxlbWVudDogYW55KSA9PiBhbnkpOiBhbnk7XG4gICAg
ZWFjaChjb2xsZWN0aW9uOiBKUXVlcnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIs
IHZhbHVlT2ZFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYW55KTogYW55O1xuICAgIGVhY2g8VD4o
Y29sbGVjdGlvbjogVFtdLCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9m
RWxlbWVudDogVCkgPT4gYW55KTogYW55O1xuXG4gICAgZXh0ZW5kKHRhcmdldDogYW55LCAuLi5v
YmpzOiBhbnlbXSk6IGFueTtcbiAgICBleHRlbmQoZGVlcDogYm9vbGVhbiwgdGFyZ2V0OiBhbnks
IC4uLm9ianM6IGFueVtdKTogYW55O1xuXG4gICAgZ2xvYmFsRXZhbChjb2RlOiBzdHJpbmcpOiBh
bnk7XG5cbiAgICBncmVwPFQ+KGFycmF5OiBUW10sIGZ1bmM6IChlbGVtZW50T2ZBcnJheTogVCwg
aW5kZXhJbkFycmF5OiBudW1iZXIpID0+IGJvb2xlYW4sIGludmVydD86IGJvb2xlYW4pOiBUW107
XG5cbiAgICBpbkFycmF5PFQ+KHZhbHVlOiBULCBhcnJheTogVFtdLCBmcm9tSW5kZXg/OiBudW1i
ZXIpOiBudW1iZXI7XG5cbiAgICBpc0FycmF5KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Vt
cHR5T2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Z1bmN0aW9uKG9iajogYW55KTog
Ym9vbGVhbjtcbiAgICBpc051bWVyaWModmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgaXNQbGFp
bk9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNXaW5kb3cob2JqOiBhbnkpOiBib29s
ZWFuO1xuICAgIGlzWE1MRG9jKG5vZGU6IE5vZGUpOiBib29sZWFuO1xuXG4gICAgbWFrZUFycmF5
KG9iajogYW55KTogYW55W107XG5cbiAgICBtYXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6
IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IFUpOiBVW107XG4g
ICAgbWFwKGFycmF5OiBhbnksIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IGFueSwgaW5kZXhJ
bkFycmF5OiBhbnkpID0+IGFueSk6IGFueTtcblxuICAgIG1lcmdlPFQ+KGZpcnN0OiBUW10sIHNl
Y29uZDogVFtdKTogVFtdO1xuICAgIG1lcmdlPFQsVT4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBVW10p
OiBhbnlbXTtcblxuICAgIG5vb3AoKTogYW55O1xuXG4gICAgbm93KCk6IG51bWJlcjtcblxuICAg
IHBhcnNlSlNPTihqc29uOiBzdHJpbmcpOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMg
YSBzdHJpbmcgaW50byBhbiBYTUwgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0
YWEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKi9cbiAgICBwYXJz
ZVhNTChkYXRhOiBzdHJpbmcpOiBYTUxEb2N1bWVudDtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVs
ZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZTogYW55W10pOiBKUXVlcnk7XG5cbiAg
ICB0cmltKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgdHlwZShvYmo6IGFueSk6IHN0cmlu
ZztcblxuICAgIHVuaXF1ZShhcnI6IGFueVtdKTogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBQ
YXJzZXMgYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBET00gbm9kZXMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZGF0YSBIVE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0gY29u
dGV4dCBET00gZWxlbWVudCB0byBzZXJ2ZSBhcyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgSFRN
TCBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ga2VlcFNjcmlwdHMgQSBC
b29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRo
ZSBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlSFRNTChkYXRhOiBzdHJpbmcsIGNvbnRl
eHQ/OiBIVE1MRWxlbWVudCwga2VlcFNjcmlwdHM/OiBib29sZWFuKTogYW55W107XG5cbiAgICBB
bmltYXRpb24oZWxlbTogYW55LCBwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueTtc
blxuICAgIGVhc2luZzogSlF1ZXJ5RWFzaW5nO1xufVxuXG4vKlxuICAgIFRoZSBqUXVlcnkgaW5z
dGFuY2UgbWVtYmVyc1xuKi9cbmludGVyZmFjZSBKUXVlcnkge1xuICAgIC8vIEFKQVhcbiAgICBh
amF4Q29tcGxldGUoaGFuZGxlcjogYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhFcnJvcihoYW5kbGVy
OiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U2VuZChoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFY
SFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
biAgICBhamF4U3RhcnQoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdG9w
KGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3VjY2VzcyhoYW5kbGVyOiAo
ZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIGxvYWQodXJsOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNvbXBs
ZXRlPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICBzZXJp
YWxpemVBcnJheSgpOiBhbnlbXTtcblxuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICBhZGRDbGFzcyhj
bGFzc05hbWVzOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkQ2xhc3MoZnVuYzogKGluZGV4OiBh
bnksIGN1cnJlbnRDbGFzczogYW55KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBodHRw
Oi8vYXBpLmpxdWVyeS5jb20vYWRkQmFjay9cbiAgICBhZGRCYWNrKHNlbGVjdG9yPzogc3RyaW5n
KTogSlF1ZXJ5O1xuXG5cbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHN0cmluZztc
biAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAg
ICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIGF0dHI6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIobWFwOiBhbnkpOiBKUXVlcnk7XG5cbiAgICBo
YXNDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICBodG1sKCk6IHN0cmlu
ZztcbiAgICBodG1sKGh0bWxTdHJpbmc6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKGh0bWxD
b250ZW50OiAoaW5kZXg6IG51bWJlciwgb2xkaHRtbDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgaHRtbChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIHByb3AocHJvcGVydHlO
YW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6
IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKG1hcDogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AocHJv
cGVydHlOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBvbGRQcm9wZXJ0eVZhbHVlOiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZTogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIHJlbW92ZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlUHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBzd3RjaD86IGJvb2xlYW4p
OiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Moc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAg
IHRvZ2dsZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSwgc3d0Y2g6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgdmFsKCk6IGFueTtcbiAgICB2YWwodmFsdWU6IHN0cmluZ1td
KTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1
ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHZhbChmdW5jOiAoaW5kZXg6IGFueSwgdmFsdWU6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBvZiBz
dHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNo
ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHBy
b3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBz
ZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJp
bmcsIHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICov
XG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNl
dCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFt
ZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNl
dCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmlu
ZywgdmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3Ig
bW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAg
ICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAq
L1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcltdKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhl
IHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5
TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9u
IHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQu
IFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFu
ZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlO
YW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVy
dGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1
ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJy
ZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBp
biB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBj
c3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51
bWJlcikgPT4gbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9y
ZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IG9mIHByb3BlcnR5LXZhbHVlIHBh
aXJzIHRvIHNldC5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydGllczogT2JqZWN0KTogSlF1ZXJ5
O1xuXG4gICAgaGVpZ2h0KCk6IG51bWJlcjtcbiAgICBoZWlnaHQodmFsdWU6IG51bWJlcik6IEpR
dWVyeTtcbiAgICBoZWlnaHQodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoZWlnaHQoZnVu
YzogKGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBpbm5l
ckhlaWdodCgpOiBudW1iZXI7XG4gICAgaW5uZXJIZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVy
eTtcblxuICAgIGlubmVyV2lkdGgoKTogbnVtYmVyO1xuICAgIGlubmVyV2lkdGgodmFsdWU6IG51
bWJlcik6IEpRdWVyeTtcblxuICAgIG9mZnNldCgpOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1i
ZXI7IH07XG4gICAgb2Zmc2V0KGNvb3JkaW5hdGVzOiBhbnkpOiBKUXVlcnk7XG4gICAgb2Zmc2V0
KGZ1bmM6IChpbmRleDogYW55LCBjb29yZHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
b3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJI
ZWlnaHQodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5c
biAgICBvdXRlcldpZHRoKGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91
dGVyV2lkdGgodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7
XG5cbiAgICBwb3NpdGlvbigpOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IH07XG5cbiAg
ICBzY3JvbGxMZWZ0KCk6IG51bWJlcjtcbiAgICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpOiBK
UXVlcnk7XG5cbiAgICBzY3JvbGxUb3AoKTogbnVtYmVyO1xuICAgIHNjcm9sbFRvcCh2YWx1ZTog
bnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgd2lkdGgoKTogbnVtYmVyO1xuICAgIHdpZHRoKHZhbHVl
OiBudW1iZXIpOiBKUXVlcnk7XG4gICAgd2lkdGgodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICB3aWR0aChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8vIERhdGFcbiAgICBjbGVhclF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIGRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgZGF0
YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgIGRhdGEoa2V5Pzog
c3RyaW5nKTogYW55O1xuXG4gICAgZGVxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICByZW1vdmVEYXRhKG5hbWVPckxpc3Q/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBE
ZWZlcnJlZFxuICAgIHByb21pc2UodHlwZT86IGFueSwgdGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJv
bWlzZTxhbnk+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55
LCBkdXJhdGlvbj86IGFueSwgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmlt
YXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY29t
cGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwg
b3B0aW9uczogeyBkdXJhdGlvbj86IGFueTsgZWFzaW5nPzogc3RyaW5nOyBjb21wbGV0ZT86IEZ1
bmN0aW9uOyBzdGVwPzogRnVuY3Rpb247IHF1ZXVlPzogYm9vbGVhbjsgc3BlY2lhbEVhc2luZz86
IGFueTsgfSk6IEpRdWVyeTtcblxuICAgIGRlbGF5KGR1cmF0aW9uOiBudW1iZXIsIHF1ZXVlTmFt
ZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZU91dChkdXJhdGlvbj86
IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFu
eSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVU
byhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGVhc2luZz86IHN0
cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9u
PzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAg
ZmluaXNoKCk6IEpRdWVyeTtcblxuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzog
YW55KTogSlF1ZXJ5O1xuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBjYWxs
YmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVEb3duKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZURvd24oZHVyYXRpb24/
OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBz
bGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAg
c2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcs
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc3RvcChjbGVhclF1ZXVlPzogYm9vbGVh
biwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBzdG9wKHF1ZXVlPzogYW55LCBj
bGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAg
IHRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9n
Z2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuICAgIHRvZ2dsZShzaG93T3JIaWRlOiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgLy8g
RXZlbnRzXG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhPzogYW55LCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YTogYW55LCBwcmV2ZW50QnViYmxl
OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIHByZXZlbnRC
dWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZCguLi5ldmVudHM6IGFueVtdKTogSlF1
ZXJ5O1xuXG4gICAgYmx1cihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmx1cihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNoYW5nZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgY2hhbmdlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoZXZlbnREYXRhPzogYW55LCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQu
XG4gICAgICovXG4gICAgY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNsaWNrKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2xpY2soZXZlbnREYXRhPzog
YW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJkYmxjbGlja1wiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZGJsY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBk
YmxjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNs
aWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2
ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImZvY3Vz
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGZvY3VzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
Zm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZv
Y3Vzb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
Zm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNv
dXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgdHdvIGhhbmRs
ZXJzIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3Vz
ZSBwb2ludGVyIGVudGVycyBhbmQgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVySW4gQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBv
aW50ZXIgZW50ZXJzIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyT3V0IEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGxlYXZlcyB0aGUgZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW46IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSwgaGFuZGxlck91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBzaW5nbGUgaGFu
ZGxlciB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91
c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVySW5PdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNl
IHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3Zl
cihoYW5kbGVySW5PdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5ZG93blwiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5ZG93bigpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleWRvd25cIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5
ZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBr
ZXlkb3duXCJcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93
bihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
ImtleXByZXNzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcygp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIGtleXByZXNzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAga2V5cHJlc3MoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50
T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXl1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAga2V5dXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChl
dmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNj
cmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZCho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vkb3duXCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2Ny
aXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRv
d24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
Im1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93
bihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlZW50ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNl
ZW50ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50
ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoZXZlbnREYXRhOiBP
YmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWxlYXZl
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hl
biB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlbGVhdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vtb3ZlXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0
IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1v
dXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
Im1vdXNlb3V0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW91dCgp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
Im1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgbW91c2VvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgbW91c2VvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW92ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAg
ICAqL1xuICAgIG1vdXNlb3ZlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2
YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2V1cFwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2V1cCgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3Vz
ZXVwKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZl
bnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBvZmYoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBP
bmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVz
cGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5t
eVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5v
bigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyks
IG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0
cmluZywgc2VsZWN0b3I/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2
ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVz
dCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9y
IFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9u
IHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFs
dWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnRzIEFuIG9iamVjdCB3aGVyZSB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3Jl
IHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5k
IHRoZSB2YWx1ZXMgcmVwcmVzZW50IGhhbmRsZXIgZnVuY3Rpb25zIHByZXZpb3VzbHkgYXR0YWNo
ZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3
aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVu
IGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiB7IFtr
ZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1v
cmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5c
Ii5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEg
c2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLiBS
ZXN0IHBhcmFtZXRlciBhcmdzIGlzIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBq
UXVlcnkudHJpZ2dlcigpLiBOb3RlIHRoYXQgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIG9uIHRoZSBl
dmVudCBoYW5kbGVyIGZ1bmN0aW9uIG11c3QgYmUgbWFya2VkIGFzIG9wdGlvbmFsICg/IHN5bnRh
eCkuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBv
ciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQg
b3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1
Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRl
ciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0
aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBp
cyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hv
cnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAg
ICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3Jl
IGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9u
YWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIu
XG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUg
ZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZl
bnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdh
eXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAg
KiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5k
YXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1
ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhh
dCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJp
bmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFj
aCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhl
IHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmpl
Y3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1z
ZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFs
dWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZl
bnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRl
ciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxs
IHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFu
ZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVu
dC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBp
biBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uKGV2ZW50
czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogYW55LCBkYXRhPzogYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBm
b3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVy
IGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEg
c3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3Vj
aCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVt
ZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBl
ciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250
YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlj
a1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0g
ZGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25l
KGV2ZW50czogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFj
aCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMg
ZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQg
dHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5
ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmlu
ZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0
IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0
aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVk
IGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dl
ZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBm
YWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUg
ZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVu
dCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1v
cmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBz
dWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0g
c2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0
aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVj
dG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hl
biBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERh
dGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28g
YWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJl
dHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBz
dHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0
byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBt
b3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9u
ZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNw
YWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBj
YWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3Rv
ciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVu
dHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9y
IG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRo
ZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2Vk
IHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAg
ICovXG4gICAgb25lKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzog
c3RyaW5nLCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5
IGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBET00gaXMgZnVsbHkgbG9hZGVkLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRo
ZSBET00gaXMgcmVhZHkuXG4gICAgICovXG4gICAgcmVhZHkoaGFuZGxlcjogRnVuY3Rpb24pOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInJlc2l6ZVwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgcmVzaXplKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzY3JvbGxcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNjcm9sbCgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
c2Nyb2xsKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwo
ZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2Vs
ZWN0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzZWxlY3QoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3Rc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHNlbGVjdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
c2VsZWN0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcInN1Ym1pdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3VibWl0KCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIHN1Ym1pdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBzdWJtaXQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlcihldmVudFR5cGU6
IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICB0cmlnZ2Vy
KGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXJIYW5kbGVy
KGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogT2JqZWN0O1xu
XG4gICAgdW5iaW5kKGV2ZW50VHlwZT86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZlbnRUeXBl
OiBzdHJpbmcsIGZsczogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZ0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICB1bmRlbGVnYXRlKCk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVj
dG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6
IGFueSwgZXZlbnRzOiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShuYW1lc3BhY2U6IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHVubG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5sb2FkKGV2ZW50RGF0YT86IGFu
eSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGNvbnRleHQ6IEVsZW1lbnQ7XG4gICAganF1
ZXJ5OiBzdHJpbmc7XG5cbiAgICBlcnJvcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZXJyb3IoZXZlbnREYXRhOiBhbnksIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgcHVzaFN0YWNr
KGVsZW1lbnRzOiBhbnlbXSwgbmFtZTogYW55LCBhcmd1bWVudHM6IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8vIE1hbmlwdWxhdGlvblxuICAgIGFmdGVyKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIGFmdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBh
cHBlbmQoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYXBwZW5kKGZ1bmM6IChpbmRl
eDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZFRvKHRhcmdl
dDogYW55KTogSlF1ZXJ5O1xuXG4gICAgYmVmb3JlKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIGJlZm9yZShmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
Y2xvbmUod2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuLCBkZWVwV2l0aERhdGFBbmRFdmVudHM/
OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgZGV0YWNoKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZW1wdHkoKTogSlF1ZXJ5O1xuXG4gICAgaW5zZXJ0QWZ0ZXIodGFyZ2V0OiBhbnkp
OiBKUXVlcnk7XG4gICAgaW5zZXJ0QmVmb3JlKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAg
cHJlcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwcmVwZW5kKGZ1bmM6IChp
bmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmRUbyh0
YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZShzZWxlY3Rvcj86IGFueSk6IEpRdWVy
eTtcblxuICAgIHJlcGxhY2VBbGwodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNl
V2l0aChmdW5jOiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0ZXh0KCk6IHN0cmluZztcbiAgICB0ZXh0
KHRleHRTdHJpbmc6IGFueSk6IEpRdWVyeTtcbiAgICB0ZXh0KHRleHRTdHJpbmc6IChpbmRleDog
bnVtYmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvQXJyYXko
KTogYW55W107XG5cbiAgICB1bndyYXAoKTogSlF1ZXJ5O1xuXG4gICAgd3JhcCh3cmFwcGluZ0Vs
ZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICB3cmFwQWxsKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xu
XG4gICAgd3JhcElubmVyKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXBJ
bm5lcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2Vs
bGFuZW91c1xuICAgIGVhY2goZnVuYzogKGluZGV4OiBhbnksIGVsZW06IEVsZW1lbnQpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIGdldChpbmRleD86IG51bWJlcik6IGFueTtcblxuICAgIGluZGV4
KCk6IG51bWJlcjtcbiAgICBpbmRleChzZWxlY3Rvcjogc3RyaW5nKTogbnVtYmVyO1xuICAgIGlu
ZGV4KGVsZW1lbnQ6IGFueSk6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBsZW5n
dGg6IG51bWJlcjtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAgIFt4OiBzdHJpbmddOiBhbnk7
XG4gICAgW3g6IG51bWJlcl06IEhUTUxFbGVtZW50O1xuXG4gICAgLy8gVHJhdmVyc2luZ1xuICAg
IGFkZChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIGFkZCgu
Li5lbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgYWRkKGh0bWw6IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBhZGQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBjaGlsZHJlbihzZWxlY3Rv
cj86IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBFbGVtZW50KTogSlF1
ZXJ5O1xuICAgIGNsb3Nlc3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChlbGVt
ZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3RvcnM6IGFueSwgY29udGV4dD86
IEVsZW1lbnQpOiBhbnlbXTtcblxuICAgIGNvbnRlbnRzKCk6IEpRdWVyeTtcblxuICAgIGVuZCgp
OiBKUXVlcnk7XG5cbiAgICBlcShpbmRleDogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgZmlsdGVy
KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGZ1bmM6IChpbmRleDogYW55
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAg
ICBmaWx0ZXIob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBmaW5kKHNlbGVjdG9yOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgZmluZChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmluZChv
Ymo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpcnN0KCk6IEpRdWVyeTtcblxuICAgIGhhcyhz
ZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhhcyhjb250YWluZWQ6IEVsZW1lbnQpOiBK
UXVlcnk7XG5cbiAgICBpcyhzZWxlY3Rvcjogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBpcyhmdW5j
OiAoaW5kZXg6IGFueSkgPT4gYW55KTogYm9vbGVhbjtcbiAgICBpcyhlbGVtZW50OiBhbnkpOiBi
b29sZWFuO1xuICAgIGlzKG9iajogSlF1ZXJ5KTogYm9vbGVhbjtcblxuICAgIGxhc3QoKTogSlF1
ZXJ5O1xuXG4gICAgbWFwKGNhbGxiYWNrOiAoaW5kZXg6IGFueSwgZG9tRWxlbWVudDogRWxlbWVu
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbmV4dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIG5leHRBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0
VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBu
ZXh0VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBuZXh0VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICBub3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBub3QoZnVuYzogKGluZGV4OiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBub3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAg
IG5vdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIG9mZnNldFBhcmVudCgpOiBKUXVlcnk7
XG5cbiAgICBwYXJlbnQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRz
KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50c1VudGlsKHNlbGVjdG9y
Pzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKGVs
ZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1Vu
dGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldihz
ZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZBbGwoc2VsZWN0b3I/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRl
cj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzaWJsaW5ncyhzZWxlY3Rvcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcik6IEpRdWVyeTtc
blxuICAgIC8vIFV0aWxpdGllc1xuXG4gICAgcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogYW55
W107XG4gICAgcXVldWUocXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55
KTogSlF1ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xu
fVxuZGVjbGFyZSBtb2R1bGUgXCJqcXVlcnlcIiB7XG4gICAgZXhwb3J0ID0gJDtcbn1cbmRlY2xh
cmUgdmFyIGpRdWVyeTogSlF1ZXJ5U3RhdGljO1xuZGVjbGFyZSB2YXIgJDogSlF1ZXJ5U3RhdGlj
O1xuLy8gbGlicy9hbmd1bGFyL2FuZ3VsYXIuZC50c1xuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3Ig
QW5ndWxhciBKUyAxLjBcbi8vIFByb2plY3Q6IGh0dHA6Ly9hbmd1bGFyanMub3JnXG4vLyBEZWZp
bml0aW9ucyBieTogRGllZ28gVmlsYXIgPGh0dHA6Ly9naXRodWIuY29tL2RpZWdvdmlsYXI+XG4v
LyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlU
eXBlZFxuXG5cblxuZGVjbGFyZSB2YXIgYW5ndWxhcjogbmcuSUFuZ3VsYXJTdGF0aWM7XG5cbi8v
IFN1cHBvcnQgZm9yIHBhaW5sZXNzIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG5pbnRlcmZhY2UgRnVu
Y3Rpb24ge1xuICAgICRpbmplY3Q6c3RyaW5nW107XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbi8vIG5nIG1vZHVsZSAoYW5ndWxhci5qcylcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmRl
Y2xhcmUgbW9kdWxlIG5nIHtcblxuICAgIC8vIEFsbCBzZXJ2aWNlIHByb3ZpZGVycyBleHRlbmQg
dGhpcyBpbnRlcmZhY2VcbiAgICBpbnRlcmZhY2UgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
ICRnZXQ6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmd1
bGFyU3RhdGljXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyU3RhdGljIHtcbiAgICAg
ICAgYmluZChjb250ZXh0OiBhbnksIGZuOiBGdW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBGdW5j
dGlvbjtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IHN0cmluZywgbW9kdWxlcz86IGFueVtd
KTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogSlF1
ZXJ5LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJv
b3RzdHJhcChlbGVtZW50OiBFbGVtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3Rv
clNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBEb2N1bWVudCwgbW9kdWxlcz86
IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBjb3B5KHNvdXJjZTogYW55
LCBkZXN0aW5hdGlvbj86IGFueSk6IGFueTtcbiAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpR
dWVyeVN0YXRpYztcbiAgICAgICAgZXF1YWxzKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSk6IGJv
b2xlYW47XG4gICAgICAgIGV4dGVuZChkZXN0aW5hdGlvbjogYW55LCAuLi5zb3VyY2VzOiBhbnlb
XSk6IGFueTtcbiAgICAgICAgZm9yRWFjaChvYmo6IGFueSwgaXRlcmF0b3I6ICh2YWx1ZTogYW55
LCBrZXk6IGFueSkgPT4gYW55LCBjb250ZXh0PzogYW55KTogYW55O1xuICAgICAgICBmcm9tSnNv
bihqc29uOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlkZW50aXR5KGFyZz86IGFueSk6IGFueTtc
biAgICAgICAgaW5qZWN0b3IobW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNl
O1xuICAgICAgICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0RhdGUo
dmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9v
bGVhbjtcbiAgICAgICAgaXNFbGVtZW50KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBp
c0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc051bWJlcih2YWx1ZTog
YW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1VuZGVmaW5l
ZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgbG93ZXJjYXNlKHN0cjogc3RyaW5nKTog
c3RyaW5nO1xuICAgICAgICAvKiogY29uc3RydWN0IHlvdXIgYW5ndWxhciBhcHBsaWNhdGlvblxu
XHRcdG9mZmljaWFsIGRvY3M6IEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciBtb2R1
bGVzLlxuXHRcdHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1
bGVcblx0XHQqL1xuICAgICAgICBtb2R1bGUoXG4gICAgICAgICAgICAvKiogbmFtZSBvZiB5b3Vy
IG1vZHVsZSB5b3Ugd2FudCB0byBjcmVhdGUgKi9cbiAgICAgICAgICAgIG5hbWU6IHN0cmluZyxc
biAgICAgICAgICAgIC8qKiBuYW1lIG9mIG1vZHVsZXMgeW91cnMgZGVwZW5kcyBvbiAqL1xuICAg
ICAgICAgICAgcmVxdWlyZXM/OiBzdHJpbmdbXSxcbiAgICAgICAgICAgIGNvbmZpZ0Z1bmN0aW9u
PzogYW55KTogSU1vZHVsZTtcbiAgICAgICAgbm9vcCguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4g
ICAgICAgIHRvSnNvbihvYmo6IGFueSwgcHJldHR5PzogYm9vbGVhbik6IHN0cmluZztcbiAgICAg
ICAgdXBwZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICB2ZXJzaW9uOiB7XG4g
ICAgICAgICAgICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAgICBtYWpvcjogbnVtYmVyO1xuICAg
ICAgICAgICAgbWlub3I6IG51bWJlcjtcbiAgICAgICAgICAgIGRvdDogbnVtYmVyO1xuICAgICAg
ICAgICAgY29kZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBNb2R1bGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSU1vZHVsZSB7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGFuaW1h
dGlvbkZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6
IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAg
ICAgYW5pbWF0aW9uKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZp
Z3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIg
d29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQg
Ki9cbiAgICAgICAgY29uZmlnKGNvbmZpZ0ZuOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAg
IC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRv
IHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2Fk
aW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55
W10pOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4g
ICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1
bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGlubGlu
ZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xs
ZXIob2JqZWN0IDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0
cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBkaXJl
Y3RpdmUobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9k
dWxlO1xuICAgICAgICBkaXJlY3RpdmUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAg
ICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24p
OiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVk
RnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShvYmplY3Q6IE9iamVj
dCk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3RvcnlG
dW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5n
LCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0
ZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJp
bmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAg
ICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFu
eVtdKTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxl
O1xuICAgICAgICBydW4oaW5pdGlhbGl6YXRpb25GdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxl
O1xuICAgICAgICBydW4oaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtc
biAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIHNlcnZpY2VDb25zdHJ1Y3RvcjogRnVuY3Rp
b24pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3Rh
ZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShvYmplY3Q6
IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFu
eSk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcblxu
ICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcmVx
dWlyZXM6IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IEF0dHJpYnV0ZXNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXNcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUF0dHJpYnV0ZXMge1xuXHQvLyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBiZSBh
YmxlIHRvIGFjY2VzcyB0aGUgc2NvcGVkIGF0dHJpYnV0ZXMuIGl0J3Mgbm90IHZlcnkgZWxlZ2Fu
dFxuXHQvLyBiZWNhdXNlIHlvdSBoYXZlIHRvIHVzZSBhdHRyc1snZm9vJ10gaW5zdGVhZCBvZiBh
dHRycy5mb28gYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGJldHRlciB3YXlcblx0Ly8gdGhpcyBzaG91
bGQgcmVhbGx5IGJlIGxpbWl0ZWQgdG8gcmV0dXJuIHN0cmluZyBidXQgaXQgY3JlYXRlcyB0aGlz
IHByb2JsZW06IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE3MjAxODU0LzE2NTY1NlxuXHRb
bmFtZTogc3RyaW5nXTogYW55O1xuXG4gICAgICAgIC8vIEFkZHMgdGhlIENTUyBjbGFzcyB2YWx1
ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciB0byB0aGVcbiAgICAgICAgLy8g
ZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxs
IGJlIHRyaWdnZXJlZFxuICAgICAgICAvLyBmb3IgdGhlIGNsYXNzIGFkZGl0aW9uLlxuICAgICAg
ICAkYWRkQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gUmVtb3Zl
cyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVy
IGZyb20gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQg
dGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgZm9yXG4gICAgICAgIC8vIHRoZSBj
bGFzcyByZW1vdmFsLlxuICAgICAgICAkcmVtb3ZlQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZv
aWQ7XG5cbiAgICAgICAgLy8gU2V0IERPTSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAg
ICAgJHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gT2Jz
ZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAgICAgICAgLy8gVGhlIG9ic2VydmVy
IGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGR1cmluZyB0aGUgbmV4dCAkZGlnZXN0XG4g
ICAgICAgIC8vIGZvbGxvd2luZyBjb21waWxhdGlvbi4gVGhlIG9ic2VydmVyIGlzIHRoZW4gaW52
b2tlZCB3aGVuZXZlciB0aGVcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVkIHZhbHVlIGNoYW5nZXMu
XG4gICAgICAgICRvYnNlcnZlKG5hbWU6IHN0cmluZywgZm46KHZhbHVlPzphbnkpPT5hbnkpOiBG
dW5jdGlvbjtcblxuICAgICAgICAvLyBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFt
ZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpcyBuZWVkZWRcbiAgICAgICAgLy8gdG8g
ZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFt
ZS5cbiAgICAgICAgJGF0dHI6IE9iamVjdDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBGb3JtQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy5kaXJlY3RpdmU6Zm9ybS5Gb3JtQ29udHJvbGxlclxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRm9ybUNvbnRyb2xsZXIge1xuICAgICAgICAkcHJp
c3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlk
OiBib29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGVycm9yOiBh
bnk7XG4gICAgICAgICRhZGRDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6
IHZvaWQ7XG4gICAgICAgICRyZW1vdmVDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJv
bGxlcik6IHZvaWQ7XG4gICAgICAgICRzZXREaXJ0eSgpOiB2b2lkO1xuICAgICAgICAkc2V0UHJp
c3RpbmUoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBO
Z01vZGVsQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJTmdNb2RlbENvbnRyb2xsZXIge1xuICAgICAgICAkcmVu
ZGVyKCk6IHZvaWQ7XG4gICAgICAgICRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXk6IHN0
cmluZywgaXNWYWxpZDogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24g
c3RhdGVzIHZpZXdWYWx1ZSBhbmQgbW9kZWxWYWx1ZSB0byBiZSBhIHN0cmluZyBidXQgb3RoZXJc
biAgICAgICAgLy8gdHlwZXMgZG8gd29yayBhbmQgaXQncyBjb21tb24gdG8gdXNlIHRoZW0uXG4g
ICAgICAgICRzZXRWaWV3VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgICAgICR2aWV3VmFs
dWU6IGFueTtcblxuICAgICAgICAkbW9kZWxWYWx1ZTogYW55O1xuXG4gICAgICAgICRwYXJzZXJz
OiBJTW9kZWxQYXJzZXJbXTtcbiAgICAgICAgJGZvcm1hdHRlcnM6IElNb2RlbEZvcm1hdHRlcltd
O1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAg
ICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAg
JGludmFsaWQ6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbFBhcnNlciB7
XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9k
ZWxGb3JtYXR0ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTY29wZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlLlNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElTY29wZSB7XG4gICAgICAgICRhcHBseSgpOiBhbnk7XG4gICAg
ICAgICRhcHBseShleHA6IHN0cmluZyk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogKHNjb3Bl
OiBJU2NvcGUpID0+IGFueSk6IGFueTtcblxuICAgICAgICAkYnJvYWRjYXN0KG5hbWU6IHN0cmlu
ZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuICAgICAgICAkZGVzdHJveSgpOiB2
b2lkO1xuICAgICAgICAkZGlnZXN0KCk6IHZvaWQ7XG4gICAgICAgICRlbWl0KG5hbWU6IHN0cmlu
ZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuXG4gICAgICAgIC8vIERvY3VtZW50
YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3Vu
dHMgb24gaXRcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogc3RyaW5nLCBhcmdzPzogT2JqZWN0
KTogYW55O1xuICAgICAgICAkZXZhbChleHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55
LCBhcmdzPzogT2JqZWN0KTogYW55O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBl
eHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAg
ICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICAkZXZh
bEFzeW5jKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAg
ICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGVja2luZyBz
dHJhdGVneVxuICAgICAgICAkbmV3KGlzb2xhdGU/OiBib29sZWFuKTogSVNjb3BlO1xuXG4gICAg
ICAgICRvbihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IElBbmd1bGFyRXZlbnQsIC4u
LmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2god2F0Y2hF
eHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJv
b2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5n
LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3Bl
KSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAk
d2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86
IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3
YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzog
KG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2Jq
ZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoQ29sbGVj
dGlvbih3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBv
bGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcbiAgICAgICAg
JHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnks
IGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkg
PT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHBhcmVudDogSVNjb3BlO1xuXG4gICAgICAg
ICRpZDogbnVtYmVyO1xuXG4gICAgICAgIC8vIEhpZGRlbiBtZW1iZXJzXG4gICAgICAgICQkaXNv
bGF0ZUJpbmRpbmdzOiBhbnk7XG4gICAgICAgICQkcGhhc2U6IGFueTtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUFuZ3VsYXJFdmVudCB7XG4gICAgICAgIHRhcmdldFNjb3BlOiBJU2NvcGU7XG4g
ICAgICAgIGN1cnJlbnRTY29wZTogSVNjb3BlO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAg
ICAgIHByZXZlbnREZWZhdWx0OiBGdW5jdGlvbjtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDog
Ym9vbGVhbjtcblxuICAgICAgICAvLyBBdmFpbGFibGUgb25seSBldmVudHMgdGhhdCB3ZXJlICRl
bWl0LXRlZFxuICAgICAgICBzdG9wUHJvcGFnYXRpb24/OiBGdW5jdGlvbjtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBXaW5kb3dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR3aW5kb3dcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSVdpbmRvd1NlcnZpY2UgZXh0ZW5kcyBXaW5kb3cge31cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEJyb3dzZXJTZXJ2aWNlXG4gICAgLy8gVE9E
TyB1bmRvY3VtZW50ZWQsIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIHNvdXJjZSBjb2Rl
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElCcm93c2VyU2VydmljZSB7
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGltZW91dFNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRpbWVvdXRcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRpbWVvdXRTZXJ2aWNlIHtcbiAgICAgICAg
KGZ1bmM6IEZ1bmN0aW9uLCBkZWxheT86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTog
SVByb21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBi
b29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVydmFs
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50
ZXJ2YWxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVydmFsU2Vy
dmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlciwgY291bnQ/OiBu
dW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNh
bmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaWx0ZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJTZXJ2aWNlIHtcbiAgICAgICAgKG5hbWU6IHN0cmlu
Zyk6IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRmlsdGVyUHJvdmlkZXIgZXh0
ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBm
aWx0ZXJGYWN0b3J5OiBGdW5jdGlvbik6IElTZXJ2aWNlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYWxlXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElMb2NhbGVTZXJ2aWNlIHtcbiAgICAgICAgaWQ6IHN0cmluZztc
blxuICAgICAgICAvLyBUaGVzZSBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgLy8gQ2hlY2sg
YW5ndWxhcidzIGkxOG4gZmlsZXMgZm9yIGV4ZW1wbGVzXG4gICAgICAgIE5VTUJFUl9GT1JNQVRT
OiBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgREFURVRJTUVfRk9STUFU
UzogSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgcGx1cmFsQ2F0OiAo
bnVtOiBhbnkpID0+IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJl
ckZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBERUNJTUFMX1NFUDogc3RyaW5nO1xuICAgICAg
ICBHUk9VUF9TRVA6IHN0cmluZztcbiAgICAgICAgUEFUVEVSTlM6IElMb2NhbGVOdW1iZXJQYXR0
ZXJuRGVzY3JpcHRvcltdO1xuICAgICAgICBDVVJSRU5DWV9TWU06IHN0cmluZztcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yIHtcbiAgICAgICAg
bWluSW50OiBudW1iZXI7XG4gICAgICAgIG1pbkZyYWM6IG51bWJlcjtcbiAgICAgICAgbWF4RnJh
YzogbnVtYmVyO1xuICAgICAgICBwb3NQcmU6IHN0cmluZztcbiAgICAgICAgcG9zU3VmOiBzdHJp
bmc7XG4gICAgICAgIG5lZ1ByZTogc3RyaW5nO1xuICAgICAgICBuZWdTdWY6IHN0cmluZztcbiAg
ICAgICAgZ1NpemU6IG51bWJlcjtcbiAgICAgICAgbGdTaXplOiBudW1iZXI7XG4gICAgfVxuXG4g
ICAgaW50ZXJmYWNlIElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBN
T05USDogc3RyaW5nW107XG4gICAgICAgIFNIT1JUTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBE
QVk6IHN0cmluZ1tdO1xuICAgICAgICBTSE9SVERBWTogc3RyaW5nW107XG4gICAgICAgIEFNUE1T
OiBzdHJpbmdbXTtcbiAgICAgICAgbWVkaXVtOiBzdHJpbmc7XG4gICAgICAgIHNob3J0OiBzdHJp
bmc7XG4gICAgICAgIGZ1bGxEYXRlOiBzdHJpbmc7XG4gICAgICAgIGxvbmdEYXRlOiBzdHJpbmc7
XG4gICAgICAgIG1lZGl1bURhdGU6IHN0cmluZztcbiAgICAgICAgc2hvcnREYXRlOiBzdHJpbmc7
XG4gICAgICAgIG1lZGl1bVRpbWU6IHN0cmluZztcbiAgICAgICAgc2hvcnRUaW1lOiBzdHJpbmc7
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9nU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9nXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2dTZXJ2aWNlIHtcbiAgICAgICAgZGVidWc6
IElMb2dDYWxsO1xuICAgICAgICBlcnJvcjogSUxvZ0NhbGw7XG4gICAgICAgIGluZm86IElMb2dD
YWxsO1xuICAgICAgICBsb2c6IElMb2dDYWxsO1xuICAgICAgICB3YXJuOiBJTG9nQ2FsbDtcbiAg
ICB9XG5cbiAgICAvLyBXZSBkZWZpbmUgdGhpcyBhcyBzZXBhcmV0ZSBpbnRlcmZhY2Ugc28gd2Ug
Y2FuIHJlb3BlbiBpdCBsYXRlciBmb3JcbiAgICAvLyB0aGUgbmdNb2NrIG1vZHVsZS5cbiAgICBp
bnRlcmZhY2UgSUxvZ0NhbGwge1xuICAgICAgICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFBhcnNlU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcGFyc2VcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVBhcnNlU2VydmljZSB7XG4gICAgICAgIChleHBy
ZXNzaW9uOiBzdHJpbmcpOiBJQ29tcGlsZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJQ29tcGlsZWRFeHByZXNzaW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSwgbG9jYWxz
PzogYW55KTogYW55O1xuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdW5k
ZWZpbmVkIGlzIGdvbm5hIGJlIHVzZWQgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uXG4gICAgICAg
IC8vIGRvZXMgbm90IGNoZWNrIHRoZSBwYXJhbWV0ZXIuIExldCdzIGZvcmNlIGEgdmFsdWUgZm9y
IGNvbnNpc3RlbmN5LiBJZiBjb25zdW1lclxuICAgICAgICAvLyB3aGFudHMgdG8gdW5kZWZpbmUg
aXQsIHBhc3MgdGhlIHVuZGVmaW5lZCB2YWx1ZSBleHBsaWNpdGx5LlxuICAgICAgICBhc3NpZ24o
Y29udGV4dDogYW55LCB2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIExvY2F0aW9uU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9uUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kZXZfZ3VpZGUuc2VydmljZXMuJGxvY2F0aW9uXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblNlcnZpY2Uge1xuICAg
ICAgICBhYnNVcmwoKTogc3RyaW5nO1xuICAgICAgICBoYXNoKCk6IHN0cmluZztcbiAgICAgICAg
aGFzaChuZXdIYXNoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBob3N0KCk6
IHN0cmluZztcbiAgICAgICAgcGF0aCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgobmV3UGF0aDog
c3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgcG9ydCgpOiBudW1iZXI7XG4gICAg
ICAgIHByb3RvY29sKCk6IHN0cmluZztcbiAgICAgICAgcmVwbGFjZSgpOiBJTG9jYXRpb25TZXJ2
aWNlO1xuICAgICAgICBzZWFyY2goKTogYW55O1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyc01h
cDogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcjogc3Ry
aW5nLCBwYXJhbWV0ZXJWYWx1ZTogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgdXJs
KCk6IHN0cmluZztcbiAgICAgICAgdXJsKHVybDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uUHJvdmlkZXIgZXh0ZW5kcyBJU2Vydmlj
ZVByb3ZpZGVyIHtcbiAgICAgICAgaGFzaFByZWZpeCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2hQ
cmVmaXgocHJlZml4OiBzdHJpbmcpOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICAgICAgaHRtbDVN
b2RlKCk6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBw
YXJhbWV0ZXIgaXMgc3RyaW5nLCBidXRcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gdGVzdHMg
aXQgYXMgYm9vbGVhbiwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZVxuICAgICAgICAvLyBzaW5jZSB0
aGlzIGlzIGEgdG9nZ2xlclxuICAgICAgICBodG1sNU1vZGUoYWN0aXZlOiBib29sZWFuKTogSUxv
Y2F0aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
RG9jdW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRkb2N1bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRG9j
dW1lbnRTZXJ2aWNlIGV4dGVuZHMgRG9jdW1lbnQge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRleGNlcHRpb25IYW5kbGVyXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElFeGNlcHRpb25IYW5kbGVyU2VydmljZSB7XG4gICAgICAg
IChleGNlcHRpb246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdEVsZW1lbnRTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290RWxlbWVudFxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdEVsZW1lbnRTZXJ2aWNlIGV4dGVuZHMg
SlF1ZXJ5IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBRU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUVNlcnZpY2Uge1xuICAgICAgICBhbGwocHJvbWlz
ZXM6IElQcm9taXNlPGFueT5bXSk6IElQcm9taXNlPGFueVtdPjtcbiAgICAgICAgZGVmZXI8VD4o
KTogSURlZmVycmVkPFQ+O1xuICAgICAgICByZWplY3QocmVhc29uPzogYW55KTogSVByb21pc2U8
dm9pZD47XG4gICAgICAgIHdoZW48VD4odmFsdWU6IFQpOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSVByb21pc2U8VD4ge1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nl
c3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+LCBl
cnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0
YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1
bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSVByb21pc2U8VFJlc3Vs
dD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/
OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48
VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBUUmVzdWx0LCBl
cnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0LCBub3RpZnlDYWxsYmFjaz86
IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuXG4gICAgICAgIGNh
dGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSUh0dHBQcm9taXNlPFRS
ZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVq
ZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSVByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVz
dWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9
PiBUUmVzdWx0KTogSVByb21pc2U8VFJlc3VsdD47XG5cbiAgICAgICAgZmluYWxseTxUUmVzdWx0
PihmaW5hbGx5Q2FsbGJhY2s6ICgpPT5hbnkpOklQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJRGVmZXJyZWQ8VD4ge1xuICAgICAgICByZXNvbHZlKHZhbHVlPzogVCk6
IHZvaWQ7XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiB2b2lkO1xuICAgICAgICBub3Rp
Znkoc3RhdGU/OmFueSk6IHZvaWQ7XG4gICAgICAgIHByb21pc2U6IElQcm9taXNlPFQ+O1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuY2hvclNjcm9sbFNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGFuY2hvclNjcm9s
bFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsU2Vy
dmljZSB7XG4gICAgICAgICgpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5jaG9y
U2Nyb2xsUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlzYWJs
ZUF1dG9TY3JvbGxpbmcoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBDYWNoZUZhY3RvcnlTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRjYWNoZUZhY3RvcnlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUNhY2hlRmFjdG9yeVNlcnZpY2Uge1xuICAgICAgICAvLyBMZXRzIG5vdCBm
b2NlIHRoZSBvcHRpb25zTWFwIHRvIGhhdmUgdGhlIGNhcGFjaXR5IG1lbWJlci4gRXZlbiB0aG91
Z2hcbiAgICAgICAgLy8gaXQncyB0aGUgT05MWSBvcHRpb24gY29uc2lkZXJlZCBieSB0aGUgaW1w
bGVtZW50YXRpb24gdG9kYXksIGEgY29uc3VtZXJcbiAgICAgICAgLy8gbWlnaHQgZmluZCBpdCB1
c2VmdWwgdG8gYXNzb2NpYXRlIHNvbWUgb3RoZXIgb3B0aW9ucyB0byB0aGUgY2FjaGUgb2JqZWN0
LlxuICAgICAgICAvLyhjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBu
dW1iZXI7IH0pOiBDYWNoZU9iamVjdDtcbiAgICAgICAgKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9u
c01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IElDYWNoZU9iamVjdDtcblxuICAgICAgICAv
LyBNZXRob2RzIGJlbGxvdyBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgaW5mbygpOiBhbnk7
XG4gICAgICAgIGdldCAoY2FjaGVJZDogc3RyaW5nKTogSUNhY2hlT2JqZWN0O1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJQ2FjaGVPYmplY3Qge1xuICAgICAgICBpbmZvKCk6IHtcbiAgICAgICAg
ICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBzaXplOiBudW1iZXI7XG5cbiAgICAgICAgICAg
IC8vIE5vdCBnYXJhbnRlZWQgdG8gaGF2ZSwgc2luY2UgaXQncyBhIG5vbi1tYW5kYXRvcnkgb3B0
aW9uXG4gICAgICAgICAgICAvL2NhcGFjaXR5OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICAg
IHB1dChrZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lkO1xuICAgICAgICBnZXQgKGtleTog
c3RyaW5nKTogYW55O1xuICAgICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgICAg
ICByZW1vdmVBbGwoKTogdm9pZDtcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbXBpbGVTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXJcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVTZXJ2aWNlIHtcbiAgICAgICAg
KGVsZW1lbnQ6IHN0cmluZywgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwg
bWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAg
IChlbGVtZW50OiBFbGVtZW50LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9u
LCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAg
ICAgKGVsZW1lbnQ6IEpRdWVyeSwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlv
biwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTog
RnVuY3Rpb24pOiBJQ29tcGlsZVByb3ZpZGVyO1xuXG4gICAgICAgIC8vIFVuZG9jdW1lbnRlZCwg
YnV0IGl0IGlzIHRoZXJlLi4uXG4gICAgICAgIGRpcmVjdGl2ZShkaXJlY3RpdmVzTWFwOiBhbnkp
OiBJQ29tcGlsZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJVGVtcGxhdGVMaW5r
aW5nRnVuY3Rpb24ge1xuICAgICAgICAvLyBMZXQncyBoaW50IGJ1dCBub3QgZm9yY2UgY2xvbmVB
dHRhY2hGbidzIHNpZ25hdHVyZVxuICAgICAgICAoc2NvcGU6IElTY29wZSwgY2xvbmVBdHRhY2hG
bj86IChjbG9uZWRFbGVtZW50PzogSlF1ZXJ5LCBzY29wZT86IElTY29wZSkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnRyb2xsZXJT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250
cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250
cm9sbGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNv
bnRyb2xsZXJTZXJ2aWNlIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24g
ZG9lc24ndCBzdGF0ZSB0aGlzLCBsb2NhbHMgYXJlIG9wdGlvbmFsXG4gICAgICAgIChjb250cm9s
bGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIChj
b250cm9sbGVyTmFtZTogc3RyaW5nLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElDb250cm9sbGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtc
biAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1
bmN0aW9uKTogdm9pZDtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBkZXBlbmRlbmN5
QW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBIdHRwU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGlu
dGVyZmFjZSBJSHR0cFNlcnZpY2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBtb2V0aG9kIGFuZCB1
cmwgbXVzdCBiZSBwcm92aWRlZC4uLlxuICAgICAgICAoY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6
IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBnZXQgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29u
ZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlbGV0ZSAodXJsOiBzdHJp
bmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgaGVh
ZCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xu
ICAgICAgICBqc29ucCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJv
bWlzZTxhbnk+O1xuICAgICAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RD
b25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcHV0KHVybDogc3RyaW5n
LCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAg
ICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuXG4gICAgICAgIC8vIEZvciBkZWJ1Z2dp
bmcsIEJVVCBpdCBpcyBkb2N1bWVudGVkIGFzIHB1YmxpYywgc28uLi5cbiAgICAgICAgcGVuZGlu
Z1JlcXVlc3RzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGhpbnRp
bmcuXG4gICAgLy8gU29tZSBvcGV0aW9ucyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGRlcGVuZGlu
ZyBvbiB0aGUgcmVxdWVzdC5cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGh0dHAjVXNhZ2UgZm9yIG9wdGlvbnMgZXhwbGFuYXRpb25zXG4gICAgaW50ZXJmYWNl
IElSZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgIHVybDog
c3RyaW5nO1xuICAgICAgICBwYXJhbXM/OiBhbnk7XG5cbiAgICAgICAgLy8gWFhYIGl0IGhhcyBp
dCdzIG93biBzdHJ1Y3R1cmUuLi4gIHBlcmhhcHMgd2Ugc2hvdWxkIGRlZmluZSBpdCBpbiB0aGUg
ZnV0dXJlXG4gICAgICAgIGhlYWRlcnM/OiBhbnk7XG5cbiAgICAgICAgY2FjaGU/OiBhbnk7XG4g
ICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgICAgICAgLy8gVGhlc2UgYWNj
ZXB0IG11bHRpcGxlIHR5cGVzLCBzbyBsZXQncyBkZWZpbmUgdGhlbSBhcyBhbnlcbiAgICAgICAg
ZGF0YT86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD86IGFueTtcbiAgICAgICAgdHJh
bnNmb3JtUmVzcG9uc2U/OiBhbnk7XG4gICAgICAgIHRpbWVvdXQ/OiBhbnk7IC8vIG51bWJlciB8
IHByb21pc2VcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4g
e1xuICAgICAgICAoZGF0YTogVCwgc3RhdHVzOiBudW1iZXIsIGhlYWRlcnM6IChoZWFkZXJOYW1l
OiBzdHJpbmcpID0+IHN0cmluZywgY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IHZvaWQ7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+IHtcbiAgICAgICAg
ZGF0YT86IFQ7XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICAgICAgaGVhZGVycz86ICho
ZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgICAgY29uZmlnPzogSVJlcXVlc3RD
b25maWc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZTxUPiBleHRlbmRzIElQ
cm9taXNlPFQ+IHtcbiAgICAgICAgc3VjY2VzcyhjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJh
Y2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIGVycm9yKGNhbGxiYWNrOiBJSHR0cFBy
b21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgdGhlbjxUUmVzdWx0
PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4p
ID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxi
YWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVz
dWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8
VD4pID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0
cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVy
IHtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuICAgICAgICBpbnRlcmNlcHRv
cnM6IGFueVtdO1xuICAgICAgICByZXNwb25zZUludGVyY2VwdG9yczogYW55W107XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cEJhY2tlbmRTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwQmFja2VuZFxuICAg
IC8vIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5Llxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cEJhY2tlbmRTZXJ2aWNl
IHtcbiAgICAgICAgLy8gWFhYIFBlcmhhcHMgZGVmaW5lIGNhbGxiYWNrIHNpZ25hdHVyZSBpbiB0
aGUgZnV0dXJlXG4gICAgICAgIChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHBvc3Q/OiBh
bnksIGNhbGxiYWNrPzogRnVuY3Rpb24sIGhlYWRlcnM/OiBhbnksIHRpbWVvdXQ/OiBudW1iZXIs
IHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIEludGVycG9sYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlUHJvdmlkZXJcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlU2VydmljZSB7XG4gICAg
ICAgICh0ZXh0OiBzdHJpbmcsIG11c3RIYXZlRXhwcmVzc2lvbj86IGJvb2xlYW4pOiBJSW50ZXJw
b2xhdGlvbkZ1bmN0aW9uO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBz
dGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0
aW9uRnVuY3Rpb24ge1xuICAgICAgICAoY29udGV4dDogYW55KTogc3RyaW5nO1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlk
ZXIge1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9s
KHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICAgICAgZW5kU3ltYm9s
KCk6IHN0cmluZztcbiAgICAgICAgZW5kU3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xh
dGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUZW1w
bGF0ZUNhY2hlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kdGVtcGxhdGVDYWNoZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJVGVtcGxhdGVDYWNoZVNlcnZpY2UgZXh0ZW5kcyBJQ2FjaGVPYmplY3Qge31cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJvb3RTY29wZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29wZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdFNjb3BlU2VydmljZSBleHRlbmRzIElTY29wZSB7
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG5cdGludGVyZmFjZSBJU0NFU2VydmljZSB7XG5cdFx0Z2V0VHJ1c3RlZCh0eXBlOiBz
dHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRDc3ModmFsdWU6
IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdl
dFRydXN0ZWRKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRSZXNvdXJjZVVybCh2
YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRVcmwodmFsdWU6IGFueSk6IGFueTtcblx0
XHRwYXJzZSh0eXBlOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnks
IGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0NzcyhleHByZXNzaW9uOiBzdHJpbmcp
OiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNIdG1sKGV4
cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5c
dFx0cGFyc2VBc0pzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2Fsczog
YW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Jlc291cmNlVXJsKGV4cHJlc3Npb246IHN0cmluZyk6
IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1VybChleHBy
ZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRc
dHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNIdG1s
KHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0pzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0
dHJ1c3RBc1Jlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1VybCh2YWx1
ZTogYW55KTogYW55O1xuXHRcdGlzRW5hYmxlZCgpOiBib29sZWFuO1xuXHR9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSVNDRVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7
XG4gICAgICAgIGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlU2VydmljZSB7XG4gICAgICAg
IGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcbiAgICAg
ICAgdHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgIHZhbHVl
T2YodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFNDRURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVBy
b3ZpZGVyIHtcbiAgICAgICAgcmVzb3VyY2VVcmxCbG9ja2xpc3QoYmxvY2tsaXN0OiBhbnlbXSk6
IHZvaWQ7XG4gICAgICAgIHJlc291cmNlVXJsQWxsb3dsaXN0KGFsbG93bGlzdDogYW55W10pOiB2
b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERpcmVjdGl2ZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3Zp
ZGVyI2RpcmVjdGl2ZVxuICAgIC8vIGFuZCBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRl
L2RpcmVjdGl2ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaW50ZXJmYWNlIElEaXJl
Y3RpdmV7XG4gICAgICAgIGNvbXBpbGU/OlxuICAgICAgICAgICAgKHRlbXBsYXRlRWxlbWVudDog
YW55LFxuICAgICAgICAgICAgdGVtcGxhdGVBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAg
ICAgICAgIHRyYW5zY2x1ZGU6IChzY29wZTogSVNjb3BlLCBjbG9uZUxpbmtpbmdGbjogRnVuY3Rp
b24pID0+IHZvaWRcbiAgICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICBjb250cm9sbGVyPzog
YW55O1xuICAgICAgICBjb250cm9sbGVyQXM/OiBzdHJpbmc7XG4gICAgICAgIGxpbms/OlxuICAg
ICAgICAgICAgKHNjb3BlOiBJU2NvcGUsXG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQ6IGFu
eSxcbiAgICAgICAgICAgIGluc3RhbmNlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAg
ICAgICBjb250cm9sbGVyOiBhbnlcbiAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgbmFt
ZT86IHN0cmluZztcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXI7XG4gICAgICAgIHJlcGxhY2U/
OiBib29sZWFuO1xuICAgICAgICByZXF1aXJlPzogYW55O1xuICAgICAgICByZXN0cmljdD86IHN0
cmluZztcbiAgICAgICAgc2NvcGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlPzogYW55O1xuICAg
ICAgICB0ZW1wbGF0ZVVybD86IGFueTtcbiAgICAgICAgdGVybWluYWw/OiBib29sZWFuO1xuICAg
ICAgICB0cmFuc2NsdWRlPzogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIGFuZ3VsYXIuZWxlbWVudFxuICAgIC8vIHdoZW4gY2FsbGluZyBhbmd1bGFyLmVsZW1l
bnQsIGFuZ3VsYXIgcmV0dXJucyBhIGpRdWVyeSBvYmplY3QsXG4gICAgLy8gYXVnbWVudGVkIHdp
dGggYWRkaXRpb25hbCBtZXRob2RzIGxpa2UgZS5nLiBzY29wZS5cbiAgICAvLyBzZWU6IGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVudFxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljIGV4dGVuZHMgSlF1
ZXJ5U3RhdGljIHtcbiAgICAgICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBJ
QXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCk6IElBdWdtZW50ZWRK
UXVlcnk7XG4gICAgICAgIChvYmplY3Q6IHt9KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAg
KGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9i
amVjdDogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9u
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGFycmF5OiBhbnlbXSk6IElBdWdtZW50ZWRK
UXVlcnk7XG4gICAgICAgICgpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJQXVnbWVudGVkSlF1ZXJ5IGV4dGVuZHMgSlF1ZXJ5IHtcbiAgICAgICAgLy8gVE9ETzog
ZXZlbnRzLCBob3cgdG8gZGVmaW5lP1xuICAgICAgICAvLyRkZXN0cm95XG5cbiAgICAgICAgZmlu
ZChzZWxlY3Rvcjogc3RyaW5nKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChlbGVt
ZW50OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKG9iajogSlF1ZXJ5KTog
SUF1Z21lbnRlZEpRdWVyeTtcblxuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZyk6IGFu
eTtcbiAgICAgICAgaW5qZWN0b3IoKTogYW55O1xuICAgICAgICBzY29wZSgpOiBJU2NvcGU7XG5c
biAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtc
biAgICAgICAgaW5oZXJpdGVkRGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1
ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuXG4gICAg
fVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBVVRPIG1vZHVsZSAoYW5ndWxh
ci5qcylcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBleHBvcnQgbW9kdWxlIGF1dG8ge1xu
XG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIEluamVjdG9yU2VydmljZVxuICAg
ICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kaW5qZWN0b3Jc
biAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElJbmplY3RvclNlcnZp
Y2Uge1xuICAgICAgICAgICAgYW5ub3RhdGUoZm46IEZ1bmN0aW9uKTogc3RyaW5nW107XG4gICAg
ICAgICAgICBhbm5vdGF0ZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBzdHJpbmdb
XTtcbiAgICAgICAgICAgIGdldCAobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICAgICAgaW5z
dGFudGlhdGUodHlwZUNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xu
ICAgICAgICAgICAgaW52b2tlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IGFueTtc
biAgICAgICAgICAgIGludm9rZShmdW5jOiBGdW5jdGlvbiwgY29udGV4dD86IGFueSwgbG9jYWxz
PzogYW55KTogYW55O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAg
ICAgLy8gUHJvdmlkZVNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL0FVVE8uJHByb3ZpZGVcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAg
aW50ZXJmYWNlIElQcm92aWRlU2VydmljZSB7XG4gICAgICAgICAgICAvLyBEb2N1bWVudGF0aW9u
IHNheXMgaXQgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBpbnN0YW5jZSwgYnV0IGFjdHVhbFxuICAg
ICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICAg
ICAgICAgICAgLy8gY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAg
ICAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAg
ICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9yOiBGdW5jdGlvbik6IHZv
aWQ7XG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3JJbmxpbmU6
IGFueVtdKTogdm9pZDtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNl
RmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAg
ICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtd
KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmlu
ZywgcHJvdmlkZXI6IG5nLklTZXJ2aWNlUHJvdmlkZXIpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xu
ICAgICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1
Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgc2Vydmlj
ZShuYW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlk
ZXI7XG4gICAgICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBuZy5JU2Vy
dmljZVByb3ZpZGVyO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4vLyBtb2RlbHMvVG9kb0l0ZW0u
dHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnQgY2xh
c3MgVG9kb0l0ZW0ge1xuICAgICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgIHB1YmxpYyB0
aXRsZTogc3RyaW5nLFxuICAgICAgICAgICAgcHVibGljIGNvbXBsZXRlZDogYm9vbGVhblxuICAg
ICAgICAgICAgKSB7IH1cbiAgICB9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU2NvcGUudHNcblxu
bW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1Njb3BlIGV4dGVuZHMgbmcu
SVNjb3BlIHtcblx0XHR0b2RvczogVG9kb0l0ZW1bXTtcblx0XHRuZXdUb2RvOiBzdHJpbmc7XG5c
dFx0ZWRpdGVkVG9kbzogVG9kb0l0ZW07XG5cdFx0b3JpZ2luYWxUb2RvOiBUb2RvSXRlbTtcblx0
XHRyZW1haW5pbmdDb3VudDogbnVtYmVyO1xuXHRcdGRvbmVDb3VudDogbnVtYmVyO1xuXHRcdGFs
bENoZWNrZWQ6IGJvb2xlYW47XG5cdFx0cmV2ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0c3RhdHVzRmls
dGVyOiB7IGNvbXBsZXRlZD86IGJvb2xlYW4gfTtcblx0XHRsb2NhdGlvbjogbmcuSUxvY2F0aW9u
U2VydmljZTtcblx0XHR2bTogVG9kb0N0cmw7XG5cdH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9T
dG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TdG9y
YWdlIHtcblx0XHRnZXQgKCk6IFRvZG9JdGVtW107XG5cdFx0cHV0KHRvZG9zOiBUb2RvSXRlbVtd
KTtcblx0fVxufS8vIGRpcmVjdGl2ZXMvVG9kb0ZvY3VzLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5c
dCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3Vz
IG9uIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lvbiBpdCBi
aW5kcyB0byBldmFsdWF0ZXMgdG8gdHJ1ZS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2Rv
Rm9jdXMoJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xuXHRc
dHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVy
eSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdCRzY29wZS4kd2F0Y2goYXR0cmlidXRl
cy50b2RvRm9jdXMsIG5ld3ZhbCA9PiB7XG5cdFx0XHRcdFx0aWYgKG5ld3ZhbCkge1xuXHRcdFx0
XHRcdFx0JHRpbWVvdXQoKCkgPT4gZWxlbWVudFswXS5mb2N1cygpLCAwLCBmYWxzZSk7XG5cdFx0
XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0dG9kb0ZvY3Vz
LiRpbmplY3QgPSBbJyR0aW1lb3V0J107XG5cbn0vLyBkaXJlY3RpdmVzL1RvZG9CbHVyLnRzXG5c
bm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogRGly
ZWN0aXZlIHRoYXQgZXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlz
IGFwcGxpZWQgdG8gbG9zZXMgZm9jdXMuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRv
ZG9CbHVyKCk6IG5nLklEaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAg
bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFu
eSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYmluZCgnYmx1cicsICgpID0+IHsgJHNj
b3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9CbHVyKTsgfSk7XG4gICAgICAgICAgICAgICAgJHNj
b3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdibHVyJyk7IH0pO1xu
ICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIGRpcmVjdGl2ZXMvVG9kb0Vz
Y2FwZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0Y29uc3QgRVND
QVBFX0tFWSA9IDI3O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBjYW5jZWxzIGVkaXRp
bmcgYSB0b2RvIGlmIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVzYyBrZXkuXG5cdCAqL1xuXHRleHBv
cnQgZnVuY3Rpb24gdG9kb0VzY2FwZSgpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xu
XHRcdFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0
ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LmJpbmQoJ2tleWRvd24nLCAoZXZlbnQpID0+
IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWSkge1xuXHRcdFx0
XHRcdFx0JHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9Fc2NhcGUpO1xuXHRcdFx0XHRcdH1c
blx0XHRcdFx0fSk7XG5cblx0XHRcdFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVs
ZW1lbnQudW5iaW5kKCdrZXlkb3duJyk7IH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn1cbi8v
IHNlcnZpY2VzL1RvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJp
Y3QnO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZXMgdGhhdCBwZXJzaXN0cyBhbmQgcmV0cmll
dmVzIFRPRE9zIGZyb20gbG9jYWxTdG9yYWdlLlxuICAgICAqL1xuICAgIGV4cG9ydCBjbGFzcyBU
b2RvU3RvcmFnZSBpbXBsZW1lbnRzIElUb2RvU3RvcmFnZSB7XG5cbiAgICAgICAgU1RPUkFHRV9J
RCA9ICd0b2Rvcy1hbmd1bGFyanMtdHlwZXNjcmlwdCc7XG5cbiAgICAgICAgZ2V0ICgpOiBUb2Rv
SXRlbVtdIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJ
dGVtKHRoaXMuU1RPUkFHRV9JRCkgfHwgJ1tdJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXQo
dG9kb3M6IFRvZG9JdGVtW10pIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRo
aXMuU1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3MpKTtcbiAgICAgICAgfVxuICAgIH1c
bn0vLyBjb250cm9sbGVycy9Ub2RvQ3RybC50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0
cmljdCc7XG5cblx0LyoqXG5cdCAqIFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBhcHAuIFRo
ZSBjb250cm9sbGVyOlxuXHQgKiAtIHJldHJpZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1vZGVsIHZp
YSB0aGUgdG9kb1N0b3JhZ2Ugc2VydmljZVxuXHQgKiAtIGV4cG9zZXMgdGhlIG1vZGVsIHRvIHRo
ZSB0ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxlcnNcblx0ICovXG5cdGV4cG9ydCBj
bGFzcyBUb2RvQ3RybCB7XG5cblx0XHRwcml2YXRlIHRvZG9zOiBUb2RvSXRlbVtdO1xuXG5cdFx0
Ly8gJGluamVjdCBhbm5vdGF0aW9uLlxuXHRcdC8vIEl0IHByb3ZpZGVzICRpbmplY3RvciB3aXRo
IGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyB0byBiZSBpbmplY3RlZCBpbnRvIGNvbnN0
cnVjdG9yXG5cdFx0Ly8gaXQgaXMgYmV0dGVyIHRvIGhhdmUgaXQgY2xvc2UgdG8gdGhlIGNvbnN0
cnVjdG9yLCBiZWNhdXNlIHRoZSBwYXJhbWV0ZXJzIG11c3QgbWF0Y2ggaW4gY291bnQgYW5kIHR5
cGUuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlcblx0XHRw
dWJsaWMgc3RhdGljICRpbmplY3QgPSBbXG5cdFx0XHQnJHNjb3BlJyxcblx0XHRcdCckbG9jYXRp
b24nLFxuXHRcdFx0J3RvZG9TdG9yYWdlJyxcblx0XHRcdCdmaWx0ZXJGaWx0ZXInXG5cdFx0XTtc
blxuXHRcdC8vIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQgdmlhIEFuZ3VsYXJKUyAkaW5qZWN0
b3Jcblx0XHQvLyBjb250cm9sbGVyJ3MgbmFtZSBpcyByZWdpc3RlcmVkIGluIEFwcGxpY2F0aW9u
LnRzIGFuZCBzcGVjaWZpZWQgZnJvbSBuZy1jb250cm9sbGVyIGF0dHJpYnV0ZSBpbiBpbmRleC5o
dG1sXG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0XHRwcml2YXRlICRzY29wZTogSVRvZG9TY29wZSxc
blx0XHRcdHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxuXHRcdFx0cHJp
dmF0ZSB0b2RvU3RvcmFnZTogSVRvZG9TdG9yYWdlLFxuXHRcdFx0cHJpdmF0ZSBmaWx0ZXJGaWx0
ZXJcblx0XHQpIHtcblx0XHRcdHRoaXMudG9kb3MgPSAkc2NvcGUudG9kb3MgPSB0b2RvU3RvcmFn
ZS5nZXQoKTtcblxuXHRcdFx0JHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHRcdCRzY29wZS5lZGl0
ZWRUb2RvID0gbnVsbDtcblxuXHRcdFx0Ly8gJ3ZtJyBzdGFuZHMgZm9yICd2aWV3IG1vZGVsJy4g
V2UncmUgYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyIHRvIHRoZSBzY29wZVxu
XHRcdFx0Ly8gZm9yIGl0cyBtZXRob2RzIHRvIGJlIGFjY2Vzc2libGUgZnJvbSB2aWV3IC8gSFRN
TFxuXHRcdFx0JHNjb3BlLnZtID0gdGhpcztcblxuXHRcdFx0Ly8gd2F0Y2hpbmcgZm9yIGV2ZW50
cy9jaGFuZ2VzIGluIHNjb3BlLCB3aGljaCBhcmUgY2F1c2VkIGJ5IHZpZXcvdXNlciBpbnB1dFxu
XHRcdFx0Ly8gaWYgeW91IHN1YnNjcmliZSB0byBzY29wZSBvciBldmVudCB3aXRoIGxpZmV0aW1l
IGxvbmdlciB0aGFuIHRoaXMgY29udHJvbGxlciwgbWFrZSBzdXJlIHlvdSB1bnN1YnNjcmliZS5c
blx0XHRcdCRzY29wZS4kd2F0Y2goJ3RvZG9zJywgKCkgPT4gdGhpcy5vblRvZG9zKCksIHRydWUp
O1xuXHRcdFx0JHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0aCgpJywgcGF0aCA9PiB0aGlzLm9u
UGF0aChwYXRoKSlcblxuXHRcdFx0aWYgKCRsb2NhdGlvbi5wYXRoKCkgPT09ICcnKSAkbG9jYXRp
b24ucGF0aCgnLycpO1xuXHRcdFx0JHNjb3BlLmxvY2F0aW9uID0gJGxvY2F0aW9uO1xuXHRcdH1c
blxuXHRcdG9uUGF0aChwYXRoOiBzdHJpbmcpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnN0YXR1c0Zp
bHRlciA9IChwYXRoID09PSAnL2FjdGl2ZScpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IGZhbHNl
IH0gOiAocGF0aCA9PT0gJy9jb21wbGV0ZWQnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiB0cnVl
IH0gOiB7fTtcblx0XHR9XG5cblx0XHRvblRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUucmVt
YWluaW5nQ291bnQgPSB0aGlzLmZpbHRlckZpbHRlcih0aGlzLnRvZG9zLCB7IGNvbXBsZXRlZDog
ZmFsc2UgfSkubGVuZ3RoO1xuXHRcdFx0dGhpcy4kc2NvcGUuZG9uZUNvdW50ID0gdGhpcy50b2Rv
cy5sZW5ndGggLSB0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudDtcblx0XHRcdHRoaXMuJHNjb3Bl
LmFsbENoZWNrZWQgPSAhdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnRcblx0XHRcdHRoaXMudG9k
b1N0b3JhZ2UucHV0KHRoaXMudG9kb3MpO1xuXHRcdH1cblxuXHRcdGFkZFRvZG8oKSB7XG5cdFx0
XHR2YXIgbmV3VG9kbyA6IHN0cmluZyA9IHRoaXMuJHNjb3BlLm5ld1RvZG8udHJpbSgpO1xuXHRc
dFx0aWYgKCFuZXdUb2RvLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0
XHRcdHRoaXMudG9kb3MucHVzaChuZXcgVG9kb0l0ZW0obmV3VG9kbywgZmFsc2UpKTtcblx0XHRc
dHRoaXMuJHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHR9XG5cblx0XHRlZGl0VG9kbyh0b2RvSXRl
bTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSB0b2RvSXRlbTtc
blxuXHRcdFx0Ly8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8gaW4gY2FzZSBlZGl0aW5nIGlzIGNh
bmNlbGxlZC5cblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIuZXh0ZW5k
KHt9LCB0b2RvSXRlbSk7XG5cdFx0fVxuXG5cdFx0cmV2ZXJ0RWRpdHModG9kb0l0ZW06IFRvZG9J
dGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zW3RoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSldID0g
dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvO1xuXHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSB0
cnVlO1xuXHRcdH1cblxuXHRcdGRvbmVFZGl0aW5nKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRc
dFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cdFx0XHR0aGlzLiRzY29wZS5vcmln
aW5hbFRvZG8gPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuJHNjb3BlLnJldmVydGVkKSB7XG5cdFx0
XHRcdC8vIFRvZG8gZWRpdHMgd2VyZSByZXZlcnRlZCwgZG9uJ3Qgc2F2ZS5cblx0XHRcdFx0dGhp
cy4kc2NvcGUucmV2ZXJ0ZWQgPSBudWxsO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0
XHR0b2RvSXRlbS50aXRsZSA9IHRvZG9JdGVtLnRpdGxlLnRyaW0oKTtcblx0XHRcdGlmICghdG9k
b0l0ZW0udGl0bGUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVUb2RvKHRvZG9JdGVtKTtcblx0XHRc
dH1cblx0XHR9XG5cblx0XHRyZW1vdmVUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0
dGhpcy50b2Rvcy5zcGxpY2UodGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKSwgMSk7XG5cdFx0
fVxuXG5cdFx0Y2xlYXJEb25lVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS50b2RvcyA9IHRo
aXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcih0b2RvSXRlbSA9PiAhdG9kb0l0ZW0uY29tcGxl
dGVkKTtcblx0XHR9XG5cblx0XHRtYXJrQWxsKGNvbXBsZXRlZDogYm9vbGVhbikge1xuXHRcdFx0
dGhpcy50b2Rvcy5mb3JFYWNoKHRvZG9JdGVtID0+IHsgdG9kb0l0ZW0uY29tcGxldGVkID0gY29t
cGxldGVkOyB9KTtcblx0XHR9XG5cdH1cblxufVxuLy8gQXBwbGljYXRpb24udHNcblxuLyoqXG4g
KiBUaGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1bGUuXG4gKlxuICogQHR5cGUge2FuZ3VsYXIuTW9k
dWxlfVxuICovXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0
b2RvbXZjID0gYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBbXSlcbiAgICAgICAgICAgIC5jb250
cm9sbGVyKCd0b2RvQ3RybCcsIFRvZG9DdHJsKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9k
b0JsdXInLCB0b2RvQmx1cilcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1cycsIHRv
ZG9Gb2N1cylcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Fc2NhcGUnLCB0b2RvRXNjYXBl
KVxuICAgICAgICAgICAgLnNlcnZpY2UoJ3RvZG9TdG9yYWdlJywgVG9kb1N0b3JhZ2UpO1xufVxu
IgogCiAvKioqLyB9KSwKIC8qIDQxNSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjguM1xuLy8g
ICAgIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNSBKZXJlbXkg
QXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRp
dG9yc1xuLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxu
ICAvLyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3
aW5kb3dgIGluIHRoZSBicm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5cbiAgdmFy
IHJvb3QgPSB0aGlzO1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2Ag
dmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2
ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFy
IEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlw
ZSwgRnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIC8vIENyZWF0ZSBxdWljayBy
ZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxu
ICB2YXJcbiAgICBwdXNoICAgICAgICAgICAgID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNl
ICAgICAgICAgICAgPSBBcnJheVByb3RvLnNsaWNlLFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBP
YmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3du
UHJvcGVydHk7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGlt
cGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJl
LlxuICB2YXJcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5h
dGl2ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9
IEZ1bmNQcm90by5iaW5kLFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAgICA9IE9iamVjdC5jcmVhdGU7
XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBl
LXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBz
YWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAg
dmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJu
IG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xu
ICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNj
b3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGli
aWxpdHkgZm9yIHRoZSBvbGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUg
YnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIGlmICh0eXBlb2YgZXhwb3J0
cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5l
ZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9
IF87XG4gICAgfVxuICAgIGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0g
XztcbiAgfVxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuOC4zJztc
blxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3Ig
Y3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ss
IHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0
aW9ucy5cbiAgdmFyIG9wdGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3Vu
dCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRj
aCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1
cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2
YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90
aGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtc
biAgICAgIH07XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNv
bGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5k
ZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9u
KGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJu
IGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9u
KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVy
biBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBB
IG1vc3RseS1pbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4g
YmUgYXBwbGllZFxuICAvLyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5p
bmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFuIGFyYml0
cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29y
LlxuICB2YXIgY2IgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBp
ZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlv
bih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4g
ICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICBy
ZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRlcmF0ZWUgPSBmdW5jdGlvbih2
YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkp
O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25l
ciBmdW5jdGlvbnMuXG4gIHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNGdW5jLCB1
bmRlZmluZWRPbmx5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxl
bmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0g
bnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5n
dGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4g
ICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlz
Lmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAg
ICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIXVuZGVmaW5lZE9ubHkgfHwgb2Jq
W2tleV0gPT09IHZvaWQgMCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAg
ICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFs
IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFu
b3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYg
KCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRl
KSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBw
cm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBl
ID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm9wZXJ0eSA9IGZ1
bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBv
YmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gSGVs
cGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0
aW9uXG4gIC8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3Rc
biAgLy8gUmVsYXRlZDogaHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYt
ZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBK
SVQgYnVnIG9uIEFSTS02NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93
KDIsIDUzKSAtIDE7XG4gIHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZh
ciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0g
Z2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1i
ZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5c
biAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxu
ICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JF
YWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtl
cy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRl
bnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250
ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3Ig
KGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAg
aXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2
YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0s
IGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5c
biAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNo
IGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZh
ciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0
aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3Ro
KTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4g
ICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAg
cmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9i
aik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJl
ZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlvbiBjcmVh
dGVSZWR1Y2UoZGlyKSB7XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJhdG9yIGZ1bmN0aW9uIGFzIHVz
aW5nIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFpbiBmdW5jdGlvbiB3aWxsIGRl
b3B0aW1pemUgdGhlLCBzZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3Iob2JqLCBpdGVy
YXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCkge1xuICAgICAgZm9yICg7IGluZGV4ID49
IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIgY3VycmVu
dEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0
ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAg
ICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0
ZWUsIG1lbW8sIGNvbnRleHQpIHtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRl
ZSwgY29udGV4dCwgNCk7XG4gICAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8u
a2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAg
ICAgICAgIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgLy8gRGV0ZXJt
aW5lIHRoZSBpbml0aWFsIHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAgICBpZiAoYXJn
dW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRl
eF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIHJldHVy
biBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZy
b20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICBf
LnJlZHVjZSA9IF8uZm9sZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJlZHVjZSgxKTtcblxuICAvLyBU
aGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZv
bGRyYC5cbiAgXy5yZWR1Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4g
IC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxp
YXNlZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihvYmosIHBy
ZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBrZXk7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9i
aikpIHtcbiAgICAgIGtleSA9IF8uZmluZEluZGV4KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtc
biAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gXy5maW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICB9XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVy
biBvYmpba2V5XTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBh
c3MgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9
IF8uc2VsZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIg
cmVzdWx0cyA9IFtdO1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4g
ICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAo
cHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAg
fSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxl
bWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgXy5yZWplY3QgPSBmdW5jdGlv
bihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8u
bmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUg
d2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxp
YXNlZCBhcyBgYWxsYC5cbiAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNh
dGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xu
ICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAg
IGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/
IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtl
eV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRy
dWU7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRo
ZSBvYmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4g
IF8uc29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAg
ICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlz
QXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8
IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5k
ZXg7XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2Jq
KSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBE
ZXRlcm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVz
aW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZXNgIGFuZCBgaW5jbHVkZWAuXG4g
IF8uY29udGFpbnMgPSBfLmluY2x1ZGVzID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2JqLCBpdGVt
LCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBf
LnZhbHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1
YXJkKSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCBpdGVtLCBmcm9t
SW5kZXgpID49IDA7XG4gIH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50
cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24o
b2JqLCBtZXRob2QpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtc
biAgICB2YXIgaXNGdW5jID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFw
KG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNGdW5jID8gbWV0aG9k
IDogdmFsdWVbbWV0aG9kXTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyBmdW5jIDogZnVu
Yy5hcHBseSh2YWx1ZSwgYXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2Ug
dmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0
eS5cbiAgXy5wbHVjayA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIF8ubWFwKG9i
aiwgXy5wcm9wZXJ0eShrZXkpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9m
IGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmplY3RzXG4g
IC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hlcmUgPSBm
dW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5tYXRjaGVy
KGF0dHJzKSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1
c2UgY2FzZSBvZiBgZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBjb250YWlu
aW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9u
KG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maW5kKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7
XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFz
ZWQgY29tcHV0YXRpb24pLlxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRl
eHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5p
dHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAm
JiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8u
dmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAo
dmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxu
ICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250
ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xu
ICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAg
IGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmluaXR5ICYm
IHJlc3VsdCA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAg
ICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAg
IH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBl
bGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlv
bihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBs
YXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlm
IChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5
TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBv
YmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9
IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVl
ID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFs
dWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGlu
ZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1
dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVz
dWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAg
IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFNo
dWZmbGUgYSBjb2xsZWN0aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8v
IFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNo
ZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
dmFyIHNldCA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgIHZh
ciBsZW5ndGggPSBzZXQubGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxlbmd0aCk7
XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykg
e1xuICAgICAgcmFuZCA9IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5kICE9PSBp
bmRleCkgc2h1ZmZsZWRbaW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVmZmxlZFty
YW5kXSA9IHNldFtpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfTtcblxu
ICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAgLy8g
SWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVu
dC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsg
d2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAg
aWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBv
YmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3Ro
IC0gMSldO1xuICAgIH1cbiAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5t
YXgoMCwgbikpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNy
aXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29u
dGV4dCk7XG4gICAgcmV0dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5k
ZXgsIGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAg
ICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGluZGV4
LCBsaXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4g
ICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlh
O1xuICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQg
MCkgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAt
MTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAg
fSksICd2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9y
IGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rp
b24oYmVoYXZpb3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4
dCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRl
ZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtc
biAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAg
YmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJl
c3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5
IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3Jv
dXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3Jv
dXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhh
cyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXld
ID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5
IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlv
dSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8uaW5kZXhC
eSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFtrZXld
ID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRo
YXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJp
bmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVc
biAgLy8gY3JpdGVyaW9uLlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZh
bHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBl
bHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWws
IGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9i
aikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJl
dHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xu
ICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5c
biAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4g
MDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2Jq
KS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5
czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNh
dGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNh
dGUuXG4gIF8ucGFydGl0aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBwYXNzID0g
W10sIGZhaWwgPSBbXTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmop
IHtcbiAgICAgIChwcmVkaWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNo
KHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xuXG4gIC8v
IEFycmF5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQgdGhlIGZp
cnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZp
cnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0
YWtlYC4gVGhlICoqZ3VhcmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBf
Lm1hcGAuXG4gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwg
Z3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAo
biA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8uaW5pdGlh
bChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRo
aW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9u
XG4gIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFs
bCB0aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4g
IF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGlj
ZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8
IGd1YXJkID8gMSA6IG4pKSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2Yg
YW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1
ZXMgaW4gdGhlIGFycmF5LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtc
biAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxs
IHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8u
cmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8v
IFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxp
YXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhl
IGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhl
IHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3Ag
PSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJh
eSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFs
bCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJy
YXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9O1xuXG4g
IC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5j
dGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBz
dGFydEluZGV4KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdLCBpZHggPSAwO1xuICAgIGZvciAodmFy
IGkgPSBzdGFydEluZGV4IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJh
eUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUp
KSkge1xuICAgICAgICAvL2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVu
dHMgb2JqZWN0XG4gICAgICAgIGlmICghc2hhbGxvdykgdmFsdWUgPSBmbGF0dGVuKHZhbHVlLCBz
aGFsbG93LCBzdHJpY3QpO1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtc
biAgICAgICAgb3V0cHV0Lmxlbmd0aCArPSBsZW47XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSB7
XG4gICAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAg
IH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4g
ICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBv
dXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25l
IGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJl
dHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJu
IGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZp
ZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJu
IF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxu
ICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRo
ZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlv
biBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAu
XG4gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRl
ZSwgY29udGV4dCkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBj
b250ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNT
b3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVl
ID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIg
c2VlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkp
OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAg
ICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFs
dWU7XG4gICAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNv
bXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAg
ICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4s
IGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAg
cmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRh
aW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAg
IH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFy
cmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBh
bGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5jdGlvbigp
IHtcbiAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlKSk7XG4g
IH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hh
cmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2Vj
dGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBh
cmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9
IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7
XG4gICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAgICAgICBp
ZiAoIV8uY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAg
ICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJl
dHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9u
ZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVt
ZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICBfLmRp
ZmZlcmVuY2UgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gZmxhdHRlbihhcmd1
bWVudHMsIHRydWUsIHRydWUsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rp
b24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9
KTtcbiAgfTtcblxuICAvLyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmds
ZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVy
LlxuICBfLnppcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuemlwKGFyZ3VtZW50cyk7
XG4gIH07XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJh
eSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hh
cmVkIGluZGljZXNcbiAgXy51bnppcCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0
aCA9IGFycmF5ICYmIF8ubWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCB8fCAwO1xuICAgIHZh
ciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IF8ucGx1Y2soYXJy
YXksIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDb252
ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBb
a2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBz
YW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9u
ZGluZyB2YWx1ZXMuXG4gIF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7XG4gICAg
dmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgo
bGlzdCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICBy
ZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1
bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4g
cmVzdWx0O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZp
bmRJbmRleCBhbmQgZmluZExhc3RJbmRleCBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlUHJl
ZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVk
aWNhdGUsIGNvbnRleHQpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4
dCk7XG4gICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRl
eCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYm
IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShh
cnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAg
IHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXgg
b24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZElu
ZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4gIF8uZmluZExhc3RJbmRleCA9
IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9y
IGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8v
IGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVz
ZXMgYmluYXJ5IHNlYXJjaC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmos
IGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4
dCwgMSk7XG4gICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwg
aGlnaCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAg
IHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJh
dGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtc
biAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24g
dG8gY3JlYXRlIHRoZSBpbmRleE9mIGFuZCBsYXN0SW5kZXhPZiBmdW5jdGlvbnNcbiAgZnVuY3Rp
b24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xu
ICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAs
IGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVt
YmVyJykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgaSA9IGlkeCA+PSAw
ID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAg
ICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6
IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5k
ZXggJiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwg
aXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4g
ICAgICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNh
dGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIF8uaXNOYU4pO1xuICAgICAgICBy
ZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9
IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHgg
Kz0gZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xu
ICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhl
IHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXks
XG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4g
IC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNz
IGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICBf
LmluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRl
eCk7XG4gIF8ubGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5kTGFzdElu
ZGV4KTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJp
dGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGBy
YW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0
dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8u
cmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51
bGwpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1c
biAgICBzdGVwID0gc3RlcCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGgu
Y2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShs
ZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3Rh
cnQgKz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJl
dHVybiByYW5nZTtcbiAgfTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXG4gIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRl
IGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvclxuICAvLyBvciBhIG5vcm1hbCBmdW5jdGlvbiB3
aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9u
KHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtc
biAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBz
b3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0
ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBw
bHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3Vs
dDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3Vu
ZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAg
Ly8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBG
dW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0aW9uKGZ1
bmMsIGNvbnRleHQpIHtcbiAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2
ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRz
LCAxKSk7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3Io
J0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBhcmdzID0gc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAg
ICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5j
b25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7
XG4gIH07XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2
ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxl
ZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4g
IC8vIGFzIGEgcGxhY2Vob2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVu
dHMgdG8gYmUgcHJlLWZpbGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykge1xuICAg
IHZhciBib3VuZEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFyIGJvdW5k
ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFy
Z3MubGVuZ3RoO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdz
W2ldID09PSBfID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAg
fVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFy
Z3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJv
dW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtc
blxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmpl
Y3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUg
Ym91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmlu
ZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgdmFyIGksIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcbiAgICBpZiAo
bGVuZ3RoIDw9IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5j
dGlvbiBuYW1lcycpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAg
a2V5ID0gYXJndW1lbnRzW2ldO1xuICAgICAgb2JqW2tleV0gPSBfLmJpbmQob2JqW2tleV0sIG9i
aik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBl
bnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVu
Y3Rpb24oZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtc
biAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcn
ICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAg
IGlmICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xu
ICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtcblxuICAv
LyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMs
IGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAg
Xy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAg
ICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5c
biAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBj
dXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRp
YWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVu
IGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmlu
ZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlv
biB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1v
cmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtl
IHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8v
IGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5n
IGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9u
cykge1xuICAgIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBu
dWxsO1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0g
e307XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlv
bnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxs
O1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICgh
dGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYm
IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJl
bWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7
XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJl
bWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVh
clRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1c
biAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29u
dGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxs
O1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxz
ZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAg
ICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5z
IGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQs
IHdpbGwgbm90XG4gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVk
IGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElm
IGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8v
IGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBm
dW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgYXJncywg
Y29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigp
IHtcbiAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgICAgaWYgKGxh
c3QgPCB3YWl0ICYmIGxhc3QgPj0gMCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChs
YXRlciwgd2FpdCAtIGxhc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51
bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5h
cHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBh
cmdzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7
XG4gICAgICB0aW1lc3RhbXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlh
dGUgJiYgIXRpbWVvdXQ7XG4gICAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0
KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1
bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtc
biAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJl
dHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vj
b25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVm
b3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2lu
YWwgZnVuY3Rpb24uXG4gIF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICBy
ZXR1cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBu
ZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVnYXRlID0g
ZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0
dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4g
IC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qg
b2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRo
ZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAg
IHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtc
biAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFy
IHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGls
ZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVy
biByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3
aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgXy5hZnRl
ciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAg
ICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rp
b24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0
aGUgTnRoIGNhbGwuXG4gIF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2
YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDAp
IHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1c
biAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVj
dXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxs
IGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8ucGFydGlh
bChfLmJlZm9yZSwgMik7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0t
LS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBg
Zm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3Rv
U3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5v
bkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5n
JyxcbiAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3du
UHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51
bVByb3BzKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVBy
b3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAg
dmFyIHByb3RvID0gKF8uaXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJv
dG90eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBj
YXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoXy5oYXMob2JqLCBw
cm9wKSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAg
d2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tu
b25FbnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3Rv
W3Byb3BdICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChw
cm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2Yg
YW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3Jp
cHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2BcbiAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5
cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAo
dmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAg
IC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9w
cyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIGFs
bCB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuICBfLmFsbEtleXMgPSBmdW5jdGlv
bihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBr
ZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAg
Ly8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3Bz
KG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhl
IHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9u
KG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtl
eXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ld
XTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBy
ZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG9i
amVjdFxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdFxuICBf
Lm1hcE9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVy
YXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICBfLmtleXMob2Jq
KSxcbiAgICAgICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHRzID0g
e30sXG4gICAgICAgICAgY3VycmVudEtleTtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY3VycmVudEtleSA9IGtleXNbaW5kZXhd
O1xuICAgICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXld
LCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07
XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAg
cGFpcnMuXG4gIF8ucGFpcnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBB
cnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHBhaXJzW2ldID0gW2tleXNbaV0sIG9ialtrZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVy
biBwYWlycztcbiAgfTtcblxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBv
YmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0ID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBrZXlzID0gXy5rZXlz
KG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtvYmpba2V5c1tpXV1dID0ga2V5c1tpXTtcbiAgICB9
XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBv
ZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8vIEFsaWFz
ZWQgYXMgYG1ldGhvZHNgXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAg
ICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4g
ICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmpl
Y3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5l
eHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZl
biBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2Jq
ZWN0KHMpXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZh
U2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBfLmV4dGVu
ZE93biA9IF8uYXNzaWduID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBSZXR1cm5z
IHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3Rc
biAgXy5maW5kS2V5ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBw
cmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gXy5rZXlz
KG9iaiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChwcmVkaWNh
dGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH07XG5cbiAgLy8g
UmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0
ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gZnVuY3Rpb24ob2JqZWN0LCBvaXRlcmF0ZWUsIGNv
bnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9iamVjdCwgaXRlcmF0ZWUsIGtl
eXM7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChfLmlzRnVu
Y3Rpb24ob2l0ZXJhdGVlKSkge1xuICAgICAga2V5cyA9IF8uYWxsS2V5cyhvYmopO1xuICAgICAg
aXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtc
biAgICAgIGtleXMgPSBmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKTtcbiAgICAg
IGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7IHJldHVybiBrZXkgaW4gb2Jq
OyB9O1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAw
LCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5
ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJh
dGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJl
dHVybiByZXN1bHQ7XG4gIH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3
aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkp
IHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxzZSB7XG4g
ICAgICB2YXIga2V5cyA9IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEp
LCBTdHJpbmcpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAg
ICAgIHJldHVybiAhXy5jb250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAg
cmV0dXJuIF8ucGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBGaWxs
IGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRz
ID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9i
amVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8v
IElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUg
YWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9u
KHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5
cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0
dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxp
Y2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAo
IV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikg
PyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMg
aW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhl
IHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRo
b2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1l
ZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwg
aW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4g
IH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2Yg
YGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMp
IHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xu
ICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9i
amVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXld
IHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7
XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBm
b3IgYGlzRXF1YWxgLlxuICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykg
e1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRo
ZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9w
b3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2Fs
KS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xu
ICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0g
dW5kZWZpbmVkYC5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09
IGI7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFu
Y2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93
cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNz
TmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcu
Y2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAv
LyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xl
YW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6
XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24g
KE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmdd
JzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qg
d3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1
aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09
PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFO
YHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3Qo
TmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4g
K2IgIT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQg
Zm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8g
K2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4g
ICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFu
ZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJl
ZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUg
dGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAg
ICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09
PSArYjtcbiAgICB9XG5cbiAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVj
dCBBcnJheV0nO1xuICAgIGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0g
J29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAg
Ly8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50
LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFt
ZXMgYXJlLlxuICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0
cnVjdG9yO1xuICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlvbihhQ3Rv
cikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3Ry
dWN0b3InIGluIGIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4g
ICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRo
bSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9t
IEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAg
Ly8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3Mg
ZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMg
Y29tcGFyaXNvbi5cbiAgICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0
YWNrIHx8IFtdO1xuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChs
ZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJz
ZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVk
IHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3Rh
Y2tbbGVuZ3RoXSA9PT0gYjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0
byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4g
ICAgYlN0YWNrLnB1c2goYik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMg
YW5kIGFycmF5cy5cbiAgICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5
IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5c
biAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgp
IHJldHVybiBmYWxzZTtcbiAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9y
aW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAg
ICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1
cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBv
YmplY3RzLlxuICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9
IGtleXMubGVuZ3RoO1xuICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4g
dGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFs
aXR5LlxuICAgICAgaWYgKF8ua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNl
O1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNo
IG1lbWJlclxuICAgICAgICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKF8uaGFz
KGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBm
YWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJv
bSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAg
IGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEg
ZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5p
c0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfTtcblxu
ICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4g
XCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgXy5p
c0VtcHR5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1
ZTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSAmJiAoXy5pc0FycmF5KG9iaikgfHwgXy5pc1N0
cmluZyhvYmopIHx8IF8uaXNBcmd1bWVudHMob2JqKSkpIHJldHVybiBvYmoubGVuZ3RoID09PSAw
O1xuICAgIHJldHVybiBfLmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH07XG5cbiAgLy8gSXMg
YSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxu
ICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUn
cyBuYXRpdmUgQXJyYXkuaXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1
bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0
IEFycmF5XSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4g
IF8uaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7
XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYg
ISFvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRz
LCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAsIGlzRXJy
b3IuXG4gIF8uZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVy
JywgJ0RhdGUnLCAnUmVnRXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydp
cycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwo
b2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8g
RGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVt
LCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1
bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8u
aXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmhhcyhvYmosICdj
YWxsZWUnKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFw
cHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIHR5cGVvZiBidWdzIGluIG9sZCB2OCxcbiAgLy8g
SUUgMTEgKCMxNjIxKSwgYW5kIGluIFNhZmFyaSA4ICgjMTkyOSkuXG4gIGlmICh0eXBlb2YgLy4v
ICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0Jykge1xuICAgIF8u
aXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0g
J2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmpl
Y3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
cmV0dXJuIGlzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4gIH07XG5c
biAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51bWJlciB3
aGljaCBkb2VzIG5vdCBlcXVhbCBpdHNlbGYpLlxuICBfLmlzTmFOID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgcmV0dXJuIF8uaXNOdW1iZXIob2JqKSAmJiBvYmogIT09ICtvYmo7XG4gIH07XG5cbiAg
Ly8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3Ry
aW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEg
Z2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtc
biAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFi
bGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBj
aGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8g
b24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMg
PSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Q
cm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xu
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGluICpub0Nv
bmZsaWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAgLy8gcHJl
dmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0
LlxuICBfLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2aW91c1Vu
ZGVyc2NvcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRp
dHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgXy5pZGVudGl0eSA9
IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFByZWRp
Y2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJz
Y29yZS5cbiAgXy5jb25zdGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG5cbiAgXy5ub29wID0g
ZnVuY3Rpb24oKXt9O1xuXG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0eTtcblxuICAvLyBHZW5lcmF0
ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJv
cGVydHkuXG4gIF8ucHJvcGVydHlPZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmog
PT0gbnVsbCA/IGZ1bmN0aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9i
altrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hl
Y2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFs
dWVgIHBhaXJzLlxuICBfLm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRycykge1xu
ICAgIGF0dHJzID0gXy5leHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24o
b2JqKSB7XG4gICAgICByZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07XG4gIH07
XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlv
bihuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4
KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEp
O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkp
O1xuICAgIHJldHVybiBhY2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdl
ciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9u
KG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4g
ICAgICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJh
bmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJseSBmYXN0
ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8u
bm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0
VGltZSgpO1xuICB9O1xuXG4gICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5n
LlxuICB2YXIgZXNjYXBlTWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7
JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYj
eDI3OycsXG4gICAgJ2AnOiAnJiN4NjA7J1xuICB9O1xuICB2YXIgdW5lc2NhcGVNYXAgPSBfLmlu
dmVydChlc2NhcGVNYXApO1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNj
YXBpbmcgc3RyaW5ncyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIGNyZWF0ZUVz
Y2FwZXIgPSBmdW5jdGlvbihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNo
KSB7XG4gICAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9y
IGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxuICAgIHZhciBzb3Vy
Y2UgPSAnKD86JyArIF8ua2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJl
Z2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNv
dXJjZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcg
PSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJl
Z2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVy
KSA6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNj
YXBlTWFwKTtcbiAgXy51bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4g
IC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRo
ZW4gaW52b2tlIGl0IHdpdGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90aGVyd2lz
ZSwgcmV0dXJuIGl0LlxuICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHksIGZh
bGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmpl
Y3RbcHJvcGVydHldO1xuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2YWx1ZSA9
IGZhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVl
LmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGlu
dGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8v
IFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBf
LnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIg
KyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAv
LyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRl
cnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBh
bHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZh
bHVhdGUgICAgOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDogLzwlPShb
XFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xu
ICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3Ug
ZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBv
ciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5v
dCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFy
YWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFc
biAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiAgICAg
IFwiJ1wiLFxuICAgICdcXFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdyJyxcbiAg
ICAnXFxuJzogICAgICduJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjkn
OiAndTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAy
OHxcXHUyMDI5L2c7XG5cbiAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAg
IHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBKYXZhU2NyaXB0
IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9u
LlxuICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVy
cywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90
ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5
IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIF8udGVtcGxhdGUgPSBmdW5j
dGlvbih0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYm
IG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5k
ZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21i
aW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlv
bi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8
IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNo
KS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4g
ICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxh
dGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2
YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVw
bGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVh
dGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCku
cmVwbGFjZShlc2NhcGVyLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0
Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicr
XFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4n
XCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBc
IicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wi
O1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xc
blwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9i
ZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZl
c3QuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5c
IjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2
YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNl
ID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9
IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwi
cHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4g
ICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBy
ZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291
cmNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAg
IHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xu
ICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5cbiAgICAv
LyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29t
cGlsYXRpb24uXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaic7
XG4gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicg
KyBzb3VyY2UgKyAnfSc7XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgLy8gQWRk
IGEgXCJjaGFpblwiIGZ1bmN0aW9uLiBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29y
ZSBvYmplY3QuXG4gIF8uY2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2Ug
PSBfKG9iaik7XG4gICAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdGFu
Y2U7XG4gIH07XG5cbiAgLy8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJZiBVbmRl
cnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmpl
Y3QgdGhhdFxuICAvLyBjYW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFs
dGVyZWQgdmVyc2lvbnMgb2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3Jh
cHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBj
b250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3VsdCA9IGZ1
bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhv
YmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5j
dGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAg
IHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVd
ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAg
ICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQo
dGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4g
IC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9i
amVjdC5cbiAgXy5taXhpbihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rp
b25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywg
J3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xu
ICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVd
ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1l
dGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcg
fHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIGRlbGV0ZSBvYmpbMF07
XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8g
QWRkIGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFj
aChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIg
bWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0
aW9uKCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3Jh
cHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJl
c3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZh
bHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAg
Ly8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdp
bmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZp
Y2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5w
cm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtc
biAgICByZXR1cm4gJycgKyB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3Ry
YXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRl
cnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1
bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0
aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBu
YW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRo
YXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5
IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3Nl
IGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRl
ZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBl
b2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ3Vu
ZGVyc2NvcmUnLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAg
fVxufS5jYWxsKHRoaXMpKTtcbiIKK21vZHVsZS5leHBvcnRzID0gIi8vICAgICBVbmRlcnNjb3Jl
LmpzIDEuOC4zXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAw
OS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBS
ZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJh
c2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSBy
b290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBleHBvcnRzYCBvbiB0aGUg
c2VydmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFs
dWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3Qu
XztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2
ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBP
YmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8g
Q3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3Jl
IHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1
c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJp
bmcgICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBP
YmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRp
dmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJl
IGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5Lmlz
QXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZl
QmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQsXG4gICAgbmF0aXZlQ3JlYXRlICAgICAgID0g
T2JqZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJv
Z2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4g
IC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3Ig
dXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFu
Y2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJu
IG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBv
cnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNr
d2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3Jl
IGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgaWYg
KHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxl
ICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1v
ZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtc
biAgICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJ
T04gPSAnMS44LjMnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBl
ZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3Nl
ZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2Nv
cmVcbiAgLy8gZnVuY3Rpb25zLlxuICB2YXIgb3B0aW1pemVDYiA9IGZ1bmN0aW9uKGZ1bmMsIGNv
bnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1
bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAg
ICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5j
dGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2
YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRl
eHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiBy
ZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xu
ICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5k
ZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkg
e1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xu
ICB9O1xuXG4gIC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxi
YWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gIC8vIHRvIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxl
Y3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlclxuICAvLyBpZGVu
dGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJv
cGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdD
b3VudCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXy5pZGVudGl0eTtcbiAgICBp
ZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQs
IGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXIo
dmFsdWUpO1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcbiAgXy5pdGVyYXRl
ZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBjb250
ZXh0LCBJbmZpbml0eSk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNy
ZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0ZUFzc2lnbmVyID0gZnVuY3Rp
b24oa2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7
XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGgg
PCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAx
OyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1l
bnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAg
ICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkr
Kykge1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICghdW5kZWZp
bmVkT25seSB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xu
ICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH07XG5cbiAg
Ly8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGlu
aGVyaXRzIGZyb20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5
cGUpIHtcbiAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlm
IChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICBDdG9y
LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAg
Q3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFy
IHByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xu
ICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAg
fTtcblxuICAvLyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hl
dGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9y
IGFzIGFuIG9iamVjdFxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35q
b3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5
IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lO
REVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHByb3BlcnR5KCds
ZW5ndGgnKTtcbiAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAg
IHZhciBsZW5ndGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBs
ZW5ndGggPT0gJ251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYgbGVuZ3RoIDw9IE1BWF9BUlJBWV9J
TkRFWDtcbiAgfTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0
aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9u
IHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBp
ZiB0aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwg
aXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikp
IHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkr
Kykge1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBl
bHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgICBmb3IgKGkgPSAwLCBs
ZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVl
KG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJu
IG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0
ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAgXy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29u
dGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxc
biAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMg
PSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDog
aW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwg
Y3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAg
Ly8gQ3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4g
IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBPcHRpbWl6ZWQgaXRlcmF0b3Ig
ZnVuY3Rpb24gYXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aFxuICAgIC8vIGluIHRoZSBtYWluIGZ1
bmN0aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5MS5cbiAgICBmdW5jdGlvbiBpdGVy
YXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKSB7XG4gICAgICBm
b3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAg
ICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICAg
IG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7
XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rp
b24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlM
aWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2Jq
KS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4g
ICAgICAvLyBEZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUgaWYgbm9uZSBpcyBwcm92aWRlZC5c
biAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICAgICBtZW1vID0gb2JqW2tl
eXMgPyBrZXlzW2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAg
fVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4
LCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNp
bmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9y
IGBmb2xkbGAuXG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5qZWN0ID0gY3JlYXRlUmVkdWNl
KDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxz
byBrbm93biBhcyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGNyZWF0ZVJl
ZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0
cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1
bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAo
aXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAga2V5ID0gXy5maW5kSW5kZXgob2JqLCBwcmVkaWNh
dGUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBfLmZpbmRLZXkob2JqLCBw
cmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoa2V5ICE9PSB2b2lkIDAgJiYga2V5
ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVs
ZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAu
XG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRl
LCBjb250ZXh0KTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3Qp
IHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNo
KHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1
cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJl
amVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIF8u
ZmlsdGVyKG9iaiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xuICB9O1xuXG4g
IC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0
ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlv
bihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0
ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMo
b2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJl
bnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRl
KG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1c
biAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25l
IGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNl
ZCBhcyBgYW55YC5cbiAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwg
Y29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAg
dmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVu
Z3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5
c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBj
dXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xu
ICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEg
Z2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlc2AgYW5k
IGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZXMgPSBfLmluY2x1ZGUgPSBmdW5j
dGlvbihvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtl
KG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0g
J251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAgcmV0dXJuIF8uaW5kZXhPZihv
YmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbiAgfTtcblxuICAvLyBJbnZva2UgYSBtZXRob2Qg
KHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cbiAgXy5pbnZv
a2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChh
cmd1bWVudHMsIDIpO1xuICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTtcbiAg
ICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBp
c0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRob2RdO1xuICAgICAgcmV0dXJuIGZ1bmMgPT0gbnVs
bCA/IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAv
LyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRj
aGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICBy
ZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xuICB9O1xuXG4gIC8vIENvbnZlbmll
bmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBv
bmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5c
biAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIo
b2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9u
IG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0
XG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uZmluZFdo
ZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbmQob2JqLCBfLm1h
dGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAo
b3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWF4ID0gZnVuY3Rpb24ob2JqLCBp
dGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21w
dXRlZCA9IC1JbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVy
YXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShv
YmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGgg
PSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07
XG4gICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVl
O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2Io
aXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGlu
ZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBs
aXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09
PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQg
PSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxu
ICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJu
IHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBf
Lm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0
ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29t
cHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAg
IG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAg
ICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XG4gICAg
ICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xu
ICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2Jq
LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVy
YXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29t
cHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpIHtc
biAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21w
dXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lv
biBvZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwOi8vZW4ud2lraXBlZGlh
Lm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICBfLnNodWZmbGUgPSBmdW5jdGlv
bihvYmopIHtcbiAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVz
KG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7XG4gICAgdmFyIHNodWZmbGVkID0g
QXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIHJhbmQ7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrKSB7XG4gICAgICByYW5kID0gXy5yYW5kb20oMCwgaW5kZXgpO1xuICAgICAg
aWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5kXTtcbiAg
ICAgIHNodWZmbGVkW3JhbmRdID0gc2V0W2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHNodWZm
bGVkO1xuICB9O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xs
ZWN0aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xl
IHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxv
d3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwg
Z3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBpZiAoIWlzQXJy
YXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4gb2JqW18ucmFu
ZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJldHVybiBfLnNodWZmbGUob2JqKS5z
bGljZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3Mg
dmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRC
eSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNi
KGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0
aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6
IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRl
ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVm
dCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0g
cmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIg
fHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZv
aWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdo
dC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVu
Y3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIg
Z3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBv
YmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4g
ICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmpl
Y3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0
ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRl
cmlvbi5cbiAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7
XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVs
c2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmpl
Y3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBidXQgZm9y
XG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1
ZS5cbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4g
ICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBv
ZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8v
IGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhh
dCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGdyb3VwKGZ1bmN0
aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJl
c3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICAvLyBTYWZlbHkg
Y3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRv
QXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlm
IChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNBcnJh
eUxpa2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIF8u
dmFsdWVzKG9iaik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMg
aW4gYW4gb2JqZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09
IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0
aCA6IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAvLyBTcGxpdCBhIGNvbGxlY3Rpb24g
aW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHNhdGlzZnkgdGhlIGdpdmVu
XG4gIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHNhdGlz
ZnkgdGhlIHByZWRpY2F0ZS5cbiAgXy5wYXJ0aXRpb24gPSBmdW5jdGlvbihvYmosIHByZWRpY2F0
ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4g
ICAgdmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtdO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBrZXksIG9iaikge1xuICAgICAgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmopID8gcGFz
cyA6IGZhaWwpLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBbcGFzcywgZmFpbF07
XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4g
IC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxs
IHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFz
IGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0
byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0
aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9p
ZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICBy
ZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBS
ZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNp
YWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiog
d2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcg
dGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4g
ICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAt
IChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxh
c3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFz
dCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5
LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAg
IGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtc
biAgICByZXR1cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7
XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2Yg
dGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLlxuICAvLyBFc3BlY2lhbGx5
IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJl
dHVyblxuICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ucmVzdCA9IF8u
dGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBz
bGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAg
Ly8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3Qg
PSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0
eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUg
YGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFs
bG93LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sIGlkeCA9IDA7
XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlu
cHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAg
ICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc0Fy
Z3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIC8vZmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFy
cmF5IG9yIGFyZ3VtZW50cyBvYmplY3RcbiAgICAgICAgaWYgKCFzaGFsbG93KSB2YWx1ZSA9IGZs
YXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCk7XG4gICAgICAgIHZhciBqID0gMCwgbGVuID0g
dmFsdWUubGVuZ3RoO1xuICAgICAgICBvdXRwdXQubGVuZ3RoICs9IGxlbjtcbiAgICAgICAgd2hp
bGUgKGogPCBsZW4pIHtcbiAgICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAg
ICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgr
K10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxu
ICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0
KSwgb3IganVzdCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFs
bG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3csIGZhbHNlKTtcbiAgfTtc
blxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRh
aW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRob3V0ID0gZnVuY3Rpb24oYXJyYXkp
IHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywg
MSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRo
ZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3Ug
aGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNl
ZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNT
b3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRl
ZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0
ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0g
bnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9
IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdl
dExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJy
YXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBp
LCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAgICBpZiAoIWkg
fHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgc2VlbiA9
IGNvbXB1dGVkO1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIV8u
Y29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVk
KTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxz
ZSBpZiAoIV8uY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2go
dmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8v
IFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3Qg
ZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlv
biA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcmd1bWVudHMsIHRy
dWUsIHRydWUpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMg
ZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMu
XG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0g
W107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFy
IGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoXy5jb250YWlucyhyZXN1bHQsIGl0
ZW0pKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisr
KSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztc
biAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtc
biAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8v
IE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCBy
ZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3Qg
PSBmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7XG4gICAgcmV0dXJuIF8uZmlsdGVy
KGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwg
dmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0
cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5k
ZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW56
aXAoYXJndW1lbnRzKTtcbiAgfTtcblxuICAvLyBDb21wbGVtZW50IG9mIF8uemlwLiBVbnppcCBh
Y2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBl
bGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlc1xuICBfLnVuemlwID0gZnVuY3Rpb24oYXJyYXkpIHtc
biAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3Ro
IHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBp
bmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhd
ID0gXy5wbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9
O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5n
bGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBh
cnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8v
IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2
YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0
aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVz
KSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7
XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAg
fVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRv
IGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4IGZ1bmN0aW9uc1xuICBmdW5j
dGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rp
b24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJl
ZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xu
ICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7
IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBp
ZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xu
ICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRo
ZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRl
c3RcbiAgXy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiAgXy5m
aW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVz
ZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXgg
YXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWlu
dGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rp
b24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0
ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAg
IHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwg
aGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4g
ICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxz
ZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIEdlbmVy
YXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5kIGxhc3RJbmRleE9mIGZ1bmN0
aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNv
cnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAg
ICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBl
b2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAg
ICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAg
ICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHgg
KyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNl
IGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRl
ZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0g
PyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAg
IGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgXy5pc05h
Tik7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAg
ICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHgg
PCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0p
IHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4g
IC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRl
bSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGlu
IHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNv
cnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFy
eSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4
LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0x
LCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29u
dGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5h
dGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9j
dW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1s
I3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAg
aWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFy
dCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG5cbiAgICB2YXIgbGVuZ3RoID0g
TWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciBy
YW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5n
dGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4g
ICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBG
dW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0
aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9y
bWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50c1xuICB2YXIgZXhlY3V0ZUJv
dW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29u
dGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRG
dW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNl
bGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0g
c291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoXy5pc09iamVjdChyZXN1bHQp
KSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBh
IGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQg
YXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1
KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5k
ID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIGlmIChuYXRpdmVCaW5kICYmIGZ1bmMu
YmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywgc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cg
bmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAg
dmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGJvdW5kID0gZnVu
Y3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0
LCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICB9O1xuICAg
IHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBi
eSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3Vt
ZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250
ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxsb3dpbmcgYW55IGNvbWJpbmF0
aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBmdW5jdGlv
bihmdW5jKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtc
biAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxl
bmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7
XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3Nb
aV0gPSBib3VuZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFy
Z3NbaV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3Ro
KSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRl
Qm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJu
IGJvdW5kO1xuICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9k
cyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhv
ZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFj
a3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwg
PSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwg
a2V5O1xuICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3Qg
YmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aDsg
aSsrKSB7XG4gICAgICBrZXkgPSBhcmd1bWVudHNbaV07XG4gICAgICBvYmpba2V5XSA9IF8uYmlu
ZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBN
ZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBf
Lm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6ZSA9IGZ1
bmN0aW9uKGtleSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICAgIHZh
ciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykg
OiBrZXkpO1xuICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3Nd
ID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJl
c3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXpl
O1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9m
IG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRz
IHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgIHZhciBh
cmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCl7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3
YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBy
dW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5k
ZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rp
b24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9u
Y2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhy
b3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0
IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0
IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVk
Z2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBv
biB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5j
LCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2
YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlv
bnMpIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHBy
ZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAg
dGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3Mp
O1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlm
ICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7
XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBj
b250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWlu
aW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xu
ICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVs
bDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0g
ZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0
ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJh
aWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCBy
ZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xu
XG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMg
dG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24g
d2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1p
bGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlv
biBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAg
Xy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0
aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRl
ciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xu
XG4gICAgICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAwKSB7XG4gICAgICAgIHRpbWVvdXQg
PSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAg
ICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICBy
ZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91
dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxu
ICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJn
cyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAgICB2YXIgY2Fs
bE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlmICghdGltZW91dCkgdGltZW91
dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAg
ICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9
IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4g
IH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3Vt
ZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRz
LCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVj
dXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3Jh
cHBlcikge1xuICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4gIH07XG5cbiAg
Ly8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5c
biAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24o
KSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAg
IH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0
aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1
cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbiAgXy5jb21wb3NlID0gZnVu
Y3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJn
cy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3Rh
cnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQp
O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBm
dW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBj
YWxsLlxuICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMu
YXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFJl
dHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5v
dCBpbmNsdWRpbmcpIHRoZSBOdGggY2FsbC5cbiAgXy5iZWZvcmUgPSBmdW5jdGlvbih0aW1lcywg
ZnVuYykge1xuICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlm
ICgtLXRpbWVzID4gMCkge1xuICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgICAg
cmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhh
dCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8g
b2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgXy5v
bmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4g
IC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJl
IGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFz
RW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmlu
ZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBl
T2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVy
YWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4gIGZ1bmN0aW9u
IGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAgdmFyIG5vbkVudW1JZHggPSBu
b25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25z
dHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBj
b25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3Ig
aXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlm
IChfLmhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2go
cHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51
bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtw
cm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAg
ICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZl
IHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVz
IHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBm
dW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAg
IGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0g
W107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5w
dXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xs
ZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAg
Ly8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxs
S2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4g
W107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1
c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxl
Y3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAv
LyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFs
dWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2
YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ld
ID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8v
IFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxl
bWVudCBvZiB0aGUgb2JqZWN0XG4gIC8vIEluIGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJldHVybnMg
YW4gb2JqZWN0XG4gIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4
dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlz
ID0gIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAg
ICAgIHJlc3VsdHMgPSB7fSxcbiAgICAgICAgICBjdXJyZW50S2V5O1xuICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjdXJyZW50S2V5
ID0ga2V5c1tpbmRleF07XG4gICAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShv
YmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4g
cmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBg
W2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZh
ciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAg
IHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAg
ICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQg
dmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAg
Xy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFy
IGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBr
ZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBh
IHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVj
dC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMg
PSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkg
aW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChr
ZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEV4dGVu
ZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2Jq
ZWN0KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5cbiAgLy8g
QXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhl
IHBhc3NlZC1pbiBvYmplY3QocylcbiAgLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3Jn
L2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3Np
Z24pXG4gIF8uZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihfLmtleXMpO1xu
XG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSBw
cmVkaWNhdGUgdGVzdFxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29u
dGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFy
IGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBr
ZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAg
ICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1c
biAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5n
IHRoZSBhbGxvd2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmplY3Qs
IG9pdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSB7fSwgb2JqID0gb2JqZWN0
LCBpdGVyYXRlZSwga2V5cztcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4g
ICAgaWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7XG4gICAgICBrZXlzID0gXy5hbGxLZXlz
KG9iaik7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Iob2l0ZXJhdGVlLCBjb250ZXh0KTtc
biAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFs
c2UsIDEpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHsgcmV0
dXJuIGtleSBpbiBvYmo7IH07XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAg
Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4g
ICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtc
biAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAgLy8gUmV0dXJuIGEgY29weSBv
ZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsb2NrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21p
dCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoXy5pc0Z1bmN0
aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRlZSk7XG4g
ICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5tYXAoZmxhdHRlbihhcmd1bWVudHMsIGZh
bHNlLCBmYWxzZSwgMSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVl
LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9
O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9
O1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMu
XG4gIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMsIHRydWUpO1xuXG4gIC8v
IENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBl
IG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVu
IHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIF8uY3Jl
YXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNl
Q3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBfLmV4dGVuZE93bihyZXN1bHQsIHBy
b3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93
LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBf
LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5c
biAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMg
b2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFw
IGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRp
b25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0g
ZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAg
cmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBh
IGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5pc01hdGNoID0gZnVuY3Rpb24o
b2JqZWN0LCBhdHRycykge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVuZ3RoID0g
a2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAg
ICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5
XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAg
ICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJp
c29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFT
dGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9
PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1v
bnkgYGVnYWxgIHByb3Bvc2FsXShodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9p
ZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8g
YSA9PT0gMSAvIGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVj
YXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxs
KSByZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAg
ICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNl
b2YgXykgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5c
biAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1l
ICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05h
bWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGRh
dGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29i
amVjdCBSZWdFeHBdJzpcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBm
b3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdb
b2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNw
b25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xu
ICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJl
dHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4g
ICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAg
ICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOXG4gICAgICAgIGlmICgrYSAh
PT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29u
IGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiAr
YSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2Jq
ZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBD
b2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0
ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2Vu
dGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNl
bnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAg
ICByZXR1cm4gK2EgPT09ICtiO1xuICAgIH1cblxuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05h
bWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICAgIGlm
ICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZh
bHNlO1xuXG4gICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUg
bm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgIC8vIGZyb20g
ZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBi
Q3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoXy5p
c0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5j
ZW9mIGJDdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBp
biBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAg
ICAgfVxuICAgIH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVz
LiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBp
cyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9u
IGBKT2AuXG5cbiAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMu
XG4gICAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVj
dHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAg
ICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7
XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3Jt
YW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8v
IHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0g
YSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUg
Zmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3Rh
Y2sucHVzaChhKTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNv
bXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChhcmVBcnJheXMpIHtcbiAgICAgIC8v
IENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24g
aXMgbmVjZXNzYXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3Ro
ICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBj
b250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgIHdoaWxlIChs
ZW5ndGgtLSkge1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ss
IGJTdGFjaykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8g
RGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhhKSwga2V5O1xu
ICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9i
amVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFy
aW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICBpZiAoXy5rZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3Ro
KSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVl
cCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAg
ICAgaWYgKCEoXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3Rh
Y2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZp
cnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3Rh
Y2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4g
IC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJl
IGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEs
IGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVt
cHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9w
ZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51
bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXko
b2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9i
ai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09
IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVn
YXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2
ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2Jq
KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxl
IGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBl
ID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09
PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9k
czogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBp
c1JlZ0V4cCwgaXNFcnJvci5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0
cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InXSwgZnVuY3Rpb24obmFt
ZSkge1xuICAgIF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4g
dG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAgICB9O1xu
ICB9KTtcblxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4g
YnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNw
ZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVu
dHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJu
IF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNG
dW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1Z3MgaW4g
b2xkIHY4LFxuICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5KS5cbiAg
aWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmpl
Y3QnKSB7XG4gICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4g
dHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xuICAgIH07XG4gIH1cblxuICAvLyBJ
cyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBmdW5jdGlv
bihvYmopIHtcbiAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChv
YmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMgdGhl
IG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNOYU4gPSBm
dW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9iaiAhPT0gK29i
ajtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj9cbiAgXy5pc0Jvb2xl
YW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0g
ZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07
XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMg
YSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihv
YmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQg
ZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBk
aXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5
cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBu
dWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxp
dHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2Nv
cmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRv
IGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5k
ZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3Qu
XyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBL
ZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxu
ICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07
XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb25zLiBPZnRlbiB1c2VmdWwgb3V0
c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBfLmNvbnN0YW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtc
blxuICBfLm5vb3AgPSBmdW5jdGlvbigpe307XG5cbiAgXy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xu
XG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVy
bnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgcmV0dXJuIG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5KSB7XG4g
ICAgICByZXR1cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJl
ZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2Zc
biAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0
aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJl
dHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7
XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50
aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0g
QXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRl
ZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ld
ID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBh
IHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFu
ZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAg
IG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRo
LmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEg
KHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4g
aW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4g
bmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgIC8vIExpc3Qgb2YgSFRNTCBlbnRpdGll
cyBmb3IgZXNjYXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxu
ICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxu
ICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2MDsnXG4gIH07XG4gIHZhciB1bmVz
Y2FwZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb25zIGZvciBlc2Nh
cGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxu
ICB2YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkge1xuICAgIHZhciBlc2NhcGVyID0g
ZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBbbWF0Y2hdO1xuICAgIH07XG4gICAg
Ly8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVk
XG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xu
ICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdl
eHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtc
biAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAg
IHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VS
ZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3Jl
YXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVz
Y2FwZU1hcCk7XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlz
IGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVcbiAgLy8gYG9iamVjdGAgYXMgY29u
dGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0
LCBwcm9wZXJ0eSwgZmFsbGJhY2spIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/
IHZvaWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtc
biAgICAgIHZhbHVlID0gZmFsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBfLmlzRnVuY3Rpb24o
dmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gIH07XG5cbiAgLy8gR2VuZXJh
dGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBz
ZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291
bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQg
PSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlk
O1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVt
cGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0
dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5n
cyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJw
b2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xc
c1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0
aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9u
LCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8v
IGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAv
LyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4g
YmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4g
ICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHIn
OiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4Jyxc
biAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8
XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9u
KG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9O1xuXG4g
IC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3Mg
aW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0
cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3Rs
eSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xk
U2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50
ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlm
ICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAg
c2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtc
blxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24g
dmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0
aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9s
YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01h
dGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21w
aWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3By
aWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7
XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVy
cG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShp
bmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZXIsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXgg
PSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAg
c291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNj
YXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAg
ICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/
Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNv
dXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5c
biAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRo
ZSBjb3JyZWN0IG9mZmVzdC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3Vy
Y2UgKz0gXCInO1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVk
LCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICBpZiAoIXNldHRpbmdzLnZh
cmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xu
XG4gICAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4s
XCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcn
KTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAgICB0cnkg
e1xuICAgICAgdmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAn
b2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0g
c291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5j
dGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4g
ICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmll
bmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJp
YWJsZSB8fCAnb2JqJztcbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3Vt
ZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAg
fTtcblxuICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3Jh
cHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAg
IHJldHVybiBpbnN0YW5jZTtcbiAgfTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0t
XG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMg
YSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdy
YXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUg
ZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2
YXIgcmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikge1xuICAgIHJldHVybiBpbnN0YW5j
ZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBv
d24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4g
PSBmdW5jdGlvbihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24o
bmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXy5w
cm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5f
d3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAg
cmV0dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAg
fSk7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8g
dGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRv
ciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNo
JywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5j
dGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5w
cm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFw
cGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFt
ZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkg
ZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xu
ICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3Jh
cHBlci5cbiAgXy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFt
ZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBl
W25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG1ldGhvZC5h
cHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBF
eHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAg
Xy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBl
ZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveHkgZm9yIHNvbWUgbWV0aG9k
cyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQg
SlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8ucHJvdG90eXBlLnZhbHVlT2YgPSBfLnByb3RvdHlw
ZS50b0pTT04gPSBfLnByb3RvdHlwZS52YWx1ZTtcblxuICBfLnByb3RvdHlwZS50b1N0cmluZyA9
IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnJyArIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAg
Ly8gQU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkg
d2l0aCBBTUQgbG9hZGVyc1xuICAvLyB0aGF0IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1cm4gc2Vt
YW50aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVyYWxcbiAgLy8gcHJhY3RpY2UgZm9y
IEFNRCByZWdpc3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3VzLCB1bmRlcnNjb3JlIHJlZ2lzdGVy
c1xuICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBi
YXNlIGxpYnJhcnkgdGhhdCBpc1xuICAvLyBwb3B1bGFyIGVub3VnaCB0byBiZSBidW5kbGVkIGlu
IGEgdGhpcmQgcGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQgb2ZcbiAgLy8gYW4gQU1EIGxvYWQg
cmVxdWVzdC4gVGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBhblxuICAv
LyBhbm9ueW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVz
dC5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xu
ICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBf
O1xuICAgIH0pO1xuICB9XG59LmNhbGwodGhpcykpO1xuIgogCiAvKioqLyB9KSwKIC8qIDQxNiAq
LwpAQCAtMTQ4Nzc1LDcgKzE0ODc3NSw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgZnVuY3Rpb24gY29tYmluZShkZXN0LCBzcmMpIHsKICAgICBPYmplY3Qua2V5cyhzcmMpLmZv
ckVhY2goZnVuY3Rpb24obmFtZSkgewotICAgICAgaWYgKF8uaGFzKEpTSElOVC5ibGFja2xpc3Qs
IG5hbWUpKSByZXR1cm47CisgICAgICBpZiAoXy5oYXMoSlNISU5ULmJsb2NrbGlzdCwgbmFtZSkp
IHJldHVybjsKICAgICAgIGRlc3RbbmFtZV0gPSBzcmNbbmFtZV07CiAgICAgfSk7CiAgIH0KQEAg
LTE0OTA2MCw3ICsxNDkwNjAsNyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogICAgICAg
ICAgIGtleSA9IGtleS5zbGljZSgxKTsKICAgICAgICAgICB2YWwgPSBmYWxzZTsKIAotICAgICAg
ICAgIEpTSElOVC5ibGFja2xpc3Rba2V5XSA9IGtleTsKKyAgICAgICAgICBKU0hJTlQuYmxvY2ts
aXN0W2tleV0gPSBrZXk7CiAgICAgICAgICAgZGVsZXRlIHByZWRlZmluZWRba2V5XTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICBwcmVkZWZba2V5XSA9ICh2YWwgPT09ICJ0cnVlIik7CkBA
IC0xNTM4NjcsNyArMTUzODY3LDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKICAgICAg
IEpTSElOVC5lcnJvcnMgPSBbXTsKICAgICAgIEpTSElOVC51bmRlZnMgPSBbXTsKICAgICAgIEpT
SElOVC5pbnRlcm5hbHMgPSBbXTsKLSAgICAgIEpTSElOVC5ibGFja2xpc3QgPSB7fTsKKyAgICAg
IEpTSElOVC5ibG9ja2xpc3QgPSB7fTsKICAgICAgIEpTSElOVC5zY29wZSA9ICIobWFpbikiOwog
ICAgIH0KIApAQCAtMTUzODk2LDcgKzE1Mzg5Niw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24o
KSB7CiAKICAgICAgICAgaWYgKGl0ZW1bMF0gPT09ICItIikgewogICAgICAgICAgIHNsaWNlID0g
aXRlbS5zbGljZSgxKTsKLSAgICAgICAgICBKU0hJTlQuYmxhY2tsaXN0W3NsaWNlXSA9IHNsaWNl
OworICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rbc2xpY2VdID0gc2xpY2U7CiAgICAgICAgICAg
Ly8gcmVtb3ZlIGZyb20gcHJlZGVmaW5lZCBpZiB0aGVyZQogICAgICAgICAgIGRlbGV0ZSBwcmVk
ZWZpbmVkW3NsaWNlXTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE1ODI0NSw3ICsxNTgyNDUsNyBA
QCBleHBvcnRzLnZhbCA9IHsKICAgcHJlZGVmICAgICAgIDogZmFsc2UsCiAKICAgLyoqCi0gICAq
IFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSB3aGl0ZSBsaXN0IG9mIGdsb2Jh
bCB2YXJpYWJsZXMgdGhhdAorICAgKiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5
IGFuIGFsbG93IGxpc3Qgb2YgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0CiAgICAqIGFyZSBub3QgZm9y
bWFsbHkgZGVmaW5lZCBpbiB0aGUgc291cmNlIGNvZGUuIFRoaXMgaXMgbW9zdCB1c2VmdWwgd2hl
bgogICAgKiBjb21iaW5lZCB3aXRoIHRoZSBgdW5kZWZgIG9wdGlvbiBpbiBvcmRlciB0byBzdXBw
cmVzcyB3YXJuaW5ncyBmb3IKICAgICogcHJvamVjdC1zcGVjaWZpYyBnbG9iYWwgdmFyaWFibGVz
LgpAQCAtMTk1NTc2LDcgKzE5NTU3Niw3IEBAIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNp
Zmllcihub2RlKSAKIAl2YXIgcmVnZXhTaW5nbGVFc2NhcGUgPSAvWyInXFxcYlxmXG5cclx0XS87
CiAKIAl2YXIgcmVnZXhEaWdpdCA9IC9bMC05XS87Ci0JdmFyIHJlZ2V4V2hpdGVsaXN0ID0gL1sg
ISMtJlwoLVxbXF0tfl0vOworCXZhciByZWdleEFsbG93bGlzdCA9IC9bICEjLSZcKC1cW1xdLX5d
LzsKIAogCXZhciBqc2VzYyA9IGZ1bmN0aW9uKGFyZ3VtZW50LCBvcHRpb25zKSB7CiAJCS8vIEhh
bmRsZSBvcHRpb25zCkBAIC0xOTU3NTEsNyArMTk1NzUxLDcgQEAgZnVuY3Rpb24gSW1wb3J0TmFt
ZXNwYWNlU3BlY2lmaWVyKG5vZGUpIAogCQkJCX0KIAkJCX0KIAkJCWlmICghb3B0aW9ucy5lc2Nh
cGVFdmVyeXRoaW5nKSB7Ci0JCQkJaWYgKHJlZ2V4V2hpdGVsaXN0LnRlc3QoY2hhcmFjdGVyKSkg
eworCQkJCWlmIChyZWdleEFsbG93bGlzdC50ZXN0KGNoYXJhY3RlcikpIHsKIAkJCQkJLy8gSXTi
gJlzIGEgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBgImAsIGAnYCBvciBg
XGAsCiAJCQkJCS8vIHNvIGRvbuKAmXQgZXNjYXBlIGl0LgogCQkJCQlyZXN1bHQgKz0gY2hhcmFj
dGVyOwpAQCAtMjA5MDgxLDcgKzIwOTA4MSw3IEBAIHZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVy
b3BSZXF1aXJlRGVmYXUKIAogZXhwb3J0cy5jYWxsID0gY2FsbDsKIGV4cG9ydHMuX2NhbGwgPSBf
Y2FsbDsKLWV4cG9ydHMuaXNCbGFja2xpc3RlZCA9IGlzQmxhY2tsaXN0ZWQ7CitleHBvcnRzLmlz
QmxvY2tsaXN0ZWQgPSBpc0Jsb2NrbGlzdGVkOwogZXhwb3J0cy52aXNpdCA9IHZpc2l0OwogZXhw
b3J0cy5za2lwID0gc2tpcDsKIGV4cG9ydHMuc2tpcEtleSA9IHNraXBLZXk7CkBAIC0yMDkxNTcs
OSArMjA5MTU3LDkgQEAgZnVuY3Rpb24gX2NhbGwoZm5zKSB7CiAgIHJldHVybiBmYWxzZTsKIH0K
IAotZnVuY3Rpb24gaXNCbGFja2xpc3RlZCgpIHsKLSAgdmFyIGJsYWNrbGlzdCA9IHRoaXMub3B0
cy5ibGFja2xpc3Q7Ci0gIHJldHVybiBibGFja2xpc3QgJiYgYmxhY2tsaXN0LmluZGV4T2YodGhp
cy5ub2RlLnR5cGUpID4gLTE7CitmdW5jdGlvbiBpc0Jsb2NrbGlzdGVkKCkgeworICB2YXIgYmxv
Y2tsaXN0ID0gdGhpcy5vcHRzLmJsb2NrbGlzdDsKKyAgcmV0dXJuIGJsb2NrbGlzdCAmJiBibG9j
a2xpc3QuaW5kZXhPZih0aGlzLm5vZGUudHlwZSkgPiAtMTsKIH0KIAogZnVuY3Rpb24gdmlzaXQo
KSB7CkBAIC0yMDkxNjcsNyArMjA5MTY3LDcgQEAgZnVuY3Rpb24gdmlzaXQoKSB7CiAgICAgcmV0
dXJuIGZhbHNlOwogICB9CiAKLSAgaWYgKHRoaXMuaXNCbGFja2xpc3RlZCgpKSB7CisgIGlmICh0
aGlzLmlzQmxvY2tsaXN0ZWQoKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC0yMTA4
MjUsNyArMjEwODI1LDcgQEAgZnVuY3Rpb24gc2hvdWxkSWdub3JlS2V5KGtleSkgewogCiAgIGlm
IChrZXkgPT09ICJlbnRlciIgfHwga2V5ID09PSAiZXhpdCIgfHwga2V5ID09PSAic2hvdWxkU2tp
cCIpIHJldHVybiB0cnVlOwogCi0gIGlmIChrZXkgPT09ICJibGFja2xpc3QiIHx8IGtleSA9PT0g
Im5vU2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlzIikgcmV0dXJuIHRydWU7CisgIGlmIChrZXkg
PT09ICJibG9ja2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlz
IikgcmV0dXJuIHRydWU7CiAKICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjIyNTE1LDcgKzIyMjUx
NSw3IEBAIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyAKIAogY29uc3Qg
bGlmZWN5Y2xlTWV0aG9kcyA9IG5ldyBTZXQoWyJjb21wb25lbnRXaWxsVW5tb3VudCIsICJjb21w
b25lbnREaWRNb3VudCIsICJjb21wb25lbnRXaWxsTW91bnQiLCAiY29tcG9uZW50RGlkVXBkYXRl
IiwgImNvbXBvbmVudFdpbGxVcGRhdGUiLCAiY29tcG9uZW50RGlkQ2F0Y2giLCAiY29tcG9uZW50
V2lsbFJlY2VpdmVQcm9wcyJdKTsKIAotY29uc3Qgd2hpdGVsaXN0ZWRQcm9wZXJ0aWVzID0gbmV3
IFNldChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsKK2NvbnN0IGFsbG93bGlzdGVkUHJv
cGVydGllcyA9IG5ldyBTZXQoWyJwcm9wcyIsICJjb250ZXh0IiwgInJlZnMiXSk7CiAKIGZ1bmN0
aW9uIGdldEluaXRpYWxQcm9wcyhyZWFsbSwgY29tcG9uZW50VHlwZSkgewogICBsZXQgcHJvcHNO
YW1lID0gbnVsbDsKQEAgLTIyMjY4NSw3ICsyMjI2ODUsNyBAQCBmdW5jdGlvbiBldmFsdWF0ZUNs
YXNzQ29uc3RydWN0b3IocmVhbG0sCiAgICAgbGV0IGluc3RhbmNlID0gKDAsIF9pbmRleDIuQ29u
c3RydWN0KShyZWFsbSwgY29uc3RydWN0b3JGdW5jLCBbcHJvcHMsIGNvbnRleHRdKTsKICAgICAo
MCwgX2ludmFyaWFudDIuZGVmYXVsdCkoaW5zdGFuY2UgaW5zdGFuY2VvZiBfaW5kZXguT2JqZWN0
VmFsdWUpOwogICAgIGZvciAobGV0IFtwcm9wZXJ0eU5hbWVdIG9mIGluc3RhbmNlLnByb3BlcnRp
ZXMpIHsKLSAgICAgIGlmICghd2hpdGVsaXN0ZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eU5hbWUp
KSB7CisgICAgICBpZiAoIWFsbG93bGlzdGVkUHJvcGVydGllcy5oYXMocHJvcGVydHlOYW1lKSkg
ewogICAgICAgICBpbnN0YW5jZVByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7CiAgICAgICB9
CiAgICAgfQpJbmRleDogV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvd2Vi
LXRvb2xpbmctYmVuY2htYXJrL2NsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL0pldFN0cmVhbTIuMC93ZWItdG9vbGluZy1iZW5jaG1hcmsvY2xpLmpzCShyZXZp
c2lvbiAyNzExMzkpCisrKyBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0cmVhbTIuMC93
ZWItdG9vbGluZy1iZW5jaG1hcmsvY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MzU0LDM3ICs1
MzU0LDM3IEBAIGlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAKIC8qIDE2
ICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24obW9kdWxlKSB7DQotCWlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7DQot
CQltb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTsNCi0JCW1vZHVsZS5wYXRocyA9IFtd
Ow0KLQkJLy8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0DQotCQlpZighbW9k
dWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTsNCi0JCU9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShtb2R1bGUsICJsb2FkZWQiLCB7DQotCQkJZW51bWVyYWJsZTogdHJ1ZSwNCi0JCQlnZXQ6
IGZ1bmN0aW9uKCkgew0KLQkJCQlyZXR1cm4gbW9kdWxlLmw7DQotCQkJfQ0KLQkJfSk7DQotCQlP
YmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAiaWQiLCB7DQotCQkJZW51bWVyYWJsZTogdHJ1
ZSwNCi0JCQlnZXQ6IGZ1bmN0aW9uKCkgew0KLQkJCQlyZXR1cm4gbW9kdWxlLmk7DQotCQkJfQ0K
LQkJfSk7DQotCQltb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTsNCi0JfQ0KLQlyZXR1cm4gbW9k
dWxlOw0KLX07DQorbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHsKKwlpZighbW9k
dWxlLndlYnBhY2tQb2x5ZmlsbCkgeworCQltb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7
fTsKKwkJbW9kdWxlLnBhdGhzID0gW107CisJCS8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQg
YnkgZGVmYXVsdAorCQlpZighbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTsK
KwkJT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgImxvYWRlZCIsIHsKKwkJCWVudW1lcmFi
bGU6IHRydWUsCisJCQlnZXQ6IGZ1bmN0aW9uKCkgeworCQkJCXJldHVybiBtb2R1bGUubDsKKwkJ
CX0KKwkJfSk7CisJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICJpZCIsIHsKKwkJCWVu
dW1lcmFibGU6IHRydWUsCisJCQlnZXQ6IGZ1bmN0aW9uKCkgeworCQkJCXJldHVybiBtb2R1bGUu
aTsKKwkJCX0KKwkJfSk7CisJCW1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxOworCX0KKwlyZXR1
cm4gbW9kdWxlOworfTsKIAogCiAvKioqLyB9KSwKIC8qIDE3ICovCiAvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7DQotCXRo
cm93IG5ldyBFcnJvcigiZGVmaW5lIGNhbm5vdCBiZSB1c2VkIGluZGlyZWN0Iik7DQotfTsNCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeworCXRocm93IG5ldyBFcnJvcigiZGVmaW5lIGNh
bm5vdCBiZSB1c2VkIGluZGlyZWN0Iik7Cit9OwogCiAKIC8qKiovIH0pLApAQCAtNzI0OSwyNyAr
NzI0OSwyNyBAQCBmdW5jdGlvbiBDYWxsKHJlYWxtLCBGLCBWLCBhcmdzTGlzdCkgewogLyogMjEg
Ki8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotdmFyIGc7DQotDQotLy8g
VGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGUNCi1nID0gKGZ1bmN0aW9uKCkgew0KLQlyZXR1
cm4gdGhpczsNCi19KSgpOw0KLQ0KLXRyeSB7DQotCS8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBh
bGxvd2VkIChzZWUgQ1NQKQ0KLQlnID0gZyB8fCBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpIHx8
ICgxLGV2YWwpKCJ0aGlzIik7DQotfSBjYXRjaChlKSB7DQotCS8vIFRoaXMgd29ya3MgaWYgdGhl
IHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlDQotCWlmKHR5cGVvZiB3aW5kb3cgPT09ICJv
YmplY3QiKQ0KLQkJZyA9IHdpbmRvdzsNCi19DQotDQotLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZp
bmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLg0KLS8vIFdlIHJldHVybiB1bmRlZmlu
ZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzDQotLy8gZWFzaWVyIHRvIGhhbmRs
ZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufQ0KLQ0KLW1vZHVsZS5leHBvcnRzID0gZzsN
Cit2YXIgZzsKKworLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGUKK2cgPSAoZnVuY3Rp
b24oKSB7CisJcmV0dXJuIHRoaXM7Cit9KSgpOworCit0cnkgeworCS8vIFRoaXMgd29ya3MgaWYg
ZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKQorCWcgPSBnIHx8IEZ1bmN0aW9uKCJyZXR1cm4gdGhp
cyIpKCkgfHwgKDEsZXZhbCkoInRoaXMiKTsKK30gY2F0Y2goZSkgeworCS8vIFRoaXMgd29ya3Mg
aWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlCisJaWYodHlwZW9mIHdpbmRvdyA9
PT0gIm9iamVjdCIpCisJCWcgPSB3aW5kb3c7Cit9CisKKy8vIGcgY2FuIHN0aWxsIGJlIHVuZGVm
aW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi4KKy8vIFdlIHJldHVybiB1bmRlZmlu
ZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzCisvLyBlYXNpZXIgdG8gaGFuZGxl
IHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59CisKK21vZHVsZS5leHBvcnRzID0gZzsKIAog
CiAvKioqLyB9KSwKQEAgLTEwNDA1LDE1ICsxMDQwNSwxNSBAQCB0cmF2ZXJzZS5yZW1vdmVQcm9w
ZXJ0aWVzID0gZnVuY3Rpb24gKHRyCiAgIHJldHVybiB0cmVlOwogfTsKIAotZnVuY3Rpb24gaGFz
QmxhY2tsaXN0ZWRUeXBlKHBhdGgsIHN0YXRlKSB7CitmdW5jdGlvbiBoYXNCbG9ja2xpc3RlZFR5
cGUocGF0aCwgc3RhdGUpIHsKICAgaWYgKHBhdGgubm9kZS50eXBlID09PSBzdGF0ZS50eXBlKSB7
CiAgICAgc3RhdGUuaGFzID0gdHJ1ZTsKICAgICBwYXRoLnN0b3AoKTsKICAgfQogfQogCi10cmF2
ZXJzZS5oYXNUeXBlID0gZnVuY3Rpb24gKHRyZWUsIHNjb3BlLCB0eXBlLCBibGFja2xpc3RUeXBl
cykgewotICBpZiAoKDAsIF9pbmNsdWRlczIuZGVmYXVsdCkoYmxhY2tsaXN0VHlwZXMsIHRyZWUu
dHlwZSkpIHJldHVybiBmYWxzZTsKK3RyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwg
c2NvcGUsIHR5cGUsIGJsb2NrbGlzdFR5cGVzKSB7CisgIGlmICgoMCwgX2luY2x1ZGVzMi5kZWZh
dWx0KShibG9ja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNlOwogCiAgIGlmICh0
cmVlLnR5cGUgPT09IHR5cGUpIHJldHVybiB0cnVlOwogCkBAIC0xMDQyMyw4ICsxMDQyMyw4IEBA
IHRyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwgc2NvcGUKICAgfTsKIAogICB0cmF2
ZXJzZSh0cmVlLCB7Ci0gICAgYmxhY2tsaXN0OiBibGFja2xpc3RUeXBlcywKLSAgICBlbnRlcjog
aGFzQmxhY2tsaXN0ZWRUeXBlCisgICAgYmxvY2tsaXN0OiBibG9ja2xpc3RUeXBlcywKKyAgICBl
bnRlcjogaGFzQmxvY2tsaXN0ZWRUeXBlCiAgIH0sIHNjb3BlLCBzdGF0ZSk7CiAKICAgcmV0dXJu
IHN0YXRlLmhhczsKQEAgLTEzMjI4LDggKzEzMjI4LDggQEAgbW9kdWxlLmV4cG9ydHMgPSAhX193
ZWJwYWNrX3JlcXVpcmVfXyg2MgogLyogNTUgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMpIHsKIAotLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKF9fd2VicGFj
a19hbWRfb3B0aW9uc19fKSB7LyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqLw0K
LW1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX2FtZF9vcHRpb25zX187DQorLyogV0VCUEFDSyBW
QVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKF9fd2VicGFja19hbWRfb3B0aW9uc19fKSB7LyogZ2xv
YmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqLworbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBh
Y2tfYW1kX29wdGlvbnNfXzsKIAogLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4
cG9ydHMsIHt9KSkKIApAQCAtMzcwMTIsNyArMzcwMTIsNyBAQCBmdW5jdGlvbiBUeXBlZEFycmF5
U3BlY2llc0NyZWF0ZShyZWFsbSwgCiB2YXIgcHJvbWlzZUV4aXN0cyA9IHR5cGVvZiBQcm9taXNl
ID09PSAnZnVuY3Rpb24nOwogCiAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqLwotdmFyIGds
b2JhbE9iamVjdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8v
IGVzbGludC1kaXNhYmxlLWxpbmUgaWQtYmxhY2tsaXN0Cit2YXIgZ2xvYmFsT2JqZWN0ID0gdHlw
ZW9mIHNlbGYgPT09ICdvYmplY3QnID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUt
bGluZSBpZC1ibG9ja2xpc3QKIAogdmFyIHN5bWJvbEV4aXN0cyA9IHR5cGVvZiBTeW1ib2wgIT09
ICd1bmRlZmluZWQnOwogdmFyIG1hcEV4aXN0cyA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQn
OwpAQCAtMTEzODQwLDcgKzExMzg0MCw3IEBAIG1vZHVsZS5leHBvcnRzID0gIntcInZlcnNpb25c
IjozLFwic291cmMKIC8qIDQxMSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykg
ewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3
b3JrLiBsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMp
IDIwMDYtMjAxNyBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBc
bi8qIVxuV2ViIEJ1aWxkOiBodHRwczovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5
YWU3MTY3YzU4MDdiMTczZDVkZWZmNjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxu
ZGVzY3JpcHRpb246IFRoZSBoZWFydCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbmNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8g
UHJvaWV0dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUg
TW9vVG9vbHMgcHJvZHVjdGlvbiB0ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMv
KVxuXG5pbnNwaXJhdGlvbjpcbiAgLSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBb
QmFzZS5qc10oaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBD
b3B5cmlnaHQgKGMpIDIwMDYgRGVhbiBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBo
cClcbiAgLSBTb21lIGZ1bmN0aW9uYWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0
cDovL3Byb3RvdHlwZWpzLm9yZykgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5z
b24sIFtNSVQgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNl
bnNlLnBocClcblxucHJvdmlkZXM6IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0
YW5jZU9mLCBOYXRpdmVdXG5cbi4uLlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQg
ZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmln
aHQgKGMpIDIwMDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2th
bWljYW5lLykuKi9cbihmdW5jdGlvbigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9u
OiAnMS42LjAnLFxuXHRidWlsZDogJzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVl
OTVlMmInXG59O1xuXG4vLyB0eXBlT2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMu
dHlwZU9mID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVs
bCc7XG5cdGlmIChpdGVtLiRmYW1pbHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xu
XG5cdGlmIChpdGVtLm5vZGVOYW1lKXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1
cm4gJ2VsZW1lbnQnO1xuXHRcdGlmIChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8p
LnRlc3QoaXRlbS5ub2RlVmFsdWUpID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBl
bHNlIGlmICh0eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVl
JyBpbiBpdGVtKSByZXR1cm4gJ2FyZ3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSBy
ZXR1cm4gJ2NvbGxlY3Rpb24nO1xuXHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxu
dmFyIGluc3RhbmNlT2YgPSB0aGlzLmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qp
e1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9
IGl0ZW0uJGNvbnN0cnVjdG9yIHx8IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1
Y3Rvcil7XG5cdFx0aWYgKGNvbnN0cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRc
dGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5c
dGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9c
blx0cmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVy
dHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFy
IGVudW1lcmFibGVzID0gdHJ1ZTtcbmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVy
YWJsZXMgPSBudWxsO1xuaWYgKGVudW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJv
cGVydHknLCAndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxl
JywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlv
biBmb3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChl
bnVtZXJhYmxlcykgZm9yICh2YXIgaSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0
dmFyIGsgPSBlbnVtZXJhYmxlc1tpXTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwg
c28gb3ZlcmxvYWRTZXR0ZXIgY2FuIGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1
bmN0aW9uLCB3aXRob3V0IHN3YXBwaW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVy
dHkuY2FsbChvYmplY3QsIGspKSBmbi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1c
bi8qPC9sdElFOD4qL1xuXG4vLyBGdW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24g
PSB0aGlzLkZ1bmN0aW9uO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBm
dW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlv
bihhLCBiKXtcblx0XHRpZiAoYSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1
cmFsIHx8IHR5cGVvZiBhICE9ICdzdHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2Vs
Zi5jYWxsKHRoaXMsIGssIGFba10pO1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hP
YmplY3RFbnVtYmVyYWJsZUtleShhLCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVy
ID0gZnVuY3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVu
Y3Rpb24oYSl7XG5cdFx0dmFyIGFyZ3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0
cmluZycpIGFyZ3MgPSBhO1xuXHRcdGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdz
ID0gYXJndW1lbnRzO1xuXHRcdGVsc2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRp
ZiAoYXJncyl7XG5cdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwg
YXJncy5sZW5ndGg7IGkrKykgcmVzdWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3Nb
aV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5c
dFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUu
ZXh0ZW5kID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5v
dmVybG9hZFNldHRlcigpO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rp
b24oa2V5LCB2YWx1ZSl7XG5cdHRoaXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3Zlcmxv
YWRTZXR0ZXIoKTtcblxuLy8gRnJvbVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xp
Y2U7XG5cbkFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVs
bCkgcmV0dXJuIFtdO1xuXHRyZXR1cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVv
ZiBpdGVtICE9ICdzdHJpbmcnKSA/ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDog
c2xpY2UuY2FsbChpdGVtKSA6IFtpdGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5j
dGlvbihpdGVtKXtcblx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVt
IDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNv
bnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7
XG5cdHJldHVybiBpc0Zpbml0ZShudW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmlu
Zy5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5c
blxuRnVuY3Rpb24uZnJvbSA9IEZ1bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJl
ci5jb252ZXJ0O1xuU3RyaW5nLmZyb20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJv
dGVjdFxuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0
dGhpcy4kaGlkZGVuID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0
OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbi8vIFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5j
dGlvbihuYW1lLCBvYmplY3Qpe1xuXHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50
b0xvd2VyQ2FzZSgpO1xuXHRcdHZhciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRc
dHJldHVybiAodHlwZU9mKGl0ZW0pID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMn
ICsgbmFtZV0gPSB0eXBlQ2hlY2s7XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9i
amVjdC5wcm90b3R5cGUuJGZhbWlseSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93
ZXI7XG5cdFx0XHR9KS5oaWRlKCk7XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0
ID09IG51bGwpIHJldHVybiBudWxsO1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVj
dC4kY29uc3RydWN0b3IgPSBUeXBlO1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9
IG9iamVjdDtcblxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZztcblxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVt
KXtcblx0cmV0dXJuIChpdGVtICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1i
ZXInICYmIHRvU3RyaW5nLmNhbGwoaXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtc
blxudmFyIGhvb2tzID0ge307XG5cbnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0
dmFyIHR5cGUgPSB0eXBlT2Yob2JqZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBl
XSB8fCAoaG9va3NbdHlwZV0gPSBbXSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24o
bmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xu
XG5cdHZhciBob29rcyA9IGhvb2tzT2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBo
b29rcy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlw
ZU9mKGhvb2spID09ICd0eXBlJykgaW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtc
blx0XHRlbHNlIGhvb2suY2FsbCh0aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHBy
ZXZpb3VzID0gdGhpcy5wcm90b3R5cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8
ICFwcmV2aW91cy4kcHJvdGVjdGVkKSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxu
XHRpZiAodGhpc1tuYW1lXSA9PSBudWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicp
IGV4dGVuZC5jYWxsKHRoaXMsIG5hbWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRo
b2QuYXBwbHkoaXRlbSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52
YXIgZXh0ZW5kID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRo
b2QuJGhpZGRlbikgcmV0dXJuO1xuXHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAo
cHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1l
dGhvZDtcbn07XG5cblR5cGUuaW1wbGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5v
dmVybG9hZFNldHRlcigpLFxuXG5cdGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5c
blx0YWxpYXM6IGZ1bmN0aW9uKG5hbWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0
aGlzLCBuYW1lLCB0aGlzLnByb3RvdHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVy
KCksXG5cblx0bWlycm9yOiBmdW5jdGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2go
aG9vayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywg
VHlwZSk7XG5cbi8vIERlZmF1bHQgVHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwg
b2JqZWN0LCBtZXRob2RzKXtcblx0dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0
XHRwcm90b3R5cGUgPSBvYmplY3QucHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9
IG5ldyBUeXBlKG5hbWUsIG9iamVjdCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2Rz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRn
ZW5lcmljID0gb2JqZWN0W2tleV0sXG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5c
dFx0aWYgKGdlbmVyaWMpIGdlbmVyaWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJv
dG8pIG9iamVjdC5pbXBsZW1lbnQoa2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYg
KGlzVHlwZSl7XG5cdFx0dmFyIG1ldGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5
SXNFbnVtZXJhYmxlKG1ldGhvZHNbMF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVu
Y3Rpb24oZm4pe1xuXHRcdFx0aWYgKCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAs
IGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90
eXBlLCBwcm90b3R5cGVbbWV0aG9kc1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0
Zm9yICh2YXIga2V5IGluIHByb3RvdHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtr
ZXldLCBrZXkpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgn
U3RyaW5nJywgU3RyaW5nLCBbXG5cdCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAn
Y29udGFpbnMnLCAnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdy
ZXBsYWNlJywgJ3NlYXJjaCcsXG5cdCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3Ry
aW5nJywgJ3RyaW0nLCAndG9Mb3dlckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBB
cnJheSwgW1xuXHQncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3Nw
bGljZScsICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2Yn
LCAnbGFzdEluZGV4T2YnLCAnZmlsdGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3Nv
bWUnLCAncmVkdWNlJywgJ3JlZHVjZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51
bWJlciwgW1xuXHQndG9FeHBvbmVudGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywg
J3RvUHJlY2lzaW9uJ1xuXSkoJ0Z1bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2Nh
bGwnLCAnYmluZCdcbl0pKCdSZWdFeHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0p
KCdPYmplY3QnLCBPYmplY3QsIFtcblx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZp
bmVQcm9wZXJ0aWVzJywgJ2tleXMnLFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yJywgJ2dldE93blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lv
bnMnLCAnaXNFeHRlbnNpYmxlJywgJ3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJv
emVuJ1xuXSkoJ0RhdGUnLCBEYXRlLCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVu
ZC5vdmVybG9hZFNldHRlcigpO1xuXG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0
cmV0dXJuICsobmV3IERhdGUpO1xufSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7
XG5cbi8vIGZpeGVzIE5hTiByZXR1cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUu
JGZhbWlseSA9IGZ1bmN0aW9uKCl7XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXIn
IDogJ251bGwnO1xufS5oaWRlKCk7XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVu
ZCgncmFuZG9tJywgZnVuY3Rpb24obWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRo
LnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBl
YWNoLCBrZXlzXG5cbkFycmF5LmltcGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNo
OiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNb
aV0sIGksIHRoaXMpO1xuXHRcdH1cblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1
bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9i
amVjdCl7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1
c2goayk7XG5cdFx0fVxuXHRcdC8qPGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJh
YmxlS2V5KG9iamVjdCwgZnVuY3Rpb24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7
XG5cdFx0Lyo8L2x0SUU4PiovXG5cdFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDog
ZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JF
YWNoKGZ1bmN0aW9uKGtleSl7XG5cdFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXks
IG9iamVjdCk7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZv
ckVhY2g7XG5cblxuLy8gQXJyYXkgJiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5k
IGFwcGVuZGluZ1xuXG52YXIgY2xvbmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5
cGVPZihpdGVtKSl7XG5cdFx0Y2FzZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRc
dGNhc2UgJ29iamVjdCc6IHJldHVybiBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDog
cmV0dXJuIGl0ZW07XG5cdH1cbn07XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlv
bigpe1xuXHR2YXIgaSA9IHRoaXMubGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hp
bGUgKGktLSkgY2xvbmVbaV0gPSBjbG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59
KTtcblxudmFyIG1lcmdlT25lID0gZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRz
d2l0Y2ggKHR5cGVPZihjdXJyZW50KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0
eXBlT2Yoc291cmNlW2tleV0pID09ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0s
IGN1cnJlbnQpO1xuXHRcdFx0ZWxzZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50
KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50
LmNsb25lKCk7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0
fVxuXHRyZXR1cm4gc291cmNlO1xufTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1
bmN0aW9uKHNvdXJjZSwgaywgdil7XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0
dXJuIG1lcmdlT25lKHNvdXJjZSwgaywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1
bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNb
aV07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwg
b2JqZWN0W2tleV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25l
OiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtl
eSBpbiBvYmplY3QpIGNsb25lW2tleV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1
cm4gY2xvbmU7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9y
ICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZh
ciBleHRlbmRlZCA9IGFyZ3VtZW50c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBl
eHRlbmRlZCkgb3JpZ2luYWxba2V5XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVy
biBvcmlnaW5hbDtcblx0fVxuXG59KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmpl
Y3QnLCAnV2hpdGVTcGFjZScsICdUZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cydd
LmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1
ZSBJRFxuXG52YXIgVUlEID0gRGF0ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQn
LCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5z
IEFycmF5IFByb3RvdHlwZXMgbGlrZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNl
bnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczog
QXJyYXlcblxuLi4uXG4qL1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0
ZXZlcnk6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMu
bGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4u
Y2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2
YXIgcmVzdWx0cyA9IFtdO1xuXHRcdGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVu
Z3RoID4+PiAwOyBpIDwgbDsgaSsrKSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhp
c1tpXTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5w
dXNoKHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhP
ZjogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+
PiAwO1xuXHRcdGZvciAodmFyIGkgPSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsg
ZnJvbSkgOiBmcm9tIHx8IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9
PT0gaXRlbSkgcmV0dXJuIGk7XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6
IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAs
IHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwg
dGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5c
dHNvbWU6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMu
bGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5j
YWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0
dXJuIGZhbHNlO1xuXHR9LFxuXHQvKjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVt
ICE9IG51bGw7XG5cdFx0fSk7XG5cdH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1l
KXtcblx0XHR2YXIgYXJncyA9IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJu
IHRoaXMubWFwKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0u
YXBwbHkoaXRlbSwgYXJncyk7XG5cdFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlv
bihrZXlzKXtcblx0XHR2YXIgb2JqID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3Ro
LCBrZXlzLmxlbmd0aCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2Jq
W2tleXNbaV1dID0gdGhpc1tpXTtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1
bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAw
LCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9i
amVjdCl7XG5cdFx0XHRcdGlmIChvYmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVz
dWx0W2tleV0gPSB0aGlzW2ldO1xuXHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRc
dFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0
O1xuXHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4g
dGhpcy5pbmRleE9mKGl0ZW0sIGZyb20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rp
b24oYXJyYXkpe1xuXHRcdHRoaXMucHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMu
bGVuZ3RoKSA/IHRoaXNbdGhpcy5sZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFu
ZG9tOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIu
cmFuZG9tKDAsIHRoaXMubGVuZ3RoIC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBm
dW5jdGlvbihpdGVtKXtcblx0XHRpZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChp
dGVtKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJh
eSl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRo
aXMuaW5jbHVkZShhcnJheVtpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6
IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5c
dFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVu
Z3RoID0gMDtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigp
e1xuXHRcdHZhciBhcnJheSA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0
XHRpZiAodHlwZSA9PSAnbnVsbCcpIGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25j
YXQoKHR5cGUgPT0gJ2FycmF5JyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdh
cmd1bWVudHMnIHx8IGluc3RhbmNlT2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4o
dGhpc1tpXSkgOiB0aGlzW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5c
dHBpY2s6IGZ1bmN0aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsg
aSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtc
blx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFy
cmF5KXtcblx0XHRpZiAodGhpcy5sZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJn
YiA9IHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0g
MSkgdmFsdWUgKz0gdmFsdWU7XG5cdFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0
XHR9KTtcblx0XHRyZXR1cm4gKGFycmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0
fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8
IDMpIHJldHVybiBudWxsO1xuXHRcdGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0g
MCAmJiAhYXJyYXkpIHJldHVybiAndHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0
XHRmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0g
LSAwKS50b1N0cmluZygxNik7XG5cdFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcw
JyArIGJpdCA6IGJpdCk7XG5cdFx0fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsg
aGV4LmpvaW4oJycpO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlv
blxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0
ZSwgYmluZCwgcGFzcywgYW5kIGRlbGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVu
Y3Rpb24uZXh0ZW5kKHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkg
PSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRc
dFx0XHRyZXR1cm4gYXJndW1lbnRzW2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxu
XHRcdHJldHVybiBudWxsO1xuXHR9XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5c
dGF0dGVtcHQ6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4g
dGhpcy5hcHBseShiaW5kLCBBcnJheS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDog
ZnVuY3Rpb24odGhhdCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3Vt
ZW50cy5sZW5ndGggPiAxID8gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0
XHRGID0gZnVuY3Rpb24oKXt9O1xuXG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRc
dHZhciBjb250ZXh0ID0gdGhhdCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlm
ICh0aGlzIGluc3RhbmNlb2YgYm91bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJv
dG90eXBlO1xuXHRcdFx0XHRjb250ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVz
dWx0ID0gKCFhcmdzICYmICFsZW5ndGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5c
dFx0XHRcdDogc2VsZi5hcHBseShjb250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0
KEFycmF5LnNsaWNlKGFyZ3VtZW50cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0
dXJuIGNvbnRleHQgPT0gdGhhdCA/IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1
cm4gYm91bmQ7XG5cdH0sXG5cdC8qPC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihh
cmdzLCBiaW5kKXtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkg
YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0
XHRyZXR1cm4gc2VsZi5hcHBseShiaW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0
fSxcblxuXHRkZWxheTogZnVuY3Rpb24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBz
ZXRUaW1lb3V0KHRoaXMucGFzcygoYXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRl
bGF5KTtcblx0fSxcblxuXHRwZXJpb2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBh
cmdzKXtcblx0XHRyZXR1cm4gc2V0SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBb
XSA6IGFyZ3MpLCBiaW5kKSwgcGVyaW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0t
XG5cbm5hbWU6IE51bWJlclxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlw
ZXMgbGlrZSBsaW1pdCwgcm91bmQsIHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4u
XG4qL1xuXG5OdW1iZXIuaW1wbGVtZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgp
e1xuXHRcdHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxu
XG5cdHJvdW5kOiBmdW5jdGlvbihwcmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93
KDEwLCBwcmVjaXNpb24gfHwgMCkudG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6
IDApO1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9u
O1xuXHR9LFxuXG5cdHRpbWVzOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzOyBpKyspIGZuLmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9G
bG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxu
XHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2Ug
fHwgMTApO1xuXHR9XG5cbn0pO1xuXG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxu
KGZ1bmN0aW9uKG1hdGgpe1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rp
b24obmFtZSl7XG5cdGlmICghTnVtYmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gTWF0aFtuYW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5
LmNvbnZlcnQoYXJndW1lbnRzKSkpO1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0
aG9kcyk7XG5cbn0pKFsnYWJzJywgJ2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2Nl
aWwnLCAnY29zJywgJ2V4cCcsICdmbG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAn
c2luJywgJ3NxcnQnLCAndGFuJ10pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgU3RyaW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0
YWxpemUsIHRlc3QsIGFuZCB0b0ludC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5c
bnJlcXVpcmVzOiBbVHlwZSwgQXJyYXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xu
XG5TdHJpbmcuaW1wbGVtZW50KHtcblxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24o
c3RyaW5nLCBpbmRleCl7XG5cdFx0cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShp
bmRleCkgOiBTdHJpbmcodGhpcykpLmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwv
IUVTNj5cblxuXHR0ZXN0OiBmdW5jdGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0
eXBlT2YocmVnZXgpID09ICdyZWdleHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4
LCBwYXJhbXMpKS50ZXN0KHRoaXMpO1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5c
blx0Y2xlYW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9c
XHMrL2csICcgJykudHJpbSgpO1xuXHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xu
XHRcdFx0cmV0dXJuIG1hdGNoLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9
LFxuXG5cdGh5cGhlbmF0ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJl
cGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0
Y2guY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxp
emU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16
XS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtc
blx0XHR9KTtcblx0fSxcblxuXHRlc2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IFN0cmluZyh0aGlzKS5yZXBsYWNlKC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xc
XFwkMScpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFy
c2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rp
b24oYXJyYXkpe1xuXHRcdHZhciBoZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwy
fSkoXFx3ezEsMn0pKFxcd3sxLDJ9KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2Uo
MSkuaGV4VG9SZ2IoYXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24o
YXJyYXkpe1xuXHRcdHZhciByZ2IgPSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xu
XHRcdHJldHVybiAocmdiKSA/IHJnYi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5c
dHN1YnN0aXR1dGU6IGZ1bmN0aW9uKG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5n
KHRoaXMpLnJlcGxhY2UocmVnZXhwIHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rp
b24obWF0Y2gsIG5hbWUpe1xuXHRcdFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJl
dHVybiBtYXRjaC5zbGljZSgxKTtcblx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwp
ID8gb2JqZWN0W25hbWVdIDogJyc7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0t
XG5cbm5hbWU6IEJyb3dzZXJcblxuZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29u
dGFpbnMgQnJvd3NlciBpbml0aWFsaXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRo
ZSBCcm93c2VyIEhhc2guXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJl
czogW0FycmF5LCBGdW5jdGlvbiwgTnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3Nl
ciwgV2luZG93LCBEb2N1bWVudF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRv
Y3VtZW50ID0gdGhpcy5kb2N1bWVudDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0
aGlzO1xuXG52YXIgcGFyc2UgPSBmdW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRv
TG93ZXJDYXNlKCk7XG5cdHBsYXRmb3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNh
c2UoKSA6ICcnKTtcblxuXHQvLyBjaHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNv
IG5lZWQgdG8gY2hlY2sgZm9yIGVkZ2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBp
dCdzIGNocm9tZS5cblx0dmFyIFVBID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxk
XFwuXSspLyk7XG5cdGlmICghVUEpe1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJl
Zm94fGNocm9tZXx0cmlkZW50fGNyaW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/
Lio/KHNhZmFyaXwoPzpydltcXHNcXC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSsp
fCQpLykgfHwgW251bGwsICd1bmtub3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3Ry
aWRlbnQnKXtcblx0XHRVQVsxXSA9ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRd
O1xuXHR9IGVsc2UgaWYgKFVBWzFdID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7
XG5cdH1cblxuXHRwbGF0Zm9ybSA9IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9z
JyA6ICh1YS5tYXRjaCgvKD86d2Vib3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxs
aW51eC8pIHx8IFsnb3RoZXInXSlbMF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZv
cm0gPSAnd2luZG93cyc7XG5cblx0cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3Rv
dHlwZS5leHRlbmQsXG5cdFx0bmFtZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVB
WzFdLFxuXHRcdHZlcnNpb246IHBhcnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0p
ID8gVUFbNF0gOiBVQVsyXSksXG5cdFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52
YXIgQnJvd3NlciA9IHRoaXMuQnJvd3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5h
dmlnYXRvci5wbGF0Zm9ybSk7XG5cbmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVu
dC5kb2N1bWVudE1vZGUpe1xuXHRCcm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1v
ZGU7XG59XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEo
ZG9jdW1lbnQuZXZhbHVhdGUpLFxuXHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1
ZXJ5OiAhIShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNP
Tilcblx0fSxcblx0cGFyc2VVQTogcGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93
c2VyLlJlcXVlc3QgPSAoZnVuY3Rpb24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIg
PSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhU
VFAnKTtcblx0fTtcblxuXHR2YXIgTVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcg
QWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVu
Y3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1M
SFRUUDtcblx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwy
O1xuXHR9LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9
KTtcblxufSkoKTtcblxuQnJvd3Nlci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3Qp
O1xuXG5cblxuLy8gU3RyaW5nIHNjcmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4
dCl7XG5cdGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7
XG5cdFx0d2luZG93LmV4ZWNTY3JpcHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlw
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRy
aWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0
O1xuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5o
ZWFkLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJp
bmcuaW1wbGVtZW50KCdzdHJpcFNjcmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlw
dHMgPSAnJztcblx0dmFyIHRleHQgPSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xc
U10qPyk8XFwvc2NyaXB0Pi9naSwgZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9
IGNvZGUgKyAnXFxuJztcblx0XHRyZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1
ZSkgQnJvd3Nlci5leGVjKHNjcmlwdHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1
bmN0aW9uJykgZXhlYyhzY3JpcHRzLCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8g
V2luZG93LCBEb2N1bWVudFxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRv
Y3VtZW50LFxuXHRXaW5kb3c6IHRoaXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQs
XG5cdEV2ZW50OiB0aGlzLkV2ZW50XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1
Y3RvciA9IG5ldyBUeXBlKCdXaW5kb3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkg
PSBGdW5jdGlvbi5jb252ZXJ0KCd3aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVu
Y3Rpb24obmFtZSwgbWV0aG9kKXtcblx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRo
aXMuRG9jdW1lbnQgPSBkb2N1bWVudC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQn
LCBmdW5jdGlvbigpe30pO1xuXG5kb2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgn
ZG9jdW1lbnQnKS5oaWRlKCk7XG5cbkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRo
b2Qpe1xuXHRkb2N1bWVudFtuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0g
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5o
ZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRv
Y3VtZW50LmV4ZWNDb21tYW5kKSB0cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dy
b3VuZEltYWdlQ2FjaGUnLCBmYWxzZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5
PiovXG5pZiAodGhpcy5hdHRhY2hFdmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0
dmFyIHVubG9hZEV2ZW50ID0gZnVuY3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVu
bG9hZCcsIHVubG9hZEV2ZW50KTtcblx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9
IGRvY3VtZW50LndpbmRvdyA9IG51bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1
bWVudCA9IG51bGw7XG5cdH07XG5cdHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2Fk
RXZlbnQpO1xufVxuXG4vLyBJRSBmYWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0
aW9ucyAocmVmZXJzIHRvIDxzZWxlY3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7
XG50cnkge1xuXHRhcnJheUZyb20oZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2gg
KGUpe1xuXHRBcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBp
dGVtICE9ICdzdHJpbmcnICYmIFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVt
KSAhPSAnYXJyYXknKXtcblx0XHRcdHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFy
cmF5KGkpO1xuXHRcdFx0d2hpbGUgKGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0
dXJuIGFycmF5O1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5c
dHZhciBwcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUu
c2xpY2U7XG5cdFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3Nw
bGljZScsICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlv
bihuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25h
bWVdID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNv
bnZlcnQoaXRlbSksIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59
XG4vKjwvbHRJRTk+Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3Ncblxu
ZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0
aW5nLCBleHRlbmRpbmcsIGFuZCBpbXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVu
Y3Rpb24sIE51bWJlcl1cblxucHJvdmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9u
KCl7XG5cbnZhciBDbGFzcyA9IHRoaXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlv
bihwYXJhbXMpe1xuXHRpZiAoaW5zdGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0g
e2luaXRpYWxpemU6IHBhcmFtc307XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0
XHRyZXNldCh0aGlzKTtcblx0XHRpZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhp
cztcblx0XHR0aGlzLiRjYWxsZXIgPSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5c
dFx0dmFyIHZhbHVlID0gKHRoaXMuaW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHko
dGhpcywgYXJndW1lbnRzKSA6IHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIg
PSBudWxsO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBh
cmFtcyk7XG5cblx0bmV3Q2xhc3MuJGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnBy
b3RvdHlwZS4kY29uc3RydWN0b3IgPSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBh
cmVudCA9IHBhcmVudDtcblxuXHRyZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9
IGZ1bmN0aW9uKCl7XG5cdGlmICghdGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBt
ZXRob2QgXCJwYXJlbnRcIiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMu
JGNhbGxlci4kbmFtZSxcblx0XHRwYXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxc
blx0XHRwcmV2aW91cyA9IChwYXJlbnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7
XG5cdGlmICghcHJldmlvdXMpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1l
ICsgJ1wiIGhhcyBubyBwYXJlbnQuJyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBh
cmd1bWVudHMpO1xufTtcblxudmFyIHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2
YXIga2V5IGluIG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dp
dGNoICh0eXBlT2YodmFsdWUpKXtcblx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBG
ID0gZnVuY3Rpb24oKXt9O1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRv
YmplY3Rba2V5XSA9IHJlc2V0KG5ldyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdh
cnJheSc6IG9iamVjdFtrZXldID0gdmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5c
dHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0
aG9kKXtcblx0aWYgKG1ldGhvZC4kb3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0
dmFyIHdyYXBwZXIgPSBmdW5jdGlvbigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0
aGlzLiRjYWxsZXIgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtl
eSArICdcIiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxl
ciwgY3VycmVudCA9IHRoaXMuJGNhbGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRo
aXMuJGNhbGxlciA9IHdyYXBwZXI7XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlz
LCBhcmd1bWVudHMpO1xuXHRcdHRoaXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0g
Y2FsbGVyO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRv
cmlnaW46IG1ldGhvZCwgJG5hbWU6IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZh
ciBpbXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3Mu
TXV0YXRvcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9y
c1trZXldLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4g
dGhpcztcblx0fVxuXG5cdGlmICh0eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlm
ICh2YWx1ZS4kaGlkZGVuKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0g
KHJldGFpbikgPyB2YWx1ZSA6IHdyYXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5c
dFx0T2JqZWN0Lm1lcmdlKHRoaXMucHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJl
dHVybiB0aGlzO1xufTtcblxudmFyIGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRr
bGFzcy4kcHJvdG90eXBpbmcgPSB0cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRl
bGV0ZSBrbGFzcy4kcHJvdG90eXBpbmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmlt
cGxlbWVudCgnaW1wbGVtZW50JywgaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFz
cy5NdXRhdG9ycyA9IHtcblxuXHRFeHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMu
cGFyZW50ID0gcGFyZW50O1xuXHRcdHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50
KTtcblx0fSxcblxuXHRJbXBsZW1lbnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29u
dmVydChpdGVtcykuZWFjaChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5l
dyBpdGVtO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0
aGlzLCBrZXksIGluc3RhbmNlW2tleV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xu
XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjog
Q29udGFpbnMgVXRpbGl0eSBDbGFzc2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91
ciBvd24gQ2xhc3NlcyB0byBlYXNlIHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3Mu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJv
dmlkZXM6IFtDbGFzcy5FeHRyYXMsIENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9c
blxuKGZ1bmN0aW9uKCl7XG5cbnRoaXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjog
W10sXG5cblx0Y2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5
LmZsYXR0ZW4oYXJndW1lbnRzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENo
YWluOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMu
JGNoYWluLnNoaWZ0KCkuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5c
dGNsZWFyQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5n
KXtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwg
Zmlyc3Qpe1xuXHRcdHJldHVybiBmaXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRo
aXMuRXZlbnRzID0gbmV3IENsYXNzKHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDog
ZnVuY3Rpb24odHlwZSwgZm4sIGludGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7
XG5cblx0XHRcblxuXHRcdHRoaXMuJGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0g
fHwgW10pLmluY2x1ZGUoZm4pO1xuXHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVl
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRz
KXtcblx0XHRmb3IgKHZhciB0eXBlIGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVu
dHNbdHlwZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rp
b24odHlwZSwgYXJncywgZGVsYXkpe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2
YXIgZXZlbnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4g
dGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChm
dW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdz
KTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtc
blx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50
c1t0eXBlXTtcblx0XHRpZiAoZXZlbnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5k
ZXggPSBldmVudHMuaW5kZXhPZihmbik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBl
dmVudHNbaW5kZXhdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVF
dmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihl
dmVudHMpID09ICdvYmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVt
b3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1c
blx0XHRpZiAoZXZlbnRzKSBldmVudHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlw
ZSBpbiB0aGlzLiRldmVudHMpe1xuXHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkg
Y29udGludWU7XG5cdFx0XHR2YXIgZm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9y
ICh2YXIgaSA9IGZucy5sZW5ndGg7IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMu
cmVtb3ZlRXZlbnQodHlwZSwgZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbnRoaXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0
aW9uczogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVj
dC5tZXJnZS5hcHBseShudWxsLCBbe30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykp
O1xuXHRcdGlmICh0aGlzLmFkZEV2ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5c
dFx0XHRpZiAodHlwZU9mKG9wdGlvbnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25b
QS1aXS8pLnRlc3Qob3B0aW9uKSkgY29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlv
biwgb3B0aW9uc1tvcHRpb25dKTtcblx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5h
bWU6IENsYXNzLlRoZW5hYmxlXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xh
c3MgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2Ug
dGhlbSBcInRoZW5hYmxlXCIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1
aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4o
ZnVuY3Rpb24oKXtcblxudmFyIFNUQVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQg
PSAxLFxuXHRTVEFURV9SRUpFQ1RFRCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5h
YmxlID0gbmV3IENsYXNzKHtcblxuXHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0
JHRoZW5hYmxlUmVzdWx0OiBudWxsLFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJl
c29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVq
ZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFi
bGVTdGF0ZTogZnVuY3Rpb24oKXtcblx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xu
XHRcdFx0Y2FzZSBTVEFURV9QRU5ESU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5c
dFx0XHRjYXNlIFNUQVRFX0ZVTEZJTExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xu
XG5cdFx0XHRjYXNlIFNUQVRFX1JFSkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztc
blx0XHR9XG5cdH0sXG5cblx0cmVzZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRy
ZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHR0aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0
aWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRl
bnRpdHknO1xuXHRcdGlmICh0eXBlb2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWpl
Y3RlZCA9ICdUaHJvd2VyJztcblxuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xu
XG5cdFx0dGhpcy4kdGhlbmFibGVSZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhl
bmFibGUsXG5cdFx0XHRmdWxmaWxsSGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RI
YW5kbGVyOiBvblJlamVjdGVkXG5cdFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0
ZSAhPT0gU1RBVEVfUEVORElORyl7XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRy
ZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7
XG5cdFx0cmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxu
VGhlbmFibGUuZXh0ZW5kKHtcblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0
aGVuYWJsZTtcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVu
YWJsZSA9IHZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJs
ZSgpO1xuXHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4g
dGhlbmFibGU7XG5cdH0sXG5cdHJlamVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhl
bmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5c
dFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxu
ZnVuY3Rpb24gcmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5h
YmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUp
e1xuXHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZl
IGEgdGhlbmFibGUgd2l0aCBpdHNlbGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5
cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7
XG5cdFx0XHR2YXIgdGhlbjtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVu
O1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBl
eGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24n
KXtcblx0XHRcdFx0dmFyIHJlc29sdmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9u
KCl7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRc
dFx0dmFsdWUsXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0
XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7
XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0
XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVh
c29uKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRc
dHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVh
c29uKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7
XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2
ZWQpe1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVj
dCh0aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0
XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUp
O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7
XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0
aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVu
YWJsZS4kdGhlbmFibGVSZXN1bHQgPSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0
ZSA9IFNUQVRFX0ZVTEZJTExFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5m
dW5jdGlvbiByZWplY3QodGhlbmFibGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFi
bGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0
ID0gcmVhc29uO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7
XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFi
bGUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xu
XHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlU3RhdGUgPSBTVEFURV9QRU5ESU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5h
YmxlKXtcblx0dmFyIHN0YXRlID0gdGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0
ID0gdGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0
aGVuYWJsZVJlYWN0aW9ucyxcblx0XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVM
RklMTEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBl
ID0gJ2Z1bGZpbGxIYW5kbGVyJztcblx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RF
RCl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdy
ZWplY3RIYW5kbGVyJztcblx0fVxuXG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFz
cyhbcmVzdWx0LCByZWFjdGlvbnMsIHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxl
KHJlc3VsdCwgcmVhY3Rpb25zLCB0eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlv
bnMubGVuZ3RoOyBpIDwgbDsgKytpKXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0s
XG5cdFx0XHRoYW5kbGVyID0gcmVhY3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0g
J0lkZW50aXR5Jyl7XG5cdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xu
XHRcdH0gZWxzZSBpZiAoaGFuZGxlciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFj
dGlvbi50aGVuYWJsZSwgcmVzdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRc
dFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0g
Y2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhj
ZXB0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVv
ZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0g
J2Z1bmN0aW9uJyl7XG5cdGRlZmVyID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlw
ZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0
ZTtcbn0gZWxzZSB7XG5cdGRlZmVyID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4s
IDApO1xuXHR9O1xufVxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNj
cmlwdGlvbjogT2JqZWN0IGdlbmVyaWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4u
LlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVu
Y3Rpb24ob2JqZWN0LCBrZXlzKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlz
W2ldO1xuXHRcdFx0aWYgKGsgaW4gb2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRc
dH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwg
Zm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qu
a2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7
XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwo
YmluZCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3Vs
dHM7XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2
YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0
XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9
IGtleXNbaV0sIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2
YWx1ZSwga2V5LCBvYmplY3QpKSByZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0
dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQp
e1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0g
MDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0
XHRpZiAoIWZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBm
biwgYmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tp
XTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1
ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24o
b2JqZWN0KXtcblx0XHR2YXIgdmFsdWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5
cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5c
dFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRc
dH1cblx0XHRyZXR1cm4gdmFsdWVzO1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2Jq
ZWN0KXtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0
a2V5T2Y6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0Lmtl
eXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xu
XHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVl
KSByZXR1cm4ga2V5O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWlu
czogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmpl
Y3QsIHZhbHVlKSAhPSBudWxsO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9i
amVjdCwgYmFzZSl7XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFj
aChvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJh
c2UgKyAnWycgKyBrZXkgKyAnXSc7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0
eXBlT2YodmFsdWUpKXtcblx0XHRcdFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRv
UXVlcnlTdHJpbmcodmFsdWUsIGtleSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5c
dFx0XHRcdFx0dmFyIHFzID0ge307XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWws
IGkpe1xuXHRcdFx0XHRcdFx0cXNbaV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0
cmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7
XG5cdFx0XHRcdGRlZmF1bHQ6IHJlc3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVu
dCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcu
cHVzaChyZXN1bHQpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYn
KTtcblx0fVxuXG59KTtcblxufSkoKTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNl
clxuZGVzY3JpcHRpb246IFN0YW5kYWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVz
OiBTbGljay5QYXJzZXJcbi4uLlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxu
XHRzZXBhcmF0b3JJbmRleCxcblx0Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2Fj
aGUgPSB7fSxcblx0cmV2ZXJzZUNhY2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xu
XG52YXIgcGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4
cHJlc3Npb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09
PSB0cnVlKSByZXR1cm4gZXhwcmVzc2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Np
b24pLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJz
ZWQ7XG5cdHZhciBjdXJyZW50Q2FjaGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2Fj
aGU7XG5cdGlmIChjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVb
ZXhwcmVzc2lvbl07XG5cdHBhcnNlZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNz
aW9uczogW10sXG5cdFx0cmF3OiBleHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7
XG5cdFx0XHRyZXR1cm4gcGFyc2UodGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2Vw
YXJhdG9ySW5kZXggPSAtMTtcblx0d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBl
eHByZXNzaW9uLnJlcGxhY2UocmVnZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBw
YXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5y
YXddID0gKHJldmVyc2VkKSA/IHJldmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciBy
ZXZlcnNlQ29tYmluYXRvciA9IGZ1bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRv
ciA9PT0gJyEnKSByZXR1cm4gJyAnO1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJl
dHVybiAnISc7XG5cdGVsc2UgaWYgKCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29t
YmluYXRvci5yZXBsYWNlKC9eIS8sICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRv
cjtcbn07XG5cbnZhciByZXZlcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHBy
ZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwg
ZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtc
blx0XHR2YXIgbGFzdCA9IHtwYXJ0czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNl
Q29tYmluYXRvcihleHBbMF0uY29tYmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGog
PCBleHAubGVuZ3RoOyBqKyspe1xuXHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAo
IWNleHAucmV2ZXJzZUNvbWJpbmF0b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5c
dFx0XHRjZXhwLmNvbWJpbmF0b3IgPSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVs
ZXRlIGNleHAucmV2ZXJzZUNvbWJpbmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5w
dXNoKGxhc3QpO1xuXHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJl
Z0V4cCA9IGZ1bmN0aW9uKHN0cmluZyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3
LTIwMDggU3RldmVuIExldml0aGFuIDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hy
ZWdleHAvPiBNSVQgTGljZW5zZVxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkq
Kz8uXFxcXF4kfCwjXFxzXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyAr
IG1hdGNoO1xuXHR9KTtcbn07XG5cbnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vz
ci9iaW4vZW52IHJ1YnlcbnB1dHMgXCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94
XFwpfFxccysjLiokfFxccyt8XFxcXCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86
XFxcblx0ICBcXFxccyogKCAsICkgXFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAg
ICAgICAgXFxuXFxcblx0fCBcXFxccyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21i
aW5hdG9yICAgICAgICAgXFxuXFxcblx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAg
ICMgQ29tYmluYXRvckNoaWxkcmVuIFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxc
KiApICAgICAjIFRhZyAgICAgICAgICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2Rl
PisgICAgICAgKSAgICAgIyBJRCAgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8
dW5pY29kZT4rICAgICAgICkgICAgICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0
XFxcXFsgIFxcXG5cdFx0XFxcXHMqICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxz
KiAoWypeJCF+fF0/PSkgICg/OiAgXFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0
KFtcXFwiJ10/KSguKj8pXFxcXDkgXFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/
ICBcXFxccyogIFxcXG5cdFxcXFxdKD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2Rl
PisgKSg/OlxcXG5cdFxcXFwoICg/OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxc
XDEyKXwoKD86XFxcXChbXildK1xcXFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xc
XG5cdClcIlxuKi9cblx0XCJeKD86XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4r
KVxcXFxzKnwoXFxcXHMrKXwoPHVuaWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxc
XC4oPHVuaWNvZGU+Kyl8XFxcXFtcXFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxd
Pz0pKD86XFxcXHMqKD86KFtcXFwiJ10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxc
XSl8KDorKSg8dW5pY29kZT4rKSg/OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxc
XDEzKXwoKD86XFxcXChbXildK1xcXFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNl
KC88Y29tYmluYXRvcj4vLCAnWycgKyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwv
JykgKyAnXScpXG5cdC5yZXBsYWNlKC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1c
XFxcdUZGRkYtXXxcXFxcXFxcXFteXFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29k
ZTE+L2csICcoPzpbOlxcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAt
OWEtZl0pJylcbik7XG5cbmZ1bmN0aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJh
dG9yLFxuXHRjb21iaW5hdG9yLFxuXHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxc
blx0aWQsXG5cdGNsYXNzTmFtZSxcblxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJh
dG9yLFxuXHRhdHRyaWJ1dGVRdW90ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFy
a2VyLFxuXHRwc2V1ZG9DbGFzcyxcblx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVk
VmFsdWUsXG5cdHBzZXVkb0NsYXNzVmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJh
dG9ySW5kZXggPT09IC0xKXtcblx0XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRl
eF0gPSBbXTtcblx0XHRjb21iaW5hdG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSBy
ZXR1cm4gJyc7XG5cdH1cblxuXHRpZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4g
fHwgY29tYmluYXRvckluZGV4ID09PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3Ig
fHwgJyAnO1xuXHRcdHZhciBjdXJyZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3Nl
cGFyYXRvckluZGV4XTtcblx0XHRpZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21i
aW5hdG9ySW5kZXhdKVxuXHRcdFx0Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJl
dmVyc2VDb21iaW5hdG9yID0gcmV2ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3Vy
cmVudFNlcGFyYXRvclsrK2NvbWJpbmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRv
ciwgdGFnOiAnKid9O1xuXHR9XG5cblx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVz
c2lvbnNbc2VwYXJhdG9ySW5kZXhdW2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUp
e1xuXHRcdGN1cnJlbnRQYXJzZWQudGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcn
KTtcblxuXHR9IGVsc2UgaWYgKGlkKXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFj
ZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNz
TmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3Vy
cmVudFBhcnNlZC5jbGFzc0xpc3QpIGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0
aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xu
XHRcdGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50
UGFyc2VkLmNsYXNzZXMucHVzaCh7XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVn
ZXhwOiBuZXcgUmVnRXhwKCcoXnxcXFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAn
KFxcXFxzfCQpJylcblx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRw
c2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZh
bHVlO1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xh
c3NWYWx1ZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJl
bnRQYXJzZWQucHNldWRvcykgY3VycmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVu
dFBhcnNlZC5wc2V1ZG9zLnB1c2goe1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJl
VW5lc2NhcGUsICcnKSxcblx0XHRcdHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlw
ZTogcHNldWRvTWFya2VyLmxlbmd0aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0p
O1xuXG5cdH0gZWxzZSBpZiAoYXR0cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRy
aWJ1dGVLZXkucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAo
YXR0cmlidXRlVmFsdWUgfHwgJycpLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFy
IHRlc3QsIHJlZ2V4cDtcblxuXHRcdHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0
Y2FzZSAnXj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAo
YXR0cmlidXRlVmFsdWUpICAgICAgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiBy
ZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1
ZSkgKyckJyAgICAgICApOyBicmVhaztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBS
ZWdFeHAoICcoXnxcXFxccyknKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxz
fCQpJyApOyBicmVhaztcblx0XHRcdGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAg
ICAgICdeJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFr
O1xuXHRcdFx0Y2FzZSAgJz0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0
dXJuIGF0dHJpYnV0ZVZhbHVlID09IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNl
ICcqPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYg
dmFsdWUuaW5kZXhPZihhdHRyaWJ1dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnIT0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0
dHJpYnV0ZVZhbHVlICE9IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAg
OiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRc
dH07XG5cdFx0fVxuXG5cdFx0aWYgKGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQv
KS50ZXN0KGF0dHJpYnV0ZU9wZXJhdG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1
cm4gZmFsc2U7XG5cdFx0fTtcblxuXHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVl
KXtcblx0XHRcdHJldHVybiB2YWx1ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxu
XHRcdGlmICghY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0
ZXMgPSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6
IGF0dHJpYnV0ZUtleSxcblx0XHRcdG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRc
dHZhbHVlOiBhdHRyaWJ1dGVWYWx1ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9
XG5cblx0cmV0dXJuICcnO1xufTtcblxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMu
U2xpY2sgfHwge30pO1xuXG5TbGljay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRy
ZXR1cm4gcGFyc2UoZXhwcmVzc2lvbik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2Nh
cGVSZWdFeHA7XG5cbmlmICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5h
cHBseSgvKjxDb21tb25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBv
cnRzIDogLyo8L0NvbW1vbkpTPiovdGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRl
clxuZGVzY3JpcHRpb246IFRoZSBuZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxu
cHJvdmlkZXM6IFNsaWNrLkZpbmRlclxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xu
XG47KGZ1bmN0aW9uKCl7XG5cbnZhciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30s
XG5cdHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAv
IEJ1ZyBkZXRlY3Rpb25cblxubG9jYWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRy
ZXR1cm4gKC9cXHtcXHMqXFxbbmF0aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtc
bn07XG5cbmxvY2FsLmlzWE1MID0gZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9j
dW1lbnQueG1sVmVyc2lvbikgfHwgKCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChk
b2N1bWVudCkgPT0gJ1tvYmplY3QgWE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVU
eXBlID09IDkgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7
XG59O1xuXG5sb2NhbC5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBj
b252ZXJ0IGVsZW1lbnRzIC8gd2luZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1l
bnQgY2Fubm90IGJlIGV4dHJhcG9sYXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBu
b2RlVHlwZSA9IGRvY3VtZW50Lm5vZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRv
Y3VtZW50XG5cdGVsc2UgaWYgKG5vZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9j
dW1lbnQ7IC8vIG5vZGVcblx0ZWxzZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9
IGRvY3VtZW50LmRvY3VtZW50OyAvLyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hl
Y2sgaWYgaXQncyB0aGUgb2xkIGRvY3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRv
Y3VtZW50KSByZXR1cm47XG5cdHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVj
ayBpZiB3ZSBoYXZlIGRvbmUgZmVhdHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZv
cmVcblxuXHR2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlk
ID0gdGhpcy5nZXRVSURYTUwocm9vdCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jv
b3RVaWRdLFxuXHRcdGZlYXR1cmU7XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1
cmUgaW4gZmVhdHVyZXMpe1xuXHRcdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVd
O1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVb
cm9vdFVpZF0gPSB7fTtcblxuXHRmZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNY
TUxEb2N1bWVudCA9IHRoaXMuaXNYTUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0
YXJHRUJUTlxuXHQ9IGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMu
aWRHZXRzTmFtZVxuXHQ9IGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVz
LmJyb2tlbkdFQkNOXG5cdD0gZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVz
LmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0
PSBmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3Rh
clNlbGVjdHNDbG9zZWQsIHN0YXJTZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xh
c3NOYW1lR0VCQ04sIGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9y
bUF0dHJpYnV0ZUdldHRlcjtcblxuXHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlk
Jztcblx0dmFyIHRlc3ROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0
dmFyIHRlc3RSb290ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnYm9keScpWzBdIHx8IHJvb3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2Rl
KTtcblxuXHQvLyBvbiBub24tSFRNTCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50
c0J5SWQgZG9lc250IHdvcmsgcHJvcGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhU
TUwgPSAnPGEgaWQ9XCInK2lkKydcIj48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVu
dCA9ICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0
aWYgKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3Bs
YXkgPSAnbm9uZSc7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVs
ZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29t
bWVudHMgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtc
blxuXHRcdC8vIElFIHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRc
dFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRl
c3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3Nl
ZCA9IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFt
ZS5jaGFyQXQoMCkgPT0gJy8nKTtcblx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMu
YnJva2VuU3RhckdFQlROID0gc3RhclNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3Nl
ZDtcblxuXHRcdC8vIElFIHJldHVybnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9m
IGp1c3QgaWQgZm9yIGdldEVsZW1lbnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkg
e1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48
YiBpZD1cIicrIGlkICsnXCI+PC9iPic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0g
Y2F0Y2ggKGUpe31cblxuXHRcdGlmICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtc
blxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1
bHRzXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9
XCJmXCI+PC9hPjxhIGNsYXNzPVwiYlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxk
LmNsYXNzTmFtZSA9ICdiJztcblx0XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRc
dFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFz
c05hbWUgZG9lc250IGRldGVjdHMgdGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxu
XHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwi
PjwvYT48YSBjbGFzcz1cImYgYiBhXCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNz
TmFtZUdFQkNOID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGgg
IT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNO
ID0gY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVH
RUJDTjtcblx0XHR9XG5cblx0XHRpZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0
XHQvLyBJRSA4IHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlT
ZWxlY3RvckFsbCgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVz
dE5vZGUucXVlcnlTZWxlY3RvckFsbCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0
c0Nsb3NlZFFTQSA9IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFsw
XS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRc
dFx0Ly8gU2FmYXJpIDMuMiBxdWVyeVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRj
YXNlIG9uIHF1aXJrc21vZGVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRN
TCA9ICc8YSBjbGFzcz1cIk1pWFwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhl
ZENhc2VRU0EgPSAhdGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0
XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVy
biBzZWxlY3RlZCBvcHRpb25zIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0
XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxl
Y3RlZFwiPmE8L29wdGlvbj48L3NlbGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVj
a2VkUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09
IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJl
Y3QgcmVzdWx0cyBmb3IgYXR0clsqXiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JB
bGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1c
IlwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0
ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xu
XHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBo
YXMgYW4gaW5wdXQgb2YgaWQgeCwgZm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVy
ZW5jZSB0byB0aGUgaW5wdXRcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0g
Jzxmb3JtIGFjdGlvbj1cInNcIj48aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0
XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0
cmlidXRlKCdhY3Rpb24nKSAhPSAncycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5h
dGl2ZSBtYXRjaGVzU2VsZWN0b3IgZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNo
ZXNTZWxlY3RvciA9IHJvb3QubWF0Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwq
LyByb290Lm1vek1hdGNoZXNTZWxlY3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtc
blx0XHRpZiAoZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8g
aWYgbWF0Y2hlc1NlbGVjdG9yIHRyb3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2Ug
Y2FuIHVzZSBpdFxuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9v
dCwgJzpzbGljaycpO1xuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVs
bDtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19l
eHBhbmRvID0gMTtcblx0XHRkZWxldGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVz
LmdldFVJRCA9IHRoaXMuZ2V0VUlESFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMu
Z2V0VUlEID0gdGhpcy5nZXRVSURYTUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0
ZXN0Tm9kZSk7XG5cdHRlc3ROb2RlID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0
Ly8gZ2V0QXR0cmlidXRlXG5cblx0ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlz
SFRNTERvY3VtZW50ICYmIGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9k
ZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtc
blx0XHRpZiAobWV0aG9kKSByZXR1cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJp
YnV0ZU5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRy
aWJ1dGVOb2RlKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0
aW9uKG5vZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNb
bmFtZV07XG5cdFx0cmV0dXJuIChtZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdl
dEF0dHJpYnV0ZShuYW1lKTtcblx0fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJl
cy5oYXNBdHRyaWJ1dGUgPSAocm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJp
YnV0ZSkpID8gZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNB
dHRyaWJ1dGUoYXR0cmlidXRlKTtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5c
dFx0bm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAh
IShub2RlICYmIChub2RlLnNwZWNpZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5c
dC8vIGNvbnRhaW5zXG5cdC8vIEZJWE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3Vs
ZCBiZSBkaWZmZXJlbnQgZm9yIHhtbCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVS
b290Q29udGFpbnMgPSByb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxu
XHRcdG5hdGl2ZURvY3VtZW50Q29udGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29k
ZShkb2N1bWVudC5jb250YWlucyk7XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9v
dENvbnRhaW5zICYmIG5hdGl2ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwg
bm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZl
Um9vdENvbnRhaW5zICYmICFuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRl
eHQsIG5vZGUpe1xuXHRcdC8vIElFOCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVu
dC5cblx0XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50
KSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xu
XHR9IDogKHJvb3QgJiYgcm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihj
b250ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29u
dGV4dCwgbm9kZSl7XG5cdFx0aWYgKG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250
ZXh0KSByZXR1cm4gdHJ1ZTtcblx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkp
O1xuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5n
XG5cdC8vIGNyZWRpdHMgdG8gU2l6emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0
dXJlcy5kb2N1bWVudFNvcnRlciA9IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1
bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24oYikgJiA0ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3Nv
dXJjZUluZGV4JyBpbiByb290KSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJ
bmRleCB8fCAhYi5zb3VyY2VJbmRleCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5k
ZXggLSBiLnNvdXJjZUluZGV4O1xuXHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0
aW9uKGEsIGIpe1xuXHRcdGlmICghYS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQp
IHJldHVybiAwO1xuXHRcdHZhciBhUmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KSwgYlJhbmdlID0gYi5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNl
dFN0YXJ0KGEsIDApO1xuXHRcdGFSYW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0
YXJ0KGIsIDApO1xuXHRcdGJSYW5nZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDog
bnVsbDtcblxuXHRyb290ID0gbnVsbDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xu
XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFp
biBNZXRob2RcblxudmFyIHJlU2ltcGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xc
XCopKSQvLFxuXHRyZUVtcHR5QXR0cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxd
Lyxcblx0cXNhRmFpbEV4cENhY2hlID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNv
bnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMu
Zm91bmQgPSAoZmlyc3QpID8gbnVsbCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4
dCkgcmV0dXJuIGZvdW5kO1xuXHRlbHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9
IGNvbnRleHQuZG9jdW1lbnQ7IC8vIENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBh
IGRvY3VtZW50XG5cdGVsc2UgaWYgKCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5c
blx0Ly8gc2V0dXBcblxuXHR2YXIgcGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVz
ID0gdGhpcy51bmlxdWVzID0ge30sXG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVu
ZC5sZW5ndGgpLFxuXHRcdGNvbnRleHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0g
OSk7XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRl
eHQgOiBjb250ZXh0Lm93bmVyRG9jdW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xu
XG5cdC8vIGF2b2lkIGR1cGxpY2F0aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJh
eVxuXHRpZiAoaGFzT3RoZXJzKSBmb3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNb
dGhpcy5nZXRVSUQoZm91bmRbaV0pXSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3Nc
blxuXHRpZiAodHlwZW9mIGV4cHJlc3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlz
IGEgc3RyaW5nXG5cblx0XHQvKjxzaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFy
IHNpbXBsZVNlbGVjdG9yID0gZXhwcmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0
XHRzaW1wbGVTZWxlY3RvcnM6IGlmIChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1i
b2wgPSBzaW1wbGVTZWxlY3RvclsxXSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJd
O1xuXG5cdFx0XHRpZiAoIXN5bWJvbCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRo
aXMuYnJva2VuU3RhckdFQlROKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVz
ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0
KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5v
ZGVzW2krK107KXtcblx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdl
dFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxz
ZSBpZiAoc3ltYm9sID09ICcjJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50
IHx8ICFjb250ZXh0SXNEb2N1bWVudCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRu
b2RlID0gY29udGV4dC5nZXRFbGVtZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSBy
ZXR1cm4gZm91bmQ7XG5cdFx0XHRcdGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRy
aWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7
XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRo
aXMuaXNIVE1MRG9jdW1lbnQgfHwgKCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8
IHRoaXMuYnJva2VuR0VCQ04pICYmIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNp
bXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUobmFtZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9k
ZXNbMF0gfHwgbnVsbDtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTsp
e1xuXHRcdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5c
dFx0XHRcdFx0dmFyIG1hdGNoQ2xhc3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5l
c2NhcGVSZWdFeHAobmFtZSkgKycoXFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRl
eHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2Rl
ID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7
XG5cdFx0XHRcdFx0XHRpZiAoIShjbGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFt
ZSkpKSBjb250aW51ZTtcblx0XHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0
XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBm
b3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0
XHRcdGlmIChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0
KSA/IG51bGwgOiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVy
cmlkZT4qL1xuXG5cdFx0Lyo8cXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNl
bGVjdG9yOiBpZiAoY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlz
LmlzSFRNTERvY3VtZW50XG5cdFx0XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxu
XHRcdFx0XHQvL1RPRE86IG9ubHkgc2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4
ZWQgY2FzZVxuXHRcdFx0XHR8fCB0aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAo
dGhpcy5icm9rZW5DaGVja2VkUVNBICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+
IC0xKVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5
QXR0cmlidXRlLnRlc3QoZXhwcmVzc2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1l
bnQgLy9BYm9ydCB3aGVuICFjb250ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAg
dGhlcmUgYXJlIG11bHRpcGxlIGV4cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRc
dC8vICBzaW5jZSB3ZSBjdXJyZW50bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0Eg
Zm9yIHNpbmdsZSBleHByZXNzaW9uIHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24u
aW5kZXhPZignLCcpID4gLTFcblx0XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNB
XG5cdFx0XHQpIGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9
IGV4cHJlc3Npb24sIF9jb250ZXh0ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFj
b250ZXh0SXNEb2N1bWVudCl7XG5cdFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5c
dFx0XHRcdC8vIGNyZWRpdHMgdG8gQW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBf
Y29udGV4dC5nZXRBdHRyaWJ1dGUoJ2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRc
dFx0X2NvbnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVz
c2lvbiA9ICcjJyArIHNsaWNraWQgKyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4
dCA9IF9jb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRc
dGlmIChmaXJzdCkgcmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwg
bnVsbDtcblx0XHRcdFx0ZWxzZSBub2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhw
cmVzc2lvbik7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4
cHJlc3Npb25dID0gMTtcblx0XHRcdFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmlu
YWxseSB7XG5cdFx0XHRcdGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChj
dXJyZW50SWQpIF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0
XHRcdGVsc2UgX2NvbnRleHQucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRl
eHQgPSBfY29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFy
U2VsZWN0c0Nsb3NlZFFTQSkgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRc
dFx0aWYgKG5vZGUubm9kZU5hbWUgPiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlz
LmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9
IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlx
dWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0
XHRcdGlmIChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7
XG5cblx0XHR9XG5cdFx0Lyo8L3F1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJz
ZWQgPSB0aGlzLlNsaWNrLnBhcnNlKGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0
aCkgcmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRo
ZXJlIGlzIG5vIGV4cHJlc3Npb25cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhw
cmVzc2lvbi5TbGljayl7IC8vIGV4cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5c
dFx0cGFyc2VkID0gZXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRl
eHQuZG9jdW1lbnRFbGVtZW50IHx8IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lv
biBpcyBhIG5vZGVcblx0XHQoZm91bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5k
ID0gZXhwcmVzc2lvbjtcblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1
bmtcblx0XHRyZXR1cm4gZm91bmQ7XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8
bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50
aCBzZWxlY3RvcnNcblxuXHR0aGlzLnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7
fTtcblx0dGhpcy5wb3NOVEhUeXBlID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtc
blxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5cdC8vIGlmIGFwcGVuZCBpcyBudWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVj
dG9yIHdpdGggb25lIGV4cHJlc3Npb24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxu
XHR0aGlzLnB1c2ggPSAoIWhhc090aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0g
MSAmJiBwYXJzZWQuZXhwcmVzc2lvbnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJh
eSA6IHRoaXMucHVzaFVJRDtcblxuXHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxu
XHQvLyBkZWZhdWx0IGVuZ2luZVxuXG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwg
dGFnLCBpZCwgY2xhc3NMaXN0LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIg
Y3VycmVudEl0ZW1zLCBjdXJyZW50RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhw
cmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAo
Y3VycmVudEV4cHJlc3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1
cnJlbnRCaXQgPSBjdXJyZW50RXhwcmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9y
ID0gJ2NvbWJpbmF0b3I6JyArIGN1cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNb
Y29tYmluYXRvcl0pIGNvbnRpbnVlIHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5p
c1hNTERvY3VtZW50KSA/IGN1cnJlbnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNh
c2UoKTtcblx0XHRpZCAgICAgICAgID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0g
Y3VycmVudEJpdC5jbGFzc0xpc3Q7XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nl
cztcblx0XHRhdHRyaWJ1dGVzID0gY3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3Mg
ICAgPSBjdXJyZW50Qml0LnBzZXVkb3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVu
dEV4cHJlc3Npb24ubGVuZ3RoIC0gMSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5c
blx0XHRpZiAobGFzdEJpdCl7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0
dGhpcy5mb3VuZCA9IGZvdW5kO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7
fTtcblx0XHRcdHRoaXMuZm91bmQgPSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5c
dFx0XHR0aGlzW2NvbWJpbmF0b3JdKGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBm
b3VuZC5sZW5ndGgpIGJyZWFrIHNlYXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0
ICYmIGxhc3RCaXQpIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsg
bSsrKXtcblx0XHRcdFx0dGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChm
b3VuZC5sZW5ndGgpIGJyZWFrIHNlYXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0g
Y3VycmVudEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50
SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlz
dCk7XG5cdFx0fVxuXG5cdFx0Y3VycmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8v
IHNob3VsZCBzb3J0IGlmIHRoZXJlIGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNz
IG11bHRpcGxlIGV4cHJlc3Npb25zLlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVz
c2lvbnMubGVuZ3RoID4gMSkpIHRoaXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkg
PyAoZm91bmRbMF0gfHwgbnVsbCkgOiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVp
ZHggPSAxO1xubG9jYWwudWlkayA9ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhN
TCA9IGZ1bmN0aW9uKG5vZGUpe1xuXHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51
aWRrKTtcblx0aWYgKCF1aWQpe1xuXHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0
QXR0cmlidXRlKHRoaXMudWlkaywgdWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9j
YWwuZ2V0VUlESFRNTCA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1i
ZXIgfHwgKG5vZGUudW5pcXVlTnVtYmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBi
YXNlZCBvbiB0aGUgc2V0RG9jdW1lbnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5z
b3J0ID0gZnVuY3Rpb24ocmVzdWx0cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0
dXJuIHJlc3VsdHM7XG5cdHJlc3VsdHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0
dXJuIHJlc3VsdHM7XG59O1xuXG4vKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1z
ZWxlY3RvcnM+Ki9cblxubG9jYWwuY2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAv
XihbKy1dP1xcZCopPyhbYS16XSspPyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJn
dW1lbnQgPSBmdW5jdGlvbihhcmd1bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRj
aCh0aGlzLm1hdGNoTlRIKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNw
ZWNpYWwgPSBwYXJzZWRbMl0gfHwgZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5c
dGlmIChhID09ICctJykgYSA9IC0xO1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFy
c2VkID1cblx0XHQoc3BlY2lhbCA9PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNp
YWwgPT0gJ29kZCcpXHQ/IHthOiAyLCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0
PyB7YTogMiwgYjogMH0gOiB7YTogMCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRI
W2FyZ3VtZW50XSA9IHBhcnNlZCk7XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5j
dGlvbihjaGlsZCwgc2libGluZywgcG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rp
b24obm9kZSwgYXJndW1lbnQpe1xuXHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0
XHRpZiAoIXRoaXNbcG9zaXRpb25zXVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBh
cmVudE5vZGU7XG5cdFx0XHRpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVs
ID0gcGFyZW50W2NoaWxkXSwgY291bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRc
dHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRp
ZiAoZWwubm9kZU5hbWUgIT0gbm9kZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9z
aXRpb25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVs
ID0gZWxbc2libGluZ10pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0
XHRpZiAoZWwubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlv
bnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBl
bFtzaWJsaW5nXSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8
ICduJztcblx0XHR2YXIgcGFyc2VkID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5w
YXJzZU5USEFyZ3VtZW50KGFyZ3VtZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNl
O1xuXHRcdHZhciBhID0gcGFyc2VkLmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlv
bnNdW3VpZF07XG5cdFx0aWYgKGEgPT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4g
MCl7XG5cdFx0XHRpZiAocG9zIDwgYikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHRpZiAoYiA8IHBvcykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBi
KSAlIGEpID09IDA7XG5cdH07XG59O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwv
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hT
ZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhp
cy5mb3VuZC5wdXNoKG5vZGUpO1xufTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhp
cy5nZXRVSUQobm9kZSk7XG5cdGlmICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNl
bGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0
XHR0aGlzLnVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xu
XHR9XG59O1xuXG5sb2NhbC5tYXRjaE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5c
dGlmICh0aGlzLmlzSFRNTERvY3VtZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtc
blx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwo
bm9kZSwgc2VsZWN0b3IucmVwbGFjZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypc
XF0vZywgJ1skMT1cIiQyXCJdJykpO1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxu
XG5cdHZhciBwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJz
ZWQpIHJldHVybiB0cnVlO1xuXG5cdC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFy
IGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwg
aSwgY3VycmVudEV4cHJlc3Npb247XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9
IGV4cHJlc3Npb25zW2ldKTsgaSsrKXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3Ro
ID09IDEpe1xuXHRcdFx0dmFyIGV4cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYg
KHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcg
OiBleHAudGFnLnRvVXBwZXJDYXNlKCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1
dGVzLCBleHAucHNldWRvcykpIHJldHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisr
O1xuXHRcdH1cblx0fVxuXG5cdGlmIChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgp
IHJldHVybiBmYWxzZTtcblxuXHR2YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50
LCBwYXJzZWQpLCBpdGVtO1xuXHRmb3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRc
dGlmIChpdGVtID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59
O1xuXG5sb2NhbC5tYXRjaFBzZXVkbyA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtc
blx0dmFyIHBzZXVkb05hbWUgPSAncHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9O
YW1lXSkgcmV0dXJuIHRoaXNbcHNldWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0
cmlidXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1l
bnQpID8gYXJndW1lbnQgPT0gYXR0cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5t
YXRjaFNlbGVjdG9yID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyl7XG5cdGlmICh0YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1M
RG9jdW1lbnQpID8gbm9kZS5ub2RlTmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtc
blx0XHRpZiAodGFnID09ICcqJyl7XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBm
YWxzZTsgLy8gRml4IGZvciBjb21tZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVs
c2Uge1xuXHRcdFx0aWYgKG5vZGVOYW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0
fVxuXG5cdGlmIChpZCAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZh
bHNlO1xuXG5cdHZhciBpLCBwYXJ0LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFz
c2VzLmxlbmd0aDsgaS0tOyl7XG5cdFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2Ns
YXNzJyk7XG5cdFx0aWYgKCEoY2xzICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJl
dHVybiBmYWxzZTtcblx0fVxuXHRpZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5s
ZW5ndGg7IGktLTspe1xuXHRcdHBhcnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9w
ZXJhdG9yID8gIXBhcnQudGVzdCh0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDog
IXRoaXMuaGFzQXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5c
dGlmIChwc2V1ZG9zKSBmb3IgKGkgPSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9
IHBzZXVkb3NbaV07XG5cdFx0aWYgKCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBw
YXJ0LnZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFy
IGNvbWJpbmF0b3JzID0ge1xuXG5cdCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBh
bnkgbGV2ZWxcblxuXHRcdHZhciBpLCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlz
SFRNTERvY3VtZW50KXtcblx0XHRcdGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0
aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBu
b2RlLmFsbCkgfHwgKHRoaXMuaWRHZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRl
Tm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVy
bnMgYWxsIHRoZSBlbGVtZW50cyB3aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRc
dFx0XHRcdC8vIGlmIHRoZXJlcyBqdXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwg
ZWxzZSBpdCB3aWxsIGJlIGEgY29sbGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5h
bGxbaWRdO1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAo
IWNoaWxkcmVuWzBdKSBjaGlsZHJlbiA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0g
MDsgaXRlbSA9IGNoaWxkcmVuW2krK107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVt
LmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9k
ZS5ub2RlVmFsdWUgPT0gaWQpe1xuXHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBu
dWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7
XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0
fVxuXHRcdFx0XHRpZiAoIWl0ZW0pe1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGlu
IHRoZSBkb20gd2UgcmV0dXJuLCBlbHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUg
Z2V0QnlJZCBsYWJlbFxuXHRcdFx0XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9k
ZSkpIHJldHVybjtcblx0XHRcdFx0XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxz
ZSBpZiAodGhpcy5kb2N1bWVudCAhPT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVt
KSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0
QnlDbGFzczogaWYgKGNsYXNzZXMgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0
aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlD
bGFzc05hbWUoY2xhc3NMaXN0LmpvaW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYm
IGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7
IGl0ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRc
dGdldEJ5VGFnOiB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
dGFnKTtcblx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdl
dEJ5VGFnO1xuXHRcdFx0aWYgKCF0aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0
XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQn
Pic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
eyAvLyBkaXJlY3QgY2hpbGRyZW5cblx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBk
byB7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBp
ZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBu
b2RlLm5leHRTaWJsaW5nKSk7XG5cdH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hp
bGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xu
XHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5c
dFx0bm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9k
ZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQn
fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
eyAvLyBuZXh0IHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykp
e1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlk
ID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJy
ZWFrO1xuXHRcdFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNo
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0
fSxcblxuXHQnKysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhp
c1snY29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0dGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFu
ZCBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6
IX4nXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxc
blxuXHQnISc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBz
ZXVkb3MpeyAvLyBhbGwgcGFyZW50IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5wYXJlbnROb2RlKSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMu
cHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxc
blxuXHQnIT4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gZGlyZWN0IHBhcmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBh
cmVudE5vZGU7XG5cdFx0aWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsn
OiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsg
Ly8gcHJldmlvdXMgc2libGluZ1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJs
aW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9
XG5cdH0sXG5cblx0JyFeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyl7IC8vIGxhc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7
XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNo
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxz
ZSB0aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9k
ZS5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChu
b2RlKTtcblx0XHRcdGlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlz
LmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAo
dmFyIGMgaW4gY29tYmluYXRvcnMpIGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0
b3JzW2NdO1xuXG52YXIgcHNldWRvcyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5c
blx0J2VtcHR5JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENo
aWxkO1xuXHRcdHJldHVybiAhKGNoaWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9k
ZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5c
dCdub3QnOiBmdW5jdGlvbihub2RlLCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0
Y2hOb2RlKG5vZGUsIGV4cHJlc3Npb24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9u
KG5vZGUsIHRleHQpe1xuXHRcdHJldHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29u
dGVudCB8fCAnJykuaW5kZXhPZih0ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6
IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5n
KSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVl
O1xuXHR9LFxuXG5cdCdsYXN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBm
YWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnBy
ZXZpb3VzU2libGluZykpIGlmIChwcmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0
XHR2YXIgbmV4dCA9IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykp
IGlmIChuZXh0Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtc
blx0fSxcblxuXHQvKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBs
b2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRI
JyksXG5cblx0J250aC1sYXN0LWNoaWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hp
bGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUn
OiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9z
TlRIVHlwZScsIHRydWUpLFxuXG5cdCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRI
UHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0Jywg
dHJ1ZSksXG5cblx0J2luZGV4JzogZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0
aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5c
blx0J2V2ZW4nOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1j
aGlsZCddKG5vZGUsICcybicpO1xuXHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5c
blx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0J2ZpcnN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIg
bm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlv
dXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtc
blx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9k
ZSl7XG5cdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUg
PSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVy
biBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVu
Y3Rpb24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5h
bWU7XG5cdFx0d2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5u
b2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtc
blx0XHR3aGlsZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUg
PT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQv
Kjwvb2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3Ncblxu
XHQnZW5hYmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtc
blx0fSxcblxuXHQnZGlzYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5k
aXNhYmxlZDtcblx0fSxcblxuXHQnY2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVy
biBub2RlLmNoZWNrZWQgfHwgbm9kZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5j
dGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQgPT09IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwg
dGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290Jzog
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxu
XG5cdCdzZWxlY3RlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVk
O1xuXHR9XG5cblx0Lyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4g
cHNldWRvcykgbG9jYWxbJ3BzZXVkbzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1
dGVzIG1ldGhvZHNcblxudmFyIGF0dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0
ZXJzID0ge1xuXG5cdCdmb3InOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGlu
IHRoaXMpID8gdGhpcy5odG1sRm9yIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxu
XG5cdCdocmVmJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRo
aXMuZ2V0QXR0cmlidXRlKCdocmVmJywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xu
XHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/
IHRoaXMuc3R5bGUuY3NzVGV4dCA6IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxu
XG5cdCd0YWJpbmRleCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlz
LmdldEF0dHJpYnV0ZU5vZGUoJ3RhYmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2Rl
ICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDog
bnVsbDtcblx0fSxcblxuXHQndHlwZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0
QXR0cmlidXRlKCd0eXBlJyk7XG5cdH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcp
O1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkg
PyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRl
R2V0dGVycy5NQVhMRU5HVEggPSBhdHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0
ZUdldHRlcnMubWF4bGVuZ3RoO1xuXG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGlj
ayA9ICh0aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8v
IFNsaWNrIGZpbmRlclxuXG5TbGljay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNz
aW9uLCBhcHBlbmQpe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24s
IGFwcGVuZCk7XG59O1xuXG5TbGljay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lv
bil7XG5cdHJldHVybiBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1
ZSk7XG59O1xuXG4vLyBTbGljayBjb250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5z
ID0gZnVuY3Rpb24oY29udGFpbmVyLCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFp
bmVyKTtcblx0cmV0dXJuIGxvY2FsLmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4v
LyBTbGljayBhdHRyaWJ1dGUgZ2V0dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9u
KG5vZGUsIG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2Fs
LmdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1
bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJu
IGxvY2FsLmhhc0F0dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJc
blxuU2xpY2subWF0Y2ggPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUg
JiYgc2VsZWN0b3IpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3Ig
PT09IG5vZGUpIHJldHVybiB0cnVlO1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0
dXJuIGxvY2FsLm1hdGNoTm9kZShub2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRy
aWJ1dGUgYWNjZXNzb3JcblxuU2xpY2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24o
bmFtZSwgZm4pe1xuXHRsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVy
biB0aGlzO1xufTtcblxuU2xpY2subG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFt
ZSl7XG5cdHJldHVybiBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xp
Y2sgcHNldWRvIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUs
IGZuKXtcblx0bG9jYWxbJ3BzZXVkbzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVu
dCl7XG5cdFx0cmV0dXJuIGZuLmNhbGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4g
dGhpcztcbn07XG5cblNsaWNrLmxvb2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIg
cHNldWRvID0gbG9jYWxbJ3BzZXVkbzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBm
dW5jdGlvbihhcmd1bWVudCl7XG5cdFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50
KTtcblx0fTtcblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNz
b3JcblxuU2xpY2sub3ZlcnJpZGUgPSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3Zl
cnJpZGUocmVnZXhwLCBmbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBs
b2NhbC5pc1hNTDtcblxuU2xpY2sudWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxv
Y2FsLmdldFVJREhUTUwobm9kZSk7XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sg
PSBTbGljaztcblxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3Vu
ZGVmaW5lZCcpID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IEVsZW1lbnRcblxuZGVzY3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQg
aXRlbXMgaW4gTW9vVG9vbHMuIENvbnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xs
YXJzIGZ1bmN0aW9uLCBhbmQgYW4gaGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVy
IG1ldGhvZHMgdG8gbGV0IHlvdSBlYXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQs
IEFycmF5LCBTdHJpbmcsIEZ1bmN0aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBT
bGljay5GaW5kZXJdXG5cbnByb3ZpZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJh
bWUsIFNlbGVjdG9yc11cblxuLi4uXG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9
IGZ1bmN0aW9uKHRhZywgcHJvcHMpe1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0
cnVjdG9yc1t0YWddO1xuXHRpZiAoa29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9w
cyk7XG5cdGlmICh0eXBlb2YgdGFnICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFn
KS5zZXQocHJvcHMpO1xuXG5cdGlmICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15b
XFx3LV0rJC8pLnRlc3QodGFnKSl7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZyku
ZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYn
IDogcGFyc2VkLnRhZztcblx0XHRpZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHBy
b3BzLmlkID0gcGFyc2VkLmlkO1xuXG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmli
dXRlcztcblx0XHRpZiAoYXR0cmlidXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRy
aWJ1dGVzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtc
blx0XHRcdGlmIChwcm9wc1thdHRyLmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlm
IChhdHRyLnZhbHVlICE9IG51bGwgJiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIu
a2V5XSA9IGF0dHIudmFsdWU7XG5cdFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5v
cGVyYXRvcikgcHJvcHNbYXR0ci5rZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2Vk
LmNsYXNzTGlzdCAmJiBwcm9wc1snY2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBh
cnNlZC5jbGFzc0xpc3Quam9pbignICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0Vs
ZW1lbnQodGFnLCBwcm9wcyk7XG59O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVt
ZW50LnByb3RvdHlwZSA9IEJyb3dzZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQg
SUU5IHJlcXVpcmUgdGhlIHdyYXBwaW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50
ID0gKGZ1bmN0aW9uKGZpcmVFdmVudCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50
KXtcblx0XHRcdHJldHVybiBmaXJlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0
fTtcblx0fSkoRWxlbWVudC5wcm90b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0Vs
ZW1lbnQnLCBFbGVtZW50KS5taXJyb3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90
b3R5cGVbbmFtZV0pIHJldHVybjtcblxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIHJlc3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVu
dHMgPSB0cnVlO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0dmFyIGVsZW1lbnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0g
ZWxlbWVudFtuYW1lXS5hcHBseShlbGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVs
ZW1lbnRzICYmIHR5cGVPZihyZXN1bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVy
biAoZWxlbWVudHMpID8gbmV3IEVsZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxu
XHRFbGVtZW50cy5pbXBsZW1lbnQob2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7
XG5cdEVsZW1lbnQucGFyZW50ID0gT2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xu
XHRcdCckY29uc3RydWN0b3InOiBFbGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29u
dmVydCgnZWxlbWVudCcpLmhpZGUoKVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9u
KG5hbWUsIG1ldGhvZCl7XG5cdFx0RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5c
dH0pO1xufVxuXG5FbGVtZW50LkNvbnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9
IG5ldyBUeXBlKCdJRnJhbWUnLCBmdW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGlu
ayhhcmd1bWVudHMsIHtcblx0XHRwcm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFt
ZTogZnVuY3Rpb24ob2JqKXtcblx0XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0
fSk7XG5cblx0dmFyIHByb3BzID0gcGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0
aWYgKHBhcmFtcy5pZnJhbWUpIGlmcmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xu
XHR2YXIgb25sb2FkID0gcHJvcHMub25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHBy
b3BzLm9ubG9hZDtcblx0cHJvcHMuaWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5u
YW1lLCBpZnJhbWUgPyAoaWZyYW1lLmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0
cmluZy51bmlxdWVJRCgpXS5waWNrKCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8
fCAnaWZyYW1lJywgcHJvcHMpO1xuXG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9u
bG9hZC5jYWxsKGlmcmFtZS5jb250ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZy
YW1lc1twcm9wcy5pZF0pIG9uTG9hZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9h
ZCcsIG9uTG9hZCk7XG5cdHJldHVybiBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhp
cy5FbGVtZW50cyA9IGZ1bmN0aW9uKG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0
aCl7XG5cdFx0dmFyIHVuaXF1ZXMgPSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9k
ZSA9IG5vZGVzW2krK107KXtcblx0XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0
XHRcdGlmICghdW5pcXVlc1t1aWRdKXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0
XHRcdFx0dGhpcy5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVu
dHMucHJvdG90eXBlID0ge2xlbmd0aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxu
bmV3IFR5cGUoJ0VsZW1lbnRzJywgRWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBm
dW5jdGlvbihmaWx0ZXIsIGJpbmQpe1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0
XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikg
PT0gJ3N0cmluZycpID8gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChm
aWx0ZXIpO1xuXHRcdH0gOiBmaWx0ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVz
aDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2
YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBp
dGVtID0gZG9jdW1lbnQuaWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xl
bmd0aCsrXSA9IGl0ZW07XG5cdFx0fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgp
O1xuXHR9LnByb3RlY3QoKSxcblxuXHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVt
cyA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0
XHRpZiAoaXRlbSkgaXRlbXMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnBy
b3RvdHlwZS51bnNoaWZ0LmFwcGx5KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0
Y29uY2F0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0
aGlzKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0Vu
dW1lcmFibGUoaXRlbSkpIG5ld0VsZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3
RWxlbWVudHMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9
LnByb3RlY3QoKSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAo
dmFyIGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChj
b2xsZWN0aW9uW2ldKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1w
dHk6IGZ1bmN0aW9uKCl7XG5cdFx0d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRo
aXMubGVuZ3RoXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxu
XG4oZnVuY3Rpb24oKXtcblxuLy8gRkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBl
LnNwbGljZSwgb2JqZWN0ID0geycwJzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2Uu
Y2FsbChvYmplY3QsIDEsIDEpO1xuaWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1l
bnQoJ3NwbGljZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0
dmFyIHJlc3VsdCA9IHNwbGljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVu
Z3RoID49IHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1
bHQ7XG59LnByb3RlY3QoKSk7XG5cbkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9k
LCBuYW1lKXtcblx0RWxlbWVudHMuaW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJy
YXkubWlycm9yKEVsZW1lbnRzKTtcblxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNj
ZXB0c0hUTUw7XG50cnkge1xuXHRjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnPGlucHV0IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChl
KXt9XG5cbnZhciBlc2NhcGVRdW90ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyAr
IGh0bWwpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xu
fTtcbi8qPC9sdElFOD4qL1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNl
dCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rp
b24oKXtcblx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0
ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7
bWFyZ2luOiAwcHg7fSc7XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAo
ZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1w
bGVtZW50KHtcblxuXHRuZXdFbGVtZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAo
cHJvcHMpe1xuXHRcdFx0aWYgKHByb3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENo
ZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2Jv
eCcgfHwgcHJvcHMudHlwZSA9PSAncmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9w
cy52YWx1ZSA9ICdvbic7XG5cdFx0XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0
byBiZSBzZXQgYmVmb3JlIGNoYW5naW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0
aWYgKCFjYW5DaGFuZ2VTdHlsZUhUTUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIg
c3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0
c3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRp
ZiAocHJvcHMudHlwZSkgZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlk
KHN0eWxlRWxlbWVudCkuc2V0KHByb3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xu
XHRcdFx0Lyo8bHRJRTg+Ki8vLyBGaXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVy
dGllcyBpbiBJRSA8IDhcblx0XHRcdGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRc
dFx0XHR0YWcgPSAnPCcgKyB0YWc7XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBu
YW1lPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChw
cm9wcy50eXBlKSB0YWcgKz0gJyB0eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSAr
ICdcIic7XG5cdFx0XHRcdHRhZyArPSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xu
XHRcdFx0XHRkZWxldGUgcHJvcHMudHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xu
XHRcdH1cblx0XHRyZXR1cm4gdGhpcy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHBy
b3BzKTtcblx0fVxuXG59KTtcblxufSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9m
KHdpbmRvdyk7XG5TbGljay51aWRPZihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7
XG5cblx0bmV3VGV4dE5vZGU6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0
ZVRleHROb2RlKHRleHQpO1xuXHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy53aW5kb3c7XG5cdH0sXG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5
cGVzID0ge1xuXG5cdFx0XHRzdHJpbmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0
XHRcdGlkID0gU2xpY2suZmluZChkb2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxc
JDEnKSk7XG5cdFx0XHRcdHJldHVybiAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6
IG51bGw7XG5cdFx0XHR9LFxuXG5cdFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtc
blx0XHRcdFx0U2xpY2sudWlkT2YoZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZh
bWlseSAmJiAhKC9eKD86b2JqZWN0fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0
XHRcdFx0dmFyIGZpcmVFdmVudCA9IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGlu
ZyBuZWVkZWQgaW4gSUU3LCBvciBlbHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9
IGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlw
ZSwgZXZlbnQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxl
bWVudC5Qcm90b3R5cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0s
XG5cblx0XHRcdG9iamVjdDogZnVuY3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlm
IChvYmoudG9FbGVtZW50KSByZXR1cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyks
IG5vY2FzaCk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRc
dHR5cGVzLnRleHRub2RlID0gdHlwZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVz
LmRvY3VtZW50ID0gZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xu
XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYg
ZWwuJGZhbWlseSAmJiBlbC51bmlxdWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBl
ID0gdHlwZU9mKGVsKTtcblx0XHRcdHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0o
ZWwsIG5vY2FzaCwgZG9jIHx8IGRvY3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5c
bn0pO1xuXG5pZiAod2luZG93LiQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0
aW9uKGVsLCBuYyl7XG5cdHJldHVybiBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQp
O1xufSk7XG5cbldpbmRvdy5pbXBsZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLmRvY3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50
XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVz
c2lvbil7XG5cdFx0cmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxl
bWVudHMpO1xuXHR9LFxuXG5cdGdldEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxu
XG59KTtcblxudmFyIGNvbnRhaW5zID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0
cmV0dXJuIFNsaWNrLmNvbnRhaW5zKHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1l
bnQuY29udGFpbnMpIERvY3VtZW50LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlu
cyk7XG5cblxuXG4vLyB0cmVlIHdhbGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5j
dGlvbihleHByZXNzaW9uLCBjb21iaW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4g
Y29tYmluYXRvcjtcblxuXHRleHByZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4
cHJlc3Npb24pKTtcblxuXHR2YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25z
O1xuXHRmb3IgKHZhciBpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Np
b25zW2ldWzBdLmNvbWJpbmF0b3IgPSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9u
O1xufTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3Vz
OiAnIX4nLFxuXHRnZXRQYXJlbnQ6ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9k
KXtcblx0RWxlbWVudC5pbXBsZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29t
YmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6
ICd+Jyxcblx0Z2V0QWxsUHJldmlvdXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRn
ZXRDaGlsZHJlbjogJz4nLFxuXHRnZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0
b3IsIG1ldGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVz
c2lvbil7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHBy
ZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtc
blxuXHRnZXRGaXJzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50
LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+Jykp
WzBdKTtcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1
cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVz
c2lvbiwgJz4nKSkuZ2V0TGFzdCgpKTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9j
dW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxc
blxuXHRnZXRFbGVtZW50QnlJZDogZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5p
ZChTbGljay5maW5kKHRoaXMsICcjJyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxc
XCQxJykpKTtcblx0fSxcblxuXHRtYXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0
dXJuICFleHByZXNzaW9uIHx8IFNsaWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5c
bn0pO1xuXG5cblxuaWYgKHdpbmRvdy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcs
IGZ1bmN0aW9uKHNlbGVjdG9yKXtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0
aWYgKHR5cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlz
LmRvY3VtZW50LCBzZWxlY3RvciwgbmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlz
RW51bWVyYWJsZShzZWxlY3RvcikpIHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9
XG5cdHJldHVybiBuZXcgRWxlbWVudHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNc
blxudmFyIGluc2VydGVycyA9IHtcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1l
bnQpe1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVu
dCkgcGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRl
cjogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQu
cGFyZW50Tm9kZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQs
IGVsZW1lbnQubmV4dFNpYmxpbmcpO1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4
dCwgZWxlbWVudCl7XG5cdFx0ZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxu
XHR0b3A6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVm
b3JlKGNvbnRleHQsIGVsZW1lbnQuZmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJz
Lmluc2lkZSA9IGluc2VydGVycy5ib3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFBy
b3BlcnR5XG5cbnZhciBwcm9wZXJ0eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307
XG5cbi8vIHByb3BlcnRpZXNcblxudmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2go
W1xuXHQndHlwZScsICd2YWx1ZScsICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQ
YWRkaW5nJywgJ2NlbGxTcGFjaW5nJywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93
U3BhbicsICd0YWJJbmRleCcsICd1c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHBy
b3BlcnRpZXNbcHJvcGVydHkudG9Mb3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9w
ZXJ0aWVzLmh0bWwgPSAnaW5uZXJIVE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKS50ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAn
dGV4dENvbnRlbnQnO1xuXG5PYmplY3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFs
LCBrZXkpe1xuXHRwcm9wZXJ0eVNldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtc
blx0XHRub2RlW3JlYWxdID0gdmFsdWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0g
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8
bHRJRTk+Ki9cbnByb3BlcnR5U2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBm
dW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUn
KSBub2RlLnNldCgnaHRtbCcsIHZhbHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0
XSA9IHZhbHVlO1xuXHR9O1xufSkocHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdl
dHRlcnMudGV4dCA9IChmdW5jdGlvbihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7
XG5cdFx0cmV0dXJuIChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRN
TCA6IGdldHRlcihub2RlKTtcblx0fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9s
dElFOT4qL1xuXG4vLyBCb29sZWFuc1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25v
d3JhcCcsICdpc21hcCcsICdkZWNsYXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNh
YmxlZCcsICdyZWFkT25seScsICdtdWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5c
dCdkZWZlcicsICdkZWZhdWx0Q2hlY2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0
b3BsYXknLFxuXHQnbG9vcCdcbl07XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFj
aChib29scywgZnVuY3Rpb24oYm9vbCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2Uo
KTtcblx0Ym9vbGVhbnNbbG93ZXJdID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9
IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtc
blx0cHJvcGVydHlHZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAh
IW5vZGVbYm9vbF07XG5cdH07XG59KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBw
ZW5kKHByb3BlcnR5U2V0dGVycywge1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVl
KXtcblx0XHQoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8
fCAnJykgOiBub2RlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zv
cic6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9k
ZS5odG1sRm9yID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9
LFxuXG5cdCdzdHlsZSc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkg
PyBub2RlLnN0eWxlLmNzc1RleHQgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScs
IHZhbHVlKTtcblx0fSxcblxuXHQndmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0
bm9kZS52YWx1ZSA9ICh2YWx1ZSAhPSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5c
bnByb3BlcnR5R2V0dGVyc1snY2xhc3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdj
bGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0
cmlidXRlKCdjbGFzcycpO1xufTtcblxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFu
ZCB0aHJvd3NcbnRyeSB7IGVsLnR5cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVs
LnR5cGUgIT0gJ2J1dHRvbicpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwg
dmFsdWUpe1xuXHRub2RlLnNldEF0dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51
bGw7XG4vKiA8L3dlYmtpdD4gKi9cblxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5
IC0gSUU4IENhbm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5
bGVIVE1MID0gKGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdzdHlsZScpLFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1M
ID0gJyNqdXN0VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhU
TUw7XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5Piov
XG5cbnZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxl
SW5wdXRWYWx1ZSwgaHRtbDVJbnB1dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9
ICd0JztcbmlucHV0LnR5cGUgPSAnc3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0
LnZhbHVlICE9ICd0JztcblxuLy8gIzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50
XCIgd2hlbiB0cnlpbmcgdG8gdXNlIGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52
YWx1ZSA9ICcnO1xuXHRpbnB1dC50eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQg
PSBpbnB1dC50eXBlID09ICdlbWFpbCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtc
blxuaWYgKHZvbGF0aWxlSW5wdXRWYWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5
U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZh
bHVlID0gbm9kZS52YWx1ZTtcblx0XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUg
PSB2YWx1ZTtcblx0fSBjYXRjaCAoZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0
eSwgc2V0UHJvcGVydHkgKi9cblxuLyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmli
dXRlID0gKGZ1bmN0aW9uKGRpdil7XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0
dXJuIChkaXYuZ2V0QXR0cmlidXRlKCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlv
bih0ZXN0KXtcblx0dGVzdC5pbm5lckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3Vs
ZF9maXhcIiB2YWx1ZT1cInRoZSB1bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVz
dC5jbG9uZU5vZGUodHJ1ZSkuZmlyc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSko
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhh
c0NsYXNzTGlzdCA9ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xu
XG52YXIgY2xhc3NlcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0g
KGNsYXNzTmFtZSB8fCAnJykuY2xlYW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJl
dHVybiBjbGFzc05hbWVzLmZpbHRlcihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFz
c05hbWUgIT09ICcnICYmICF1bmlxdWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNz
TmFtZV0gPSBjbGFzc05hbWU7XG5cdH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVu
Y3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1v
dmVGcm9tQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92
ZShuYW1lKTtcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVu
Y3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFt
ZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2
YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRy
aWJ1dGVXaGl0ZUxpc3Q7XG5cdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0
ZVdoaXRlTGlzdCA9IHRoaXMucmV0cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5c
dFx0XHQvKiA8L2x0SUU5PiAqL1xuXG5cdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRc
dHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0
XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgZGVsZXRlIGF0dHJpYnV0ZVdoaXRlTGlzdFtu
YW1lXTtcblx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRo
aXMuc2V0QXR0cmlidXRlKG5hbWUsICcnICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICov
XG5cdFx0XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0W25h
bWVdID0gdHJ1ZTtcblx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRl
cyl7XG5cdFx0Zm9yICh2YXIgYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVy
dHkoYXR0cmlidXRlLCBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGdldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0g
cHJvcGVydHlHZXR0ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0
dXJuIGdldHRlcih0aGlzKTtcblx0XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0
QXR0cmlidXRlKXtcblx0XHRcdHZhciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUp
LCBhdHRyaWJ1dGVXaGl0ZUxpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0
Jywge30pO1xuXHRcdFx0aWYgKCFhdHRyKSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4
cGFuZG8gJiYgIWF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9
IHRoaXMub3V0ZXJIVE1MO1xuXHRcdFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBh
bmQgZmluZCBtZW50aW9uIG9mIGF0dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJz
dHIoMCwgb3V0ZXIuc2VhcmNoKC9cXC8/WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9m
KG5hbWUpIDwgMCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1l
XSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJl
c3VsdCA9IFNsaWNrLmdldEF0dHJpYnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1
bHQgJiYgIVNsaWNrLmhhc0F0dHJpYnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xu
XHR9LFxuXG5cdGdldFByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJh
eS5jb252ZXJ0KGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVy
dHksIHRoaXMpLmFzc29jaWF0ZShhcmdzKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVu
Y3Rpb24obmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5c
dH0sXG5cblx0cmVtb3ZlUHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFy
Z3VtZW50cywgdGhpcy5yZW1vdmVQcm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0c2V0OiBmdW5jdGlvbihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0g
RWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQp
ID8gcHJvcGVydHkuc2V0LmNhbGwodGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9w
LCB2YWx1ZSk7XG5cdH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ap
e1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1
cm4gKHByb3BlcnR5ICYmIHByb3BlcnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykg
OiB0aGlzLmdldFByb3BlcnR5KHByb3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJh
c2U6IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGll
c1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJh
c2UuYXBwbHkodGhpcykgOiB0aGlzLnJlbW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05h
bWUpe1xuXHRcdHJldHVybiB0aGlzLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9
IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFt
ZSkuY29udGFpbnMoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0
ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChh
ZGRUb0NsYXNzTGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihj
bGFzc05hbWUpe1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcg
KyB0aGlzLmNsYXNzTmFtZSkuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dHJlbW92ZUNsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNs
YXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NO
YW1lcyA9IGNsYXNzZXModGhpcy5jbGFzc05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5m
b3JFYWNoKGNsYXNzTmFtZXMuZXJhc2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1l
ID0gY2xhc3NOYW1lcy5qb2luKCcgJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9n
Z2xlQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBu
dWxsKSBmb3JjZSA9ICF0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3Jj
ZSkgPyB0aGlzLmFkZENsYXNzKGNsYXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFt
ZSk7XG5cdH0sXG5cblx0YWRvcHQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMs
IGZyYWdtZW50LCBlbGVtZW50cyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0g
ZWxlbWVudHMubGVuZ3RoO1xuXHRcdGlmIChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9
IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVt
ZW50c1tpXSwgdHJ1ZSk7XG5cdFx0XHRpZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVs
ZW1lbnQpO1xuXHRcdH1cblxuXHRcdGlmIChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFn
bWVudCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlv
bih0ZXh0LCB3aGVyZSl7XG5cdFx0cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCku
bmV3VGV4dE5vZGUodGV4dCksIHdoZXJlKTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwg
d2hlcmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWws
IHRydWUpLCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0
aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBk
b2N1bWVudC5pZChlbCwgdHJ1ZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxh
Y2VzOiBmdW5jdGlvbihlbCl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0
ZWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHdyYXBzOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQu
aWQoZWwsIHRydWUpO1xuXHRcdHJldHVybiB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVy
ZSk7XG5cdH0sXG5cblx0Z2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3Rl
ZEluZGV4OyAvLyBTYWZhcmkgMy4yLjFcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNv
bnZlcnQodGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVy
biBvcHRpb24uc2VsZWN0ZWQ7XG5cdFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50
cygnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZh
ciB0eXBlID0gZWwudHlwZTtcblx0XHRcdGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0
eXBlID09ICdzdWJtaXQnIHx8IHR5cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0
eXBlID09ICdpbWFnZScpIHJldHVybjtcblxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFn
JykgPT0gJ3NlbGVjdCcpID8gZWwuZ2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0
XHRcdFx0Ly8gSUVcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScp
O1xuXHRcdFx0fSkgOiAoKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYm
ICFlbC5jaGVja2VkKSA/IG51bGwgOiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNv
bnZlcnQodmFsdWUpLmVhY2goZnVuY3Rpb24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwg
IT0gJ3VuZGVmaW5lZCcpIHF1ZXJ5U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5h
bWUpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7
XG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBh
cHBlbmRIVE1MXG5cbnZhciBhcHBlbmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJl
Z2luJyxcblx0YWZ0ZXI6ICdhZnRlckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRv
cDogJ2FmdGVyQmVnaW4nLFxuXHRpbnNpZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50Lmlt
cGxlbWVudCgnYXBwZW5kSFRNTCcsICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKSkgPyBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5z
ZXJ0QWRqYWNlbnRIVE1MKGFwcGVuZEluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwp
O1xuXHRyZXR1cm4gdGhpcztcbn0gOiBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1w
ID0gbmV3IEVsZW1lbnQoJ2RpdicsIHtodG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1w
LmNoaWxkTm9kZXMsXG5cdFx0ZnJhZ21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFm
cmFnbWVudCkgcmV0dXJuIHRoaXM7XG5cdGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRm
cmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVu
dC5hcHBlbmRDaGlsZChjaGlsZHJlbltpXSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3do
ZXJlIHx8ICdib3R0b20nXShmcmFnbWVudCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5c
bnZhciBjb2xsZWN0ZWQgPSB7fSwgc3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24o
dWlkKXtcblx0cmV0dXJuIChzdG9yYWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59
O1xuXG52YXIgY2xlYW4gPSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVl
TnVtYmVyO1xuXHRpZiAoaXRlbS5yZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5c
dGlmIChpdGVtLmNsZWFyQXR0cmlidXRlcykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYg
KHVpZCAhPSBudWxsKXtcblx0XHRkZWxldGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0
b3JhZ2VbdWlkXTtcblx0fVxuXHRyZXR1cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7
aW5wdXQ6ICdjaGVja2VkJywgb3B0aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307
XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZh
ciBjaGlsZHJlbiA9IGNsZWFuKHRoaXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0
QXJyYXkuZWFjaChjaGlsZHJlbiwgY2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtc
blx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJh
eS5jb252ZXJ0KHRoaXMuY2hpbGROb2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0
aGlzLnBhcmVudE5vZGUpID8gdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhp
cztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29u
dGVudHMgPSBjb250ZW50cyAhPT0gZmFsc2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5v
ZGUoY29udGVudHMpLCBjZSA9IFtjbG9uZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNv
bnRlbnRzKXtcblx0XHRcdGNlLmFwcGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCcqJykpKTtcblx0XHRcdHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0
aDsgaS0tOyl7XG5cdFx0XHR2YXIgbm9kZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0
XHRpZiAoIWtlZXBpZCkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElF
OT4qL1xuXHRcdFx0aWYgKG5vZGUuY2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVh
ckF0dHJpYnV0ZXMoKTtcblx0XHRcdFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5c
dFx0XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYg
KG5vZGUub3B0aW9ucyl7XG5cdFx0XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVs
ZW1lbnQub3B0aW9ucztcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBu
b1tqXS5zZWxlY3RlZCA9IGVvW2pdLnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0
XHQvKjwvbHRJRTk+Ki9cblx0XHRcdHZhciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFt
ZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRcdGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVb
cHJvcF0gPSBlbGVtZW50W3Byb3BdO1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYg
KGhhc0Nsb25lQnVnKXtcblx0XHRcdHZhciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdvYmplY3QnKSwgdG8gPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0
XHRcdGZvciAoaSA9IGNvLmxlbmd0aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0
ZXJIVE1MO1xuXHRcdH1cblx0XHQvKjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQo
Y2xvbmUpO1xuXHR9XG5cbn0pO1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tl
KCdpbXBsZW1lbnQnLCB7XG5cblx0YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0
XHRpZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5c
dFx0XHRjb2xsZWN0ZWRbU2xpY2sudWlkT2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYg
KHRoaXMuYWRkRXZlbnRMaXN0ZW5lcikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAh
IWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBm
bik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9u
KHR5cGUsIGZuKXtcblx0XHRpZiAodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92
ZUV2ZW50TGlzdGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMu
ZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZXRyaWV2ZTogZnVuY3Rpb24ocHJvcGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0g
Z2V0KFNsaWNrLnVpZE9mKHRoaXMpKSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlm
IChkZmx0ICE9IG51bGwgJiYgcHJvcCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0g
PSBkZmx0O1xuXHRcdHJldHVybiBwcm9wICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxu
XHRzdG9yZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdl
dChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtc
blx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0
b3JhZ2VbcHJvcGVydHldO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElF
OT4qL1xuaWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIp
e1xuXHR2YXIgZ2MgPSBmdW5jdGlvbigpe1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xl
YW4pO1xuXHRcdGlmICh3aW5kb3cuQ29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5c
dFx0d2luZG93LnJlbW92ZUxpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5h
ZGRMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJv
cGVydGllcyA9IHt9O1xuXG5cblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNl
dDogZnVuY3Rpb24oc3R5bGUpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9
LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xu
XHR9LFxuXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcn
O1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59
O1xuXG5FbGVtZW50LlByb3BlcnRpZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwp
e1xuXHRcdGlmIChodG1sID09IG51bGwpIGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2Yo
aHRtbCkgPT0gJ2FycmF5JykgaHRtbCA9IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4q
L1xuXHRcdGlmICh0aGlzLnN0eWxlU2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5z
dHlsZVNoZWV0LmNzc1RleHQgPSBodG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5l
ckhUTUwgPSBodG1sO1xuXHR9LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgn
aHRtbCcsICcnKTtcblx0fVxuXG59O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1
ZSwgc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0
cnVlO1xuXG4vKjxsdElFOT4qL1xuLy8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9q
ZGJhcnRsZXR0LmNvbS9pbm5lcnNoaXYvXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7XG52YXIgZnJhZ21lbnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+Jztc
bnN1cHBvcnRzSFRNTDVFbGVtZW50cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5p
ZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBh
c2lkZSBhdWRpbyBjYW52YXMgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290
ZXIgaGVhZGVyIGhncm91cCBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBz
dW1tYXJ5IHRpbWUgdmlkZW8nLnNwbGl0KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRG9jdW1lbnRGcmFnbWVudCgpLCBsID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZy
YWdtZW50LmNyZWF0ZUVsZW1lbnQodGFnc1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5
PiovXG5cbi8qPElFPiovXG5zdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1w
dChmdW5jdGlvbigpe1xuXHR2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJs
ZScpO1xuXHR0YWJsZS5pbm5lckhUTUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJu
IHRydWU7XG59KTtcblxuLyo8bHRGRjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3RyJyksIGh0bWwgPSAnPHRkPjwvdGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBw
b3J0c1RSSW5uZXJIVE1MID0gKHRyLmlubmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8q
PC9sdEZGND4qL1xuXG5pZiAoIXN1cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJ
bm5lckhUTUwgfHwgIXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0
aWVzLmh0bWwuc2V0ID0gKGZ1bmN0aW9uKHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0g
e1xuXHRcdFx0dGFibGU6IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0
OiBbMSwgJzxzZWxlY3Q+JywgJzwvc2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxl
Pjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0
Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5z
bGF0aW9ucy50aGVhZCA9IHRyYW5zbGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtc
blxuXHRcdHJldHVybiBmdW5jdGlvbihodG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRc
dGlmICh0aGlzLnN0eWxlU2hlZXQpIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRc
dC8qPC9sdElFOT4qL1xuXHRcdFx0dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3Rh
ZycpXTtcblx0XHRcdGlmICghd3JhcCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0g
WzAsICcnLCAnJ107XG5cdFx0XHRpZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1s
KTtcblxuXHRcdFx0dmFyIGxldmVsID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpLCB0YXJnZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hU
TUw1RWxlbWVudHMpIGZyYWdtZW50LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBl
ci5pbm5lckhUTUwgPSBbd3JhcFsxXSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycp
O1xuXHRcdFx0d2hpbGUgKGxldmVsLS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRc
dFx0dGhpcy5lbXB0eSgpLmFkb3B0KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3Vw
cG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRc
dHdyYXBwZXIgPSBudWxsO1xuXHRcdH07XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwu
c2V0KTtcbn1cbi8qPC9JRT4qL1xuXG4vKjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+
PG9wdGlvbj5zPC9vcHRpb24+PC9zZWxlY3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQu
dmFsdWUgIT0gJ3MnKSBFbGVtZW50LlByb3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5j
dGlvbih2YWx1ZSl7XG5cdFx0dmFyIHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFn
ICE9ICdzZWxlY3QnKSByZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5c
dFx0dmFyIG9wdGlvbnMgPSB0aGlzLmdldEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9
IFN0cmluZyh2YWx1ZSk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsg
aSsrKXtcblx0XHRcdHZhciBvcHRpb24gPSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0
aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0
dHIgJiYgYXR0ci5zcGVjaWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcp
O1xuXHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3Rl
ZCA9IHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0
aW9uID0gdGhpcywgdGFnID0gb3B0aW9uLmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdz
ZWxlY3QnICYmIHRhZyAhPSAnb3B0aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVl
Jyk7XG5cblx0XHRpZiAodGFnID09ICdzZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNl
bGVjdGVkKClbMF0pKSByZXR1cm4gJyc7XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRy
aWJ1dGVOb2RlKCd2YWx1ZScpO1xuXHRcdHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkg
PyBvcHRpb24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3Jt
ID0gbnVsbDtcbi8qPC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5p
ZCA9IHtcblx0c2V0OiBmdW5jdGlvbihpZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmli
dXRlTm9kZSgnaWQnKS52YWx1ZSA9IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIHRoaXMuaWQgfHwgbnVsbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0
dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59
O1xuLyo8L0lFPiovXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIHRoZSBFdmVudCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3Qg
Y3Jvc3MtYnJvd3Nlci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBbV2luZG93LCBEb2N1bWVudCwgQXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxu
cHJvdmlkZXM6IEV2ZW50XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9
IHt9O1xudmFyIG5vcm1hbGl6ZVdoZWVsU3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBu
b3JtYWxpemVkO1xuXHRpZiAoZXZlbnQud2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2
ZW50LndoZWVsRGVsdGEgJSAxMjAgPT0gMCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVu
dC53aGVlbERlbHRhIC8gMTI7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50
LmRlbHRhWSB8fCBldmVudC5kZXRhaWwgfHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91
bnQgJSAzID09IDAgPyByYXdBbW91bnQgLyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJl
dHVybiBub3JtYWxpemVkO1xufTtcblxudmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5l
dyBUeXBlKCdET01FdmVudCcsIGZ1bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2lu
ID0gd2luZG93O1xuXHRldmVudCA9IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRl
eHRlbmRlZCkgcmV0dXJuIGV2ZW50O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4
dGVuZGVkID0gdHJ1ZTtcblx0dGhpcy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNv
bnRyb2wgPSBldmVudC5jdHJsS2V5O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhp
cy5tZXRhID0gZXZlbnQubWV0YUtleTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50
eXBlO1xuXHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5c
dHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5w
YXJlbnROb2RlO1xuXHR0aGlzLnRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYg
KHR5cGUuaW5kZXhPZigna2V5JykgPT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAo
ZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5
cGUgIT0gJ2tleXByZXNzJykgdGhpcy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9
PSAna2V5ZG93bicgfHwgdHlwZSA9PSAna2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYm
IGNvZGUgPCAxMjQpIHRoaXMua2V5ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBp
ZiAoY29kZSA+IDk1ICYmIGNvZGUgPCAxMDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1c
blx0XHRpZiAodGhpcy5rZXkgPT0gbnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2Rl
KGNvZGUpLnRvTG93ZXJDYXNlKCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5
cGUgPT0gJ2RibGNsaWNrJyB8fCB0eXBlID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hl
ZWwnIHx8IHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykg
PT0gMCl7XG5cdFx0dmFyIGRvYyA9IHdpbi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21w
YXRNb2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRv
Yy5ib2R5O1xuXHRcdHRoaXMucGFnZSA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxs
KSA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0
eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsg
ZG9jLnNjcm9sbFRvcFxuXHRcdH07XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZl
bnQucGFnZVggIT0gbnVsbCkgPyBldmVudC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50
LmNsaWVudFgsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAt
IHdpbi5wYWdlWU9mZnNldCA6IGV2ZW50LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09
ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hl
ZWwnKSB0aGlzLndoZWVsID0gbm9ybWFsaXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5y
aWdodENsaWNrID0gKGV2ZW50LndoaWNoID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRc
dGlmICh0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09
ICdtb3VzZWVudGVyJyB8fCB0eXBlID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRh
cmdldCA9IHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0
XHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQg
PyAnZnJvbScgOiAndG8nKSArICdFbGVtZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiBy
ZWxhdGVkLm5vZGVUeXBlID09IDMpIHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0
XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBkb2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0g
ZWxzZSBpZiAodHlwZS5pbmRleE9mKCd0b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0
dXJlJykgPT0gMCl7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRo
aXMuc2NhbGUgPSBldmVudC5zY2FsZTtcblx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50
YXJnZXRUb3VjaGVzO1xuXHRcdHRoaXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91
Y2hlcztcblx0XHR2YXIgdG91Y2hlcyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5c
dFx0aWYgKHRvdWNoZXMgJiYgdG91Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVz
WzBdO1xuXHRcdFx0dGhpcy5wYWdlID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07
XG5cdFx0XHR0aGlzLmNsaWVudCA9IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZ
fTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xu
XHRpZiAoIXRoaXMucGFnZSkgdGhpcy5wYWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVt
ZW50KHtcblxuXHRzdG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZh
dWx0KCkuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5j
dGlvbigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5z
dG9wUHJvcGFnYXRpb24oKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24o
KXtcblx0XHRpZiAodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50
RGVmYXVsdCgpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlv
bihjb2RlLCBrZXkpe1xuXHRfa2V5c1tjb2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xu
XG5ET01FdmVudC5kZWZpbmVLZXlzID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVy
KHRydWUpO1xuXG5ET01FdmVudC5kZWZpbmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rv
d24nLCAnMzcnOiAnbGVmdCcsICczOSc6ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAn
c3BhY2UnLCAnOCc6ICdiYWNrc3BhY2UnLCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywg
JzEzJzogJ2VudGVyJ1xufSk7XG5cbn0pKCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBF
bGVtZW50LkV2ZW50XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9y
IGRlYWxpbmcgd2l0aCBldmVudHMuIFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIg
YW5kIG1vdXNlbGVhdmUgY3VzdG9tIEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxu
XG5wcm92aWRlczogRWxlbWVudC5FdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5F
bGVtZW50LlByb3BlcnRpZXMuZXZlbnRzID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhp
cy5hZGRFdmVudHMoZXZlbnRzKTtcbn19O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0u
aW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtc
blx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICgh
ZXZlbnRzW3R5cGVdKSBldmVudHNbdHlwZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRc
dGlmIChldmVudHNbdHlwZV0ua2V5cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2
ZW50c1t0eXBlXS5rZXlzLnB1c2goZm4pO1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0
XHRjdXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxu
XHRcdFx0c2VsZiA9IHRoaXM7XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9u
QWRkKSBjdXN0b20ub25BZGQuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9t
LmNvbmRpdGlvbil7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRc
dFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJu
IGZuLmNhbGwodGhpcywgZXZlbnQpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9
O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNv
bnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZu
ID0gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0
dmFyIG5hdGl2ZUV2ZW50ID0gRWxlbWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlm
IChuYXRpdmVFdmVudCl7XG5cdFx0XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRl
Zm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZl
bnQsIHNlbGYuZ2V0V2luZG93KCkpO1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxm
LCBldmVudCkgPT09IGZhbHNlKSBldmVudC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5c
dFx0XHR0aGlzLmFkZExpc3RlbmVyKHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRc
dH1cblx0XHRldmVudHNbdHlwZV0udmFsdWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZl
bnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50
c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0
dmFyIGluZGV4ID0gbGlzdC5rZXlzLmluZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkg
cmV0dXJuIHRoaXM7XG5cdFx0dmFyIHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRl
bGV0ZSBsaXN0LmtleXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5c
dFx0dmFyIGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xu
XHRcdFx0aWYgKGN1c3RvbS5vblJlbW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4s
IHR5cGUpO1xuXHRcdFx0aWYgKGN1c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChj
dXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50
Lk5hdGl2ZUV2ZW50c1t0eXBlXSkgPyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBh
cmd1bWVudHNbMl0pIDogdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50
cyl7XG5cdFx0Zm9yICh2YXIgZXZlbnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBl
dmVudHNbZXZlbnRdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6
IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMp
ID09ICdvYmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZl
bnQodHlwZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2
YXIgYXR0YWNoZWQgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVk
KSByZXR1cm4gdGhpcztcblx0XHRpZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0
YWNoZWQpIHRoaXMucmVtb3ZlRXZlbnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2
ZW50cycpO1xuXHRcdH0gZWxzZSBpZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hl
ZFtldmVudHNdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZl
bnQoZXZlbnRzLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtl
dmVudHNdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1
bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2
ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRo
aXM7XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0u
a2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXks
IHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0
aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24o
ZnJvbSwgdHlwZSl7XG5cdFx0ZnJvbSA9IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVu
dHMgPSBmcm9tLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRo
aXM7XG5cdFx0aWYgKCF0eXBlKXtcblx0XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMp
IHRoaXMuY2xvbmVFdmVudHMoZnJvbSwgZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50
c1t0eXBlXSl7XG5cdFx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0
XHRcdFx0dGhpcy5hZGRFdmVudCh0eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xu
XHRjbGljazogMiwgZGJsY2xpY2s6IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4
dG1lbnU6IDIsIC8vbW91c2UgYnV0dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9N
TW91c2VTY3JvbGw6IDIsIC8vbW91c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDog
MiwgbW91c2Vtb3ZlOiAyLCBzZWxlY3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1v
dmVtZW50XG5cdGtleWRvd246IDIsIGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxu
XHRvcmllbnRhdGlvbmNoYW5nZTogMiwgLy8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNo
bW92ZTogMiwgdG91Y2hlbmQ6IDIsIHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJl
c3RhcnQ6IDIsIGdlc3R1cmVjaGFuZ2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0
Zm9jdXM6IDIsIGJsdXI6IDIsIGNoYW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0
OiAyLCBwYXN0ZTogMiwgaW5wdXQ6IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxv
YWQ6IDEsIGJlZm9yZXVubG9hZDogMiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9h
ZGVkOiAxLCByZWFkeXN0YXRlY2hhbmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBw
b3BzdGF0ZTogMiwgcGFnZXNob3c6IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9y
OiAxLCBhYm9ydDogMSwgc2Nyb2xsOiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVu
dC5FdmVudHMgPSB7XG5cdG1vdXNld2hlZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9j
dW1lbnQgPyAnd2hlZWwnIDogJ29ubW91c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVl
bCcgOiAnRE9NTW91c2VTY3JvbGwnXG5cdH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2
ZW50KXtcblx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRl
ZCA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5c
dHJldHVybiAocmVsYXRlZCAhPSB0aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5
cGVPZih0aGlzKSAhPSAnZG9jdW1lbnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07
XG5cbmlmICgnb25tb3VzZWVudGVyJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRF
bGVtZW50Lk5hdGl2ZUV2ZW50cy5tb3VzZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91
c2VsZWF2ZSA9IDI7XG5cdEVsZW1lbnQuTW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Ug
e1xuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXIn
LFxuXHRcdGNvbmRpdGlvbjogY2hlY2tcblx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxl
YXZlID0ge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9
O1xufVxuXG4vKjxsdElFOT4qL1xuaWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVs
ZW1lbnQuTmF0aXZlRXZlbnRzLnByb3BlcnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMu
Y2hhbmdlID0ge1xuXHRcdGJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMu
dHlwZTtcblx0XHRcdHJldHVybiAodGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUg
PT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAn
Y2hhbmdlJztcblx0XHR9LFxuXHRcdGNvbmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0
cmV0dXJuIGV2ZW50LnR5cGUgIT0gJ3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9w
ZXJ0eU5hbWUgPT0gJ2NoZWNrZWQnO1xuXHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5c
blxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3Jp
cHRpb246IEV4dGVuZHMgdGhlIEVsZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBk
ZWxlZ2F0ZSBtZXRob2QgZm9yIG1vcmUgZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5c
bnByb3ZpZGVzOiBbRWxlbWVudC5EZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigp
e1xuXG52YXIgZXZlbnRMaXN0ZW5lclN1cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVy
O1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMu
Zm9jdXNvdXQgPSAyO1xuXG52YXIgYnViYmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4s
IGV2ZW50LCB0YXJnZXQpe1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0
XHRpZiAobWF0Y2godGFyZ2V0LCBldmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQs
IHRhcmdldCk7XG5cdFx0dGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xu
XHR9XG59O1xuXG52YXIgbWFwID0ge1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNl
b3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRt
b3VzZWxlYXZlOiB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1l
bnQuTW91c2VlbnRlckNoZWNrXG5cdH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyAr
IChldmVudExpc3RlbmVyU3VwcG9ydCA/ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxu
XHR9LFxuXHRibHVyOiB7XG5cdFx0YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicg
OiAnZm9jdXNvdXQnLFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9c
bnZhciBfa2V5ID0gJyRkZWxlZ2F0aW9uOic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24o
dHlwZSl7XG5cblx0cmV0dXJuIHtcblxuXHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92
ZTogZnVuY3Rpb24oc2VsZiwgdWlkKXtcblx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShf
a2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxp
c3QuZm9ybXMpIGZvciAodmFyIGkgPSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRc
dC8vIHRoZSBmb3JtIG1heSBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRo
ZVxuXHRcdFx0XHQvLyByZW1vdmVFdmVudCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRo
ZSBldmVudCB3YXNcblx0XHRcdFx0Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlz
dC5mb3Jtc1tpXS5yZW1vdmVFdmVudCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBs
aXN0LmZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2Vs
ZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFy
Z2V0LmdldCgndGFnJykgPT0gJ2Zvcm0nKSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJl
bnQoJ2Zvcm0nKTtcblx0XHRcdGlmICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVu
ZXJzID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0
XHRcdGxpc3RlbmVyID0gbGlzdGVuZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5c
dFx0XHRcdGZvcm1zID0gbGlzdGVuZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRc
dFx0aWYgKGZvcm1zLmluZGV4T2YoZm9ybSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1
c2goZm9ybSk7XG5cblx0XHRcdHZhciBfZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1
YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0
Zm9ybS5hZGRFdmVudCh0eXBlLCBfZm4pO1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0
bGlzdGVuZXJzW3VpZF0gPSBsaXN0ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUg
KyAnbGlzdGVuZXJzJywgbGlzdGVuZXJzKTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRP
YnNlcnZlciA9IGZ1bmN0aW9uKHR5cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2lu
Jyxcblx0XHRsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7
XG5cdFx0XHR2YXIgZXZlbnRzID0ge2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVt
b3ZlRXZlbnRzKGV2ZW50cyk7XG5cdFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0
aW9uKGV2ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFy
Z2V0KTtcblx0XHRcdH07XG5cdFx0XHRldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5c
dFx0fVxuXHR9O1xufTtcblxuaWYgKCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVu
ZChtYXAsIHtcblx0c3VibWl0OiBmb3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9y
bU9ic2VydmVyKCdyZXNldCcpLFxuXHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxu
XHRzZWxlY3Q6IGlucHV0T2JzZXJ2ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52
YXIgcHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVu
dCxcblx0cmVtb3ZlRXZlbnQgPSBwcm90by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVu
Y3Rpb24ob2xkLCBtZXRob2Qpe1xuXHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1
cmUpe1xuXHRcdGlmICh0eXBlLmluZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNh
bGwodGhpcywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5w
YXJzZSh0eXBlKS5leHByZXNzaW9uc1swXVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0u
a2V5ICE9ICdyZWxheScpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVy
ZSk7XG5cdFx0dmFyIG5ld1R5cGUgPSBwYXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNs
aWNlKDEpLmVhY2goZnVuY3Rpb24ocHNldWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNl
dWRvLmtleSArIChwc2V1ZG8udmFsdWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7
XG5cdFx0fSk7XG5cdFx0b2xkLmNhbGwodGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRo
b2QuY2FsbCh0aGlzLCBuZXdUeXBlLCBwYXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9
O1xufTtcblxudmFyIGRlbGVnYXRpb24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUs
IG1hdGNoLCBmbil7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVz
Jywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFy
IF91aWQgaW4gc3RvcmVkKXtcblx0XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3Rv
cmVkW191aWRdLm1hdGNoID09IG1hdGNoKSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIg
X3R5cGUgPSB0eXBlLCBfbWF0Y2ggPSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0g
fHwge307XG5cdFx0dHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVu
Y3Rpb24odGFyZ2V0KXtcblx0XHRcdHJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7
XG5cdFx0fTtcblxuXHRcdHZhciBlbGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07
XG5cdFx0aWYgKF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQu
Y29uZGl0aW9uKXtcblx0XHRcdHZhciBfX21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAu
Y29uZGl0aW9uIHx8IGVsZW1lbnRFdmVudC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0
aW9uKHRhcmdldCwgZXZlbnQpe1xuXHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50
KSAmJiBjb25kaXRpb24uY2FsbCh0YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0
fVxuXG5cdFx0dmFyIHNlbGYgPSB0aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2
YXIgZGVsZWdhdG9yID0gX21hcC5saXN0ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0
XHRcdGlmICghdGFyZ2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQu
dGFyZ2V0O1xuXHRcdFx0aWYgKHRhcmdldCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBl
dmVudCwgdGFyZ2V0LCB1aWQpO1xuXHRcdH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0
XHRcdGlmICghdGFyZ2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQu
dGFyZ2V0O1xuXHRcdFx0aWYgKHRhcmdldCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVu
dCwgdGFyZ2V0KTtcblx0XHR9O1xuXG5cdFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRc
dHN0b3JlZFt1aWRdID0ge1xuXHRcdFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5c
dFx0XHRkZWxlZ2F0b3I6IGRlbGVnYXRvclxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBz
dG9yZWQ7XG5cdFx0cmV0dXJuIGFkZEV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBf
bWFwLmNhcHR1cmUpO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRj
aCwgZm4sIF91aWQpe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRl
cycsIHt9KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJu
IHRoaXM7XG5cblx0XHRpZiAoX3VpZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0
b3IgPSBzdG9yZWRbX3VpZF0uZGVsZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRc
dFx0dHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21h
cC5yZW1vdmUodGhpcywgX3VpZCk7XG5cdFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0
c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0
aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9f
dWlkLCBzO1xuXHRcdGlmIChmbikgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0
b3JlZFtfX3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSBy
ZXR1cm4gZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwg
X191aWQpO1xuXHRcdH0gZWxzZSBmb3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3Rv
cmVkW19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92
ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmlu
dm9rZSgnaW1wbGVtZW50Jywge1xuXHRhZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRp
b24uYWRkRXZlbnQpLFxuXHRyZW1vdmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRp
b24ucmVtb3ZlRXZlbnQpXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50
LlN0eWxlXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3
aXRoIHRoZSBzdHlsZXMgb2YgRWxlbWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczog
RWxlbWVudC5TdHlsZVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRv
Y3VtZW50Lmh0bWwsIGVsO1xuXG4vLzxsdElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2gg
ZG9lcyBub3QgcmVtb3ZlIHN0eWxlcyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwu
c3R5bGUuY29sb3IgPSBudWxsO1xudmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5j
b2xvciA9PSAncmVkJztcblxuLy8gY2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRl
ciogc2hvcnRoYW5kIHN0eWxlcyBpbiB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxl
IGluc3RlYWQgb2Ygd2lkdGgtc3R5bGUtY29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAj
MTIzYWJjJztcbmVsLnN0eWxlLmJvcmRlciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0lu
V3JvbmdPcmRlciA9IGVsLnN0eWxlLmJvcmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwv
bHRJRTk+XG5cbnZhciBoYXNHZXRDb21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRT
dHlsZSxcblx0c3VwcG9ydEJvcmRlclJhZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpLnN0eWxlLmJvcmRlclJhZGl1cyAhPSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5
bGVzID0ge3NldDogZnVuY3Rpb24oc3R5bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtc
bn19O1xuXG52YXIgaGFzT3BhY2l0eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5c
dGhhc0ZpbHRlciA9IChodG1sLnN0eWxlLmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9h
bHBoYVxcKG9wYWNpdHk9KFtcXGQuXSspXFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVu
Y3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3Bh
Y2l0eSk7XG5cdGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNp
dHkgPT0gbnVsbCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIg
c2V0RmlsdGVyID0gZnVuY3Rpb24oZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHls
ZSA9IGVsZW1lbnQuc3R5bGUsXG5cdFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQu
Z2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdl
eHAudGVzdChmaWx0ZXIpID8gZmlsdGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIg
KyAnICcgKyB2YWx1ZSkudHJpbSgpO1xuXHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3Zl
QXR0cmlidXRlKCdmaWx0ZXInKTtcbn07XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0g
KGhhc09wYWNpdHkgPyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHls
ZS5vcGFjaXR5ID0gb3BhY2l0eTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwg
b3BhY2l0eSl7XG5cdGlmICghZWxlbWVudC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVu
dFN0eWxlLmhhc0xheW91dCkgZWxlbWVudC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkg
PT0gbnVsbCB8fCBvcGFjaXR5ID09IDEpe1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhh
LCAnJyk7XG5cdFx0aWYgKG9wYWNpdHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEp
IHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0g
ZWxzZSB7XG5cdFx0c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScg
KyAob3BhY2l0eSAqIDEwMCkubGltaXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6
IHNldFZpc2liaWxpdHkpKTtcblxudmFyIGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0
aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBl
bGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09
ICcnKSA/IDEgOiBvcGFjaXR5LnRvRmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24o
ZWxlbWVudCl7XG5cdHZhciBmaWx0ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVu
dC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRl
cikgb3BhY2l0eSA9IGZpbHRlci5tYXRjaChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09
IG51bGwgfHwgZmlsdGVyID09IG51bGwpID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBm
dW5jdGlvbihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3Bh
Y2l0eScpO1xuXHRpZiAob3BhY2l0eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUu
dmlzaWJpbGl0eSA9PSAnaGlkZGVuJyA/IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7
XG5cbnZhciBmbG9hdE5hbWUgPSAoaHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHls
ZUZsb2F0JyA6ICdjc3NGbG9hdCcsXG5cdG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRv
cDogJzAlJywgY2VudGVyOiAnNTAlJywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxu
XHRoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlv
blggIT0gbnVsbCksXG5cdHByZWZpeFBhdHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENh
c2UgPSBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZp
eFBhdHRlcm4sICckMS0nKS5jYW1lbENhc2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92
ZVN0eWxlID0gZnVuY3Rpb24oc3R5bGUsIHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdi
YWNrZ3JvdW5kUG9zaXRpb24nKXtcblx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkg
KyAnWCcpO1xuXHRcdHByb3BlcnR5ICs9ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1
dGUocHJvcGVydHkpO1xufTtcbi8vPC9sdElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dGdldENvbXB1dGVkU3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENv
bXB1dGVkU3R5bGUgJiYgdGhpcy5jdXJyZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHls
ZVtjYW1lbENhc2UocHJvcGVydHkpXTtcblx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50Lmdl
dERvY3VtZW50KHRoaXMpLmRlZmF1bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0Vmll
dyA/IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRc
dHJldHVybiAoY29tcHV0ZWQpID8gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkg
PT0gZmxvYXROYW1lKSA/ICdmbG9hdCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0
fSxcblxuXHRzZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJv
cGVydHkgPT0gJ29wYWNpdHknKXtcblx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBh
cnNlRmxvYXQodmFsdWUpO1xuXHRcdFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRy
ZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0g
J2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAh
PSAnc3RyaW5nJyl7XG5cdFx0XHR2YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8
fCAnQCcpLnNwbGl0KCcgJyk7XG5cdFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1h
cChmdW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRc
dFx0XHRyZXR1cm4gKHR5cGVPZih2YWwpID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdA
JywgTWF0aC5yb3VuZCh2YWwpKSA6IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVs
c2UgaWYgKHZhbHVlID09IFN0cmluZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1h
dGgucm91bmQodmFsdWUpO1xuXHRcdH1cblx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVl
O1xuXHRcdC8vPGx0SUU5PlxuXHRcdGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkg
JiYgZG9lc05vdFJlbW92ZVN0eWxlcyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5c
dFx0XHRyZW1vdmVTdHlsZSh0aGlzLnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9s
dElFOT5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJv
cGVydHkpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5
KHRoaXMpO1xuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBm
bG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJv
cGVydHkuaW5kZXhPZignYm9yZGVyUmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9y
ZGVyVG9wTGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21S
aWdodFJhZGl1cycsICdib3JkZXJCb3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5l
cil7XG5cdFx0XHRcdHJldHVybiB0aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9
LCB0aGlzKS5qb2luKCcgJyk7XG5cdFx0fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3By
b3BlcnR5XTtcblx0XHRpZiAoIXJlc3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0
XHRpZiAoRWxlbWVudC5TaG9ydFN0eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRc
dFx0XHRyZXN1bHQgPSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5
bGVzW3Byb3BlcnR5XSkgcmVzdWx0LnB1c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJl
dHVybiByZXN1bHQuam9pbignICcpO1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRD
b21wdXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3Np
dGlvblhZICYmIC9eYmFja2dyb3VuZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5c
dFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1
bmN0aW9uKHBvc2l0aW9uKXtcblx0XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9u
XTtcblx0XHRcdH0pIHx8ICcwcHgnO1xuXHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0
eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9uJykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVz
dWx0KXtcblx0XHRcdHJlc3VsdCA9IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0g
cmVzdWx0Lm1hdGNoKC9yZ2JhP1xcKFtcXGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikg
cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xu
XHRcdH1cblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVy
dHldKXtcblx0XHRcdGlmICgoL14oaGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAh
KC9weCQvLnRlc3QocmVzdWx0KSkpe1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09
ICd3aWR0aCcpID8gWydsZWZ0JywgJ3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9
IDA7XG5cdFx0XHRcdHZhbHVlcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXpl
ICs9IHRoaXMuZ2V0U3R5bGUoJ2JvcmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSAr
IHRoaXMuZ2V0U3R5bGUoJ3BhZGRpbmctJyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0
aGlzKTtcblx0XHRcdFx0cmV0dXJuIHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXpl
KCldIC0gc2l6ZSArICdweCc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRo
fG1hcmdpbnxwYWRkaW5nLykudGVzdChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1
bHQpKSl7XG5cdFx0XHRcdHJldHVybiAnMHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJ
RTk+XG5cdFx0aWYgKHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxS
aWdodHxCb3R0b218TGVmdCk/JC8udGVzdChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkp
e1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICck
MiAkMyAkMScpO1xuXHRcdH1cblx0XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xu
XHR9LFxuXG5cdHNldFN0eWxlczogZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHls
ZSBpbiBzdHlsZXMpIHRoaXMuc2V0U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVz
dWx0ID0ge307XG5cdFx0QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5
KXtcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMp
O1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xu
XHRsZWZ0OiAnQHB4JywgdG9wOiAnQHB4JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxu
XHR3aWR0aDogJ0BweCcsIGhlaWdodDogJ0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0
OiAnQHB4JywgbWluV2lkdGg6ICdAcHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5k
Q29sb3I6ICdyZ2IoQCwgQCwgQCknLCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQ
b3NpdGlvbjogJ0BweCBAcHgnLCBjb2xvcjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAn
QHB4JywgbGV0dGVyU3BhY2luZzogJ0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVj
dChAcHggQHB4IEBweCBAcHgpJyxcblx0bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGlu
ZzogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCBy
Z2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4
IEBweCBAcHgnLCBib3JkZXJTdHlsZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBA
LCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDog
J0AnLCAnem9vbSc6ICdAJywgZm9udFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3Bh
Y2l0eTogJ0AnLCBib3JkZXJSYWRpdXM6ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5c
bkVsZW1lbnQuU2hvcnRTdHlsZXMgPSB7bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjog
e30sIGJvcmRlcldpZHRoOiB7fSwgYm9yZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xu
XG5bJ1RvcCcsICdSaWdodCcsICdCb3R0b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0
aW9uKXtcblx0dmFyIFNob3J0ID0gRWxlbWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVs
ZW1lbnQuU3R5bGVzO1xuXHRbJ21hcmdpbicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHls
ZSl7XG5cdFx0dmFyIHNkID0gc3R5bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3Nk
XSA9IEFsbFtzZF0gPSAnQHB4Jztcblx0fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0
aW9uO1xuXHRTaG9ydC5ib3JkZXJbYmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCkn
O1xuXHR2YXIgYmR3ID0gYmQgKyAnV2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJk
ICsgJ0NvbG9yJztcblx0U2hvcnRbYmRdID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10g
PSBTaG9ydFtiZF1bYmR3XSA9IEFsbFtiZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxl
W2Jkc10gPSBTaG9ydFtiZF1bYmRzXSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJD
b2xvcltiZGNdID0gU2hvcnRbYmRdW2JkY10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xu
fSk7XG5cbmlmIChoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5i
YWNrZ3JvdW5kUG9zaXRpb24gPSB7YmFja2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5k
UG9zaXRpb25ZOiAnQCd9O1xufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVu
c2lvbnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUs
IHNjcm9sbCwgb3IgcG9zaXRpb25pbmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50
IHBvc2l0aW9uaW5nIGJhc2VkIG9uIHRoZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykg
Y29kZSBhbmQgc21hcnQgYnJvd3NlciBmaXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5n
bnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNl
ZCBvbiBbWVVJXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExp
Y2Vuc2VdKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5y
ZXF1aXJlczogW0VsZW1lbnQsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5E
aW1lbnNpb25zXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpO1xuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVu
ZENoaWxkKGNoaWxkKTtcbnZhciBicm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFy
ZW50ID09PSBlbGVtZW50KTtcbmVsZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRD
b21wb25lbnRzID0gWydoZWlnaHQnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2Jv
cmRlclRvcFdpZHRoJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9
IFsnd2lkdGgnLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0
aCcsICdib3JkZXJSaWdodFdpZHRoJ107XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rp
b24oZWwpe1xuXG5cdHZhciBnQ1MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0
Ym91bmRzID0ge3g6IDAsIHk6IDB9O1xuXG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlv
bihjc3Mpe1xuXHRcdGJvdW5kcy55ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0
d2lkdGhDb21wb25lbnRzLmVhY2goZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJz
ZUZsb2F0KGdDU1tjc3NdKTtcblx0fSk7XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNP
ZmZzZXQgPSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9u
JykgIT0gJ3N0YXRpYycgfHwgaXNCb2R5KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9
IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0
aCkkL2kpLnRlc3QoZWwudGFnTmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0
c2Nyb2xsVG86IGZ1bmN0aW9uKHgsIHkpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0
dGhpcy5nZXRXaW5kb3coKS5zY3JvbGxUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhp
cy5zY3JvbGxMZWZ0ID0geDtcblx0XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNC
b2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxs
dElFOT5cblx0XHQvLyBUaGlzIGlmIGNsYXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1
bGF0ZSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhp
ZGRlbi5cblx0XHRpZiAoIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMu
b2Zmc2V0V2lkdGgsIHk6IHRoaXMub2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0
XHQvLyBUaGlzIHN2ZyBzZWN0aW9uIHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClg
LCBjYW4gYmUgcmVtb3ZlZCB3aGVuIEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8g
QnVnIGluZm86IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUz
MDk4NVxuXHRcdGlmICh0aGlzLmdldCgndGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxh
dGVTaXplKHRoaXMpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJv
dW5kcy5oZWlnaHR9O1xuXHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAw
fTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAo
aXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5c
dFx0cmV0dXJuIHt4OiB0aGlzLnNjcm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5c
dH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJl
dHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5z
Y3JvbGxMZWZ0LCB5OiB0aGlzLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7
eDogMCwgeTogMH07XG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5c
dFx0XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkg
Kz0gZWxlbWVudC5zY3JvbGxUb3A7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2Rl
O1xuXHRcdH1cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50
OiBicm9rZW5PZmZzZXRQYXJlbnQgPyBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhp
cztcblx0XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3Np
dGlvbicpID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sg
PSAoc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZz
ZXRTdGF0aWMgOiBpc09mZnNldDtcblx0XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVu
dE5vZGUpKXtcblx0XHRcdGlmIChpc09mZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVu
dDtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBl
bGVtZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVs
ZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtc
blx0XHRcdHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5c
dFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2
YXIgaGFzR2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7
XG5cblx0XHRpZiAoaGFzR2V0Qm91bmRpbmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9
IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5p
ZCh0aGlzLmdldERvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9s
bCA9IGh0bWwuZ2V0U2Nyb2xsKCksXG5cdFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3Jv
bGxzKCksXG5cdFx0XHRcdGlzRml4ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykg
PT0gJ2ZpeGVkJyk7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9G
bG9hdCgpICsgZWxlbVNjcm9sbHMueCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAt
IGh0bWwuY2xpZW50TGVmdCxcblx0XHRcdFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1T
Y3JvbGxzLnkgKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRv
cFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0g
e3g6IDAsIHk6IDB9O1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxu
XHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24u
eCArPSBlbGVtZW50Lm9mZnNldExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zm
c2V0VG9wO1xuXG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxu
XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihy
ZWxhdGl2ZSl7XG5cdFx0dmFyIG9mZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Ny
b2xsID0gdGhpcy5nZXRTY3JvbGxzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDog
b2Zmc2V0LnggLSBzY3JvbGwueCxcblx0XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9
O1xuXG5cdFx0aWYgKHJlbGF0aXZlICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZl
KSkpe1xuXHRcdFx0dmFyIHJlbGF0aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigp
O1xuXHRcdFx0cmV0dXJuIHt4OiBwb3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVm
dEJvcmRlcihyZWxhdGl2ZSksIHk6IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0
b3BCb3JkZXIocmVsYXRpdmUpfTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxu
XG5cdGdldENvb3JkaW5hdGVzOiBmdW5jdGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRo
aXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBw
b3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5n
ZXRTaXplKCk7XG5cdFx0dmFyIG9iaiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0
XHR0b3A6IHBvc2l0aW9uLnksXG5cdFx0XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBz
aXplLnlcblx0XHR9O1xuXHRcdG9iai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRc
dG9iai5ib3R0b20gPSBvYmoudG9wICsgb2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9
LFxuXG5cdGNvbXB1dGVQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRc
dFx0bGVmdDogb2JqLnggLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRc
dHRvcDogb2JqLnkgLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0
fSxcblxuXHRzZXRQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRT
dHlsZXModGhpcy5jb21wdXRlUG9zaXRpb24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3Vt
ZW50LCBXaW5kb3ddLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4
OiBkb2MuY2xpZW50V2lkdGgsIHk6IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNj
cm9sbDogZnVuY3Rpb24oKXtcblx0XHR2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0g
Z2V0Q29tcGF0RWxlbWVudCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8
fCBkb2Muc2Nyb2xsTGVmdCwgeTogd2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xu
XHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENv
bXBhdEVsZW1lbnQodGhpcyksXG5cdFx0XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJv
ZHkgPSB0aGlzLmdldERvY3VtZW50KCkuYm9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgo
ZG9jLnNjcm9sbFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRv
Yy5zY3JvbGxIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdl
dFBvc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5c
blx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNp
emUoKTtcblx0XHRyZXR1cm4ge3RvcDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0
OiBzaXplLngsIGhlaWdodDogc2l6ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxu
Ly8gcHJpdmF0ZSBtZXRob2RzXG5cbnZhciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0
ZWRTdHlsZTtcblxuZnVuY3Rpb24gc3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1
cm4gc3R5bGVTdHJpbmcoZWxlbWVudCwgc3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1
bmN0aW9uIHRvcEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQs
ICdib3JkZXItdG9wLXdpZHRoJyk7XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7
XG5cdHJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1c
blxuZnVuY3Rpb24gaXNCb2R5KGVsZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQv
aSkudGVzdChlbGVtZW50LnRhZ05hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50
KGVsZW1lbnQpe1xuXHR2YXIgZG9jID0gZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4g
KCFkb2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9j
Lmh0bWwgOiBkb2MuYm9keTtcbn1cblxufSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFz
KHtwb3NpdGlvbjogJ3NldFBvc2l0aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywg
RG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRX
aWR0aDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxu
XHRnZXRTY3JvbGxUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCku
eTtcblx0fSxcblxuXHRnZXRTY3JvbGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LmdldFNjcm9sbCgpLng7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdp
ZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9
LFxuXG5cdGdldFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigp
Lnk7XG5cdH0sXG5cblx0Z2V0TGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQ
b3NpdGlvbigpLng7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIHRoZSBiYXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQg
YnkgYWxsIG90aGVyIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5w
cm92aWRlczogRnhcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5G
eCA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMs
IENsYXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBu
aWwsXG5cdFx0b25DYW5jZWw6IG5pbCxcblx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0
XHRmcHM6IDYwLFxuXHRcdHVuaXQ6IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJh
bWVzOiBudWxsLFxuXHRcdGZyYW1lU2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9
LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9
IHRoaXMuc3ViamVjdCB8fCB0aGlzO1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0
fSxcblxuXHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihw
KXtcblx0XHRcdHJldHVybiAtKE1hdGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9
O1xuXHR9LFxuXG5cdHN0ZXA6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5m
cmFtZVNraXApe1xuXHRcdFx0dmFyIGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAt
IHRoaXMudGltZSkgOiAwLCBmcmFtZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRc
dFx0dGhpcy50aW1lID0gbm93O1xuXHRcdFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBl
bHNlIHtcblx0XHRcdHRoaXMuZnJhbWUrKztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8
IHRoaXMuZnJhbWVzKXtcblx0XHRcdHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZy
YW1lIC8gdGhpcy5mcmFtZXMpO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJv
bSwgdGhpcy50bywgZGVsdGEpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRo
aXMuZnJhbWVzO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50
bywgMSkpO1xuXHRcdFx0dGhpcy5zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rp
b24obm93KXtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZy
b20sIHRvLCBkZWx0YSl7XG5cdFx0cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtc
blx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkp
IHJldHVybiB0cnVlO1xuXHRcdHN3aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2Fz
ZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFp
bic6IHRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJu
IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0
aW9uKGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhp
cztcblx0XHR0aGlzLmZyb20gPSBmcm9tO1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZy
YW1lID0gKHRoaXMub3B0aW9ucy5mcmFtZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9
IG51bGw7XG5cdFx0dGhpcy50cmFuc2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0
dmFyIGZyYW1lcyA9IHRoaXMub3B0aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMs
IGR1cmF0aW9uID0gdGhpcy5vcHRpb25zLmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBG
eC5EdXJhdGlvbnNbZHVyYXRpb25dIHx8IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFt
ZUludGVydmFsID0gMTAwMCAvIGZwcztcblx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRo
LnJvdW5kKHRoaXMuZHVyYXRpb24gLyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlz
LmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVu
YWJsZSh0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0
aGlzLnN1YmplY3QpO1xuXHRcdHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1
bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNh
bGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhp
cy5mcmFtZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVj
dCk7XG5cdFx0XHRcdGlmICghdGhpcy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWlu
Q29tcGxldGUnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5m
aXJlRXZlbnQoJ3N0b3AnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNv
bHZlKHRoaXMuc3ViamVjdCA9PT0gdGhpcyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KHRoaXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJ
bnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9
IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVj
dCkuY2xlYXJDaGFpbigpO1xuXHRcdFx0dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KHRoaXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJ
bnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRyZXN1bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVz
ZWQoKSkgcHVzaEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0
ID0gaW5zdGFuY2VzW3RoaXMub3B0aW9ucy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3Qu
Y29udGFpbnModGhpcyk7XG5cdH0sXG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9
XG5cbn0pO1xuXG5GeC5jb21wdXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0
dXJuICh0byAtIGZyb20pICogZGVsdGEgKyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydz
aG9ydCc6IDI1MCwgJ25vcm1hbCc6IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRp
bWVyc1xuXG52YXIgaW5zdGFuY2VzID0ge30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1
bmN0aW9uKCl7XG5cdHZhciBub3cgPSBEYXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5s
ZW5ndGg7IGktLTspe1xuXHRcdHZhciBpbnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3Rh
bmNlKSBpbnN0YW5jZS5zdGVwKG5vdyk7XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBm
dW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNb
ZnBzXSA9IFtdKTtcblx0bGlzdC5wdXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1l
cnNbZnBzXSA9IGxvb3AucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtc
bn07XG5cbnZhciBwdWxsSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGlu
c3RhbmNlc1tmcHNdO1xuXHRpZiAobGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRp
ZiAoIWxpc3QubGVuZ3RoICYmIHRpbWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNb
ZnBzXTtcblx0XHRcdHRpbWVyc1tmcHNdID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5c
dFx0fVxuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgdGhlIENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdl
ZW4sIEZ4Lk1vcnBoLCBGeC5FbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbRngsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1Ncblxu
Li4uXG4qL1xuXG5GeC5DU1MgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8v
cHJlcGFyZXMgdGhlIGJhc2UgZnJvbS90byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihl
bGVtZW50LCBwcm9wZXJ0eSwgdmFsdWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZh
bHVlcyk7XG5cdFx0dmFyIGZyb20gPSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlm
ICh0byA9PSBudWxsKXtcblx0XHRcdHRvID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50Lmdl
dFN0eWxlKHByb3BlcnR5KTtcblx0XHRcdHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5c
dFx0XHQvLyBhZGFwdGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9i
L21hc3Rlci9meC5qcyNMMjk5XG5cdFx0XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9t
ID09ICdzdHJpbmcnICYmIGZyb20uc2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNl
RmxvYXQoZnJvbSkgIT0gMCl7XG5cdFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRv
ICsgdW5pdCk7XG5cdFx0XHRcdHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShw
cm9wZXJ0eSk7XG5cdFx0XHRcdC8vIElFIGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBw
aXhlbFdpZHRoXG5cdFx0XHRcdGlmICghKC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0
dmFsdWUgPSBlbGVtZW50LnN0eWxlWygncGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07
XG5cdFx0XHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBm
cm9tIERlYW4gRWR3YXJkcycgaHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3
LzE4LjU0LjE1LyNjb21tZW50LTEwMjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50
LnN0eWxlLmxlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7
XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRc
dFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0
XHRcdFx0ZnJvbSA9ICh0byB8fCAxKSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJz
ZUZsb2F0KGZyb20pIHx8IDApO1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBm
cm9tICsgdW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJz
ZShmcm9tKSwgdG86IHRoaXMucGFyc2UodG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVl
IGludG8gYW4gYXJyYXlcblxuXHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0g
RnVuY3Rpb24uY29udmVydCh2YWx1ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0g
J3N0cmluZycpID8gdmFsdWUuc3BsaXQoJyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRc
dHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwp
O1xuXHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFy
c2VycywgZnVuY3Rpb24ocGFyc2VyKXtcblx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0
XHRcdHZhciBwYXJzZWQgPSBwYXJzZXIucGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8
fCBwYXJzZWQgPT09IDApIGZvdW5kID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtc
blx0XHRcdH0pO1xuXHRcdFx0Zm91bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBG
eC5DU1MuUGFyc2Vycy5TdHJpbmd9O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9
LFxuXG5cdC8vY29tcHV0ZXMgYnkgYSBmcm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2lu
ZyB0aGVpciBwYXJzZXJzLlxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7
XG5cdFx0dmFyIGNvbXB1dGVkID0gW107XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5s
ZW5ndGgpKS50aW1lcyhmdW5jdGlvbihpKXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBm
cm9tW2ldLnBhcnNlci5jb21wdXRlKGZyb21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSks
IHBhcnNlcjogZnJvbVtpXS5wYXJzZXJ9KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5
ID0gRnVuY3Rpb24uY29udmVydCgnZng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVk
O1xuXHR9LFxuXG5cdC8vc2VydmVzIHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBm
dW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2
YWx1ZScpIHZhbHVlID0gdGhpcy5wYXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107
XG5cdFx0dmFsdWUuZWFjaChmdW5jdGlvbihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5l
ZC5jb25jYXQoYml0LnBhcnNlci5zZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0
XHRyZXR1cm4gcmV0dXJuZWQ7XG5cdH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4g
ZWxlbWVudFxuXG5cdHJlbmRlcjogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1
bml0KXtcblx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1
bml0KSk7XG5cdH0sXG5cblx0Ly9zZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQg
dGhlIHZhbHVlcyBmb3IgYSBzZWxlY3RvclxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ip
e1xuXHRcdGlmIChGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3Nl
bGVjdG9yXTtcblx0XHR2YXIgdG8gPSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicg
KyBzZWxlY3Rvci5lc2NhcGVSZWdFeHAoKSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVz
ID0gZnVuY3Rpb24ocnVsZXMpe1xuXHRcdFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVs
ZSl7XG5cdFx0XHRcdGlmIChydWxlLm1lZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVs
ZS5ydWxlcyB8fCBydWxlLmNzc1J1bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1c
blx0XHRcdFx0aWYgKCFydWxlLnN0eWxlKSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRl
eHQgPSAocnVsZS5zZWxlY3RvclRleHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxc
dysvLCBmdW5jdGlvbihtKXtcblx0XHRcdFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRc
dFx0XHR9KSA6IG51bGw7XG5cdFx0XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRl
c3QudGVzdChzZWxlY3RvclRleHQpKSByZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1l
bnQuU3R5bGVzLCBmdW5jdGlvbih2YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5z
dHlsZVtzdHlsZV0gfHwgRWxlbWVudC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRc
dFx0XHR2YWx1ZSA9IFN0cmluZyhydWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5
bGVdID0gKCgvXnJnYi8pLnRlc3QodmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtc
blx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVu
dC5zdHlsZVNoZWV0cywgZnVuY3Rpb24oc2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5o
cmVmO1xuXHRcdFx0aWYgKGhyZWYgJiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYu
aW5kZXhPZihkb2N1bWVudC5kb21haW4pID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMg
PSBzaGVldC5ydWxlcyB8fCBzaGVldC5jc3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxl
cyk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0
fVxuXG59KTtcblxuRnguQ1NTLkNhY2hlID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5c
dENvbG9yOiB7XG5cdFx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5t
YXRjaCgvXiNbMC05YS1mXXszLDZ9JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xu
XHRcdFx0cmV0dXJuICgodmFsdWUgPSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxz
KihcXGQrKS8pKSkgPyBbdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0
XHR9LFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1
cm4gZnJvbS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3Vu
ZChGeC5jb21wdXRlKGZyb21baV0sIHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxc
blx0XHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1i
ZXIpO1xuXHRcdH1cblx0fSxcblxuXHROdW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxc
blx0XHRjb21wdXRlOiBGeC5jb21wdXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5p
dCl7XG5cdFx0XHRyZXR1cm4gKHVuaXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxu
XHR9LFxuXG5cdFN0cmluZzoge1xuXHRcdHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxc
blx0XHRjb21wdXRlOiBmdW5jdGlvbih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0
XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRc
dH1cblx0fVxuXG59O1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlw
dGlvbjogRm9ybWVybHkgRnguU3R5bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVy
IG9mIENTUyBwcm9wZXJ0aWVzIGZvciBhbiBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxl
cywgb3IgQ1NTIGJhc2VkIHNlbGVjdG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4q
L1xuXG5GeC5Nb3JwaCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGlu
aXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9
IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9w
dGlvbnMpO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5v
dyA9PSAnc3RyaW5nJykgbm93ID0gdGhpcy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGlu
IG5vdykgdGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51
bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9t
LCB0bywgZGVsdGEpe1xuXHRcdHZhciBub3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20p
IG5vd1twXSA9IHRoaXMucGFyZW50KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJu
IG5vdztcblx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0
aGlzLmNoZWNrKHByb3BlcnRpZXMpKSByZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3Bl
cnRpZXMgPT0gJ3N0cmluZycpIHByb3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtc
blx0XHR2YXIgZnJvbSA9IHt9LCB0byA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGll
cyl7XG5cdFx0XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJv
cGVydGllc1twXSk7XG5cdFx0XHRmcm9tW3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9
IHBhcnNlZC50bztcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0
fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rp
b24ob3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhv
cHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIG1vcnBoID0gdGhpcy5yZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtc
blx0XHRcdG1vcnBoID0gbmV3IEZ4Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRc
dFx0dGhpcy5zdG9yZSgnbW9ycGgnLCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtc
blx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHBy
b3BzKXtcblx0XHR0aGlzLmdldCgnbW9ycGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVz
Y3JpcHRpb246IENvbnRhaW5zIGEgc2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVz
ZWQgd2l0aCBhbnkgb2YgdGhlIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5jcmVkaXRzOlxuICAtIEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwg
PGh0dHA6Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGlt
aXplZCB0byBiZSB1c2VkIHdpdGggTW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRl
czogRnguVHJhbnNpdGlvbnNcblxuLi4uXG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRy
YW5zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5z
aXRpb24gfHwgRnguVHJhbnNpdGlvbnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0
cmFucyA9PSAnc3RyaW5nJyl7XG5cdFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5c
dFx0XHR0cmFucyA9IEZ4LlRyYW5zaXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBd
XSB8fCB0cmFuc1tkYXRhWzBdLmNhcGl0YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJh
bnMgPSB0cmFuc1snZWFzZScgKyBkYXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0
YVsyXS5jYXBpdGFsaXplKCkgOiAnJyldO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1c
blxufSk7XG5cbkZ4LlRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xu
XHRwYXJhbXMgPSBBcnJheS5jb252ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlv
bihwb3Mpe1xuXHRcdHJldHVybiB0cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0
dXJuIE9iamVjdC5hcHBlbmQoZWFzZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFz
ZU91dDogZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9z
LCBwYXJhbXMpO1xuXHRcdH0sXG5cdFx0ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0
cmV0dXJuIChwb3MgPD0gMC41ID8gdHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0
cmFuc2l0aW9uKDIgKiAoMSAtIHBvcyksIHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07
XG5cbkZ4LlRyYW5zaXRpb25zID0ge1xuXG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0
cmV0dXJuIHplcm87XG5cdH1cblxufTtcblxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1
bmN0aW9uKHRyYW5zaXRpb25zKXtcblx0Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9u
cykgRnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0
aW9uc1t0cmFuc2l0aW9uXSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBv
dzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2
KTtcblx0fSxcblxuXHRFeHBvOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwg
OCAqIChwIC0gMSkpO1xuXHR9LFxuXG5cdENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAx
IC0gTWF0aC5zaW4oTWF0aC5hY29zKHApKTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtc
blx0XHRyZXR1cm4gMSAtIE1hdGguY29zKHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFj
azogZnVuY3Rpb24ocCwgeCl7XG5cdFx0eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1
cm4gTWF0aC5wb3cocCwgMikgKiAoKHggKyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6
IGZ1bmN0aW9uKHApe1xuXHRcdHZhciB2YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7
IDE7IGEgKz0gYiwgYiAvPSAyKXtcblx0XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xu
XHRcdFx0XHR2YWx1ZSA9IGIgKiBiIC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8g
NCwgMik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7
XG5cdH0sXG5cblx0RWxhc3RpYzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93
KDIsIDEwICogLS1wKSAqIE1hdGguY29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8
IDEpIC8gMyk7XG5cdH1cblxufSk7XG5cblsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWlu
dCddLmVhY2goZnVuY3Rpb24odHJhbnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5z
aXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgu
cG93KHAsIGkgKyAyKTtcblx0fSk7XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2Vlblxu
XG5kZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFu
eSBDU1MgcHJvcGVydHkgZm9yIGFuIGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQu
ZmFkZSwgRWxlbWVudC5oaWdobGlnaHRdXG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xh
c3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVt
ZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVu
dC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6
IGZ1bmN0aW9uKHByb3BlcnR5LCBub3cpe1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEp
e1xuXHRcdFx0bm93ID0gcHJvcGVydHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkg
fHwgdGhpcy5vcHRpb25zLnByb3BlcnR5O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVs
ZW1lbnQsIHByb3BlcnR5LCBub3csIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRp
ZiAoIXRoaXMuY2hlY2socHJvcGVydHksIGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFy
IGFyZ3MgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRo
aXMub3B0aW9ucy5wcm9wZXJ0eSB8fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRo
aXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsIHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVy
biB0aGlzLnBhcmVudChwYXJzZWQuZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxl
bWVudC5Qcm9wZXJ0aWVzLnR3ZWVuID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dGhpcy5nZXQoJ3R3ZWVuJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0g
dGhpcy5yZXRyaWV2ZSgndHdlZW4nKTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0g
bmV3IEZ4LlR3ZWVuKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgn
dHdlZW4nLCB0d2Vlbik7XG5cdFx0fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5F
bGVtZW50LmltcGxlbWVudCh7XG5cblx0dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0
byl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRl
ID0gdGhpcy5nZXQoJ3R3ZWVuJyksIG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChh
cmd1bWVudHMpLCB0b2dnbGU7XG5cdFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0
b2dnbGUnO1xuXHRcdHN3aXRjaCAoYXJnc1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9
ICdzdGFydCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9
ICdzdGFydCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2Qg
PSAnc2V0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9
ICdzZXQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0
XHR2YXIgZmxhZyA9IHRoaXMucmV0cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29w
YWNpdHknKSA9PSAxKTtcblx0XHRcdFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sx
XSA9IGZsYWcgPyAwIDogMTtcblx0XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcp
O1xuXHRcdFx0XHR0b2dnbGUgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6
IG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0
ZSgnZmFkZTpmbGFnJyk7XG5cdFx0ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRc
dHZhciB0byA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3Nl
dCcpe1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVu
JyA6ICd2aXNpYmxlJyk7XG5cdFx0fSBlbHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRl
LiRjaGFpbi5sZW5ndGgpe1xuXHRcdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRc
dFx0dGhpcy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRc
dFx0XHR0aGlzLmNhbGxDaGFpbigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0
XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRc
dH0gZWxzZSB7XG5cdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlz
LmVsZW1lbnQuZ2V0U3R5bGUoJ29wYWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1l
bnQuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENo
YWluKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRo
aWdobGlnaHQ6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVu
ZCA9IHRoaXMucmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2Jh
Y2tncm91bmQtY29sb3InKSk7XG5cdFx0XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8g
JyNmZmYnIDogZW5kO1xuXHRcdH1cblx0XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtc
blx0XHR0d2Vlbi5zdGFydCgnYmFja2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4Jywg
ZW5kKS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1j
b2xvcicsIHRoaXMucmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVu
LmNhbGxDaGFpbigpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJm
dWwgYWxsIHB1cnBvc2UgUmVxdWVzdCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBD
aGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlk
ZXM6IFJlcXVlc3RcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVu
Y3Rpb24oKXt9LFxuXHRwcm9ncmVzc1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93
c2VyLlJlcXVlc3QpO1xuXG52YXIgUmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7
XG5cblx0SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxl
XSxcblxuXHRvcHRpb25zOiB7Lypcblx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRv
bkxvYWRzdGFydDogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5j
dGlvbihldmVudCwgeGhyKXt9LFxuXHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRv
bkNhbmNlbDogZnVuY3Rpb24oKXt9LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VU
ZXh0LCByZXNwb25zZVhNTCl7fSxcblx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0
XHRvbkV4Y2VwdGlvbjogZnVuY3Rpb24oaGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1l
b3V0OiBmdW5jdGlvbigpe30sXG5cdFx0dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRc
dHdpdGhDcmVkZW50aWFsczogZmFsc2UsKi9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxu
XHRcdGhlYWRlcnM6IHtcblx0XHRcdCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0
Jyxcblx0XHRcdCdBY2NlcHQnOiAndGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0
aW9uL3htbCwgdGV4dC94bWwsICovKidcblx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZv
cm1hdDogZmFsc2UsXG5cdFx0bWV0aG9kOiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5c
dFx0aXNTdWNjZXNzOiBudWxsLFxuXHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVk
OiB0cnVlLFxuXHRcdGVuY29kaW5nOiAndXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxc
blx0XHRldmFsUmVzcG9uc2U6IGZhbHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTog
ZmFsc2Vcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlz
LnhociA9IG5ldyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9u
cyk7XG5cdFx0dGhpcy5oZWFkZXJzID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0
b25TdGF0ZUNoYW5nZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0
aWYgKHhoci5yZWFkeVN0YXRlICE9IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRo
aXMucnVubmluZyA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5h
dHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRc
dHRoaXMuc3RhdHVzID0gKHN0YXR1cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJp
bmQodGhpcykpO1xuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAo
cHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5
O1xuXHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtc
blx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7
dGV4dDogdGhpcy54aHIucmVzcG9uc2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNl
WE1MfTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3Rh
dHVzKSlcblx0XHRcdHRoaXMuc3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9u
c2UueG1sKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1
Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJl
dHVybiAoc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmlu
ZzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJv
Y2Vzc1NjcmlwdHM6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJl
c3BvbnNlIHx8ICgvKGVjbWF8amF2YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250
ZW50LXR5cGUnKSkpIHJldHVybiBCcm93c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQu
c3RyaXBTY3JpcHRzKHRoaXMub3B0aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2Vz
czogZnVuY3Rpb24odGV4dCwgeG1sKXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NT
Y3JpcHRzKHRleHQpLCB4bWwpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4
bWx9KTtcblx0fSxcblxuXHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZl
bnQoJ2NvbXBsZXRlJywgYXJndW1lbnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMp
LmNhbGxDaGFpbigpO1xuXHR9LFxuXG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5v
bkZhaWx1cmUoKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhp
cy54aHJ9KTtcblx0fSxcblxuXHRvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJl
RXZlbnQoJ2NvbXBsZXRlJykuZmlyZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxu
XG5cdGxvYWRzdGFydDogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fk
c3RhcnQnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9u
KGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhy
XSk7XG5cdH0sXG5cblx0dGltZW91dDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgn
dGltZW91dCcsIHRoaXMueGhyKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcs
IHhocjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZh
bHVlKXtcblx0XHR0aGlzLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRnZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlv
bi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VI
ZWFkZXIobmFtZSk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rp
b24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0
aGlzLm9wdGlvbnMubGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyBy
ZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5w
YXNzKGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBm
YWxzZTtcblx0fSxcblxuXHRzZW5kOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMu
Y2hlY2sob3B0aW9ucykpIHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2Vz
cyA9IHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5y
dW5uaW5nID0gdHJ1ZTtcblxuXHRcdHZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlm
ICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6
IG9wdGlvbnN9O1xuXG5cdFx0dmFyIG9sZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0g
T2JqZWN0LmFwcGVuZCh7ZGF0YTogb2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQu
bWV0aG9kfSwgb3B0aW9ucyk7XG5cdFx0dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0
cmluZyhvcHRpb25zLnVybCksIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7
XG5cblx0XHRzd2l0Y2ggKHR5cGVPZihkYXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0
YSA9IGRvY3VtZW50LmlkKGRhdGEpLnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNl
ICdvYmplY3QnOiBjYXNlICdoYXNoJzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEp
O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3Jt
YXQgPSAnZm9ybWF0PScgKyB0aGlzLm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRh
KSA/IGZvcm1hdCArICcmJyArIGRhdGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMu
b3B0aW9ucy5lbXVsYXRpb24gJiYgIVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtc
blx0XHRcdHZhciBfbWV0aG9kID0gJ19tZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAo
ZGF0YSkgPyBfbWV0aG9kICsgJyYnICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAn
cG9zdCc7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9z
dCcsICdwdXQnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlz
Lm9wdGlvbnMuZW5jb2RpbmcpID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5n
IDogJyc7XG5cdFx0XHR0aGlzLmhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9u
L3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgKyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVy
bCkgdXJsID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0
aW9uID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYm
ICh0cmltUG9zaXRpb24gPSB1cmwuaW5kZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3Ry
KDAsIHRyaW1Qb3NpdGlvbik7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0
XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5p
cXVlSUQoKTtcblxuXHRcdGlmIChkYXRhICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09
ICdkZWxldGUnKSl7XG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6
ICc/JykgKyBkYXRhO1xuXHRcdFx0ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9
IHRoaXMueGhyO1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0
YXJ0ID0gdGhpcy5sb2Fkc3RhcnQuYmluZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0g
dGhpcy5wcm9ncmVzcy5iaW5kKHRoaXMpO1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50
b1VwcGVyQ2FzZSgpLCB1cmwsIHRoaXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIs
IHRoaXMub3B0aW9ucy5wYXNzd29yZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRl
bnRpYWxzKSAmJiAnd2l0aENyZWRlbnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMg
PSB0cnVlO1xuXG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5n
ZS5iaW5kKHRoaXMpO1xuXG5cdFx0T2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2
YWx1ZSwga2V5KXtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtl
eSwgdmFsdWUpO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdl
eGNlcHRpb24nLCBba2V5LCB2YWx1ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAn
ZXhjZXB0aW9uJywgeGhyOiB4aHIsIGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRo
aXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xu
XHRcdFx0dGhpcy5yZXNldFRoZW5hYmxlKHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0
aGlzLmZpcmVFdmVudCgncmVxdWVzdCcpO1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICgh
dGhpcy5vcHRpb25zLmFzeW5jKSB0aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0
aGlzLm9wdGlvbnMudGltZW91dCkgdGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlz
Lm9wdGlvbnMudGltZW91dCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2Fu
Y2VsOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0
XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhy
LmFib3J0KCk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMu
dGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5
c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9n
cmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dz
ZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJl
amVjdCh7cmVhc29uOiAnY2FuY2VsJywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fVxuXG59KTtcblxudmFyIG1ldGhvZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2Rl
bGV0ZScsICdwYXRjaCcsICdoZWFkJywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAn
UEFUQ0gnLCAnSEVBRCddLmVhY2goZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2Rd
ID0gZnVuY3Rpb24oZGF0YSl7XG5cdFx0dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0
aG9kXG5cdFx0fTtcblx0XHRpZiAoZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5c
dFx0cmV0dXJuIHRoaXMuc2VuZChvYmplY3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVt
ZW50KG1ldGhvZHMpO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1
bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwo
KTtcblx0XHRzZW5kLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2Vu
ZCcpO1xuXHRcdGlmICghc2VuZCl7XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0
XHRkYXRhOiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykg
fHwgJ3Bvc3QnLCB1cmw6IHRoaXMuZ2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlz
LnN0b3JlKCdzZW5kJywgc2VuZCk7XG5cdFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07
XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZh
ciBzZW5kZXIgPSB0aGlzLmdldCgnc2VuZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlz
LCB1cmw6IHVybCB8fCBzZW5kZXIub3B0aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVz
Y3JpcHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFs
IG1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnBy
b3ZpZGVzOiBSZXF1ZXN0LkhUTUxcblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xh
c3Moe1xuXG5cdEV4dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTog
ZmFsc2UsXG5cdFx0YXBwZW5kOiBmYWxzZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRm
aWx0ZXI6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwg
YXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNz
OiBmdW5jdGlvbih0ZXh0KXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9u
c2UgPSB0aGlzLnJlc3BvbnNlO1xuXG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3Jp
cHRzKGZ1bmN0aW9uKHNjcmlwdCl7XG5cdFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0
O1xuXHRcdH0pO1xuXG5cdFx0dmFyIG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlb
Xj5dKj4oW1xcc1xcU10qPyk8XFwvYm9keT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5o
dG1sID0gbWF0Y2hbMV07XG5cdFx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdo
dG1sJywgcmVzcG9uc2UuaHRtbCk7XG5cblx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5v
ZGVzO1xuXHRcdHJlc3BvbnNlLmVsZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZp
bHRlciB8fCAnKicpO1xuXG5cdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0g
cmVzcG9uc2UuZWxlbWVudHM7XG5cdFx0aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1
cGRhdGUgPSBkb2N1bWVudC5pZChvcHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChv
cHRpb25zLmZpbHRlcikgdXBkYXRlLmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVs
c2UgdXBkYXRlLnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0
aW9ucy5hcHBlbmQpe1xuXHRcdFx0dmFyIGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBw
ZW5kKTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJz
ZSgpLmluamVjdChhcHBlbmQpO1xuXHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGls
ZHJlbigpKTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhl
YyhyZXNwb25zZS5qYXZhc2NyaXB0KTtcblxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRy
ZWUsIHJlc3BvbnNlLmVsZW1lbnRzLCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0
KTtcblx0XHR0aGlzLnJlc29sdmUoe3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNw
b25zZS5lbGVtZW50cywgaHRtbDogcmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2Uu
amF2YXNjcmlwdH0pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtc
blxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xv
YWQnKS5jYW5jZWwoKTtcblx0XHRsb2FkLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5y
ZXRyaWV2ZSgnbG9hZCcpO1xuXHRcdGlmICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVl
c3QuSFRNTCh7ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9k
OiAnZ2V0J30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRy
ZXR1cm4gbG9hZDtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLmdldCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVu
dHMsIHtkYXRhOiBUeXBlLmlzT2JqZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlw
dGlvbjogSlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxuU2VlQWxzbzogPGh0dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0Fy
cmF5LCBTdHJpbmcsIE51bWJlciwgRnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxu
Ki9cblxuaWYgKHR5cGVvZiBKU09OID09ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxu
XG5cbihmdW5jdGlvbigpe1xuXG52YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6
ICdcXFxcdCcsICdcXG4nOiAnXFxcXG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccics
ICdcIicgOiAnXFxcXFwiJywgJ1xcXFwnOiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1
bmN0aW9uKGNocil7XG5cdHJldHVybiBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcg
KyBjaHIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04u
dmFsaWRhdGUgPSBmdW5jdGlvbihzdHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgv
XFxcXCg/OltcIlxcXFxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0
XHRcdHJlcGxhY2UoL1wiW15cIlxcXFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCso
PzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxh
Y2UoLyg/Ol58OnwsKSg/OlxccypcXFspKy9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9
XFxzXSokLykudGVzdChzdHJpbmcpO1xufTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lm
eSA/IGZ1bmN0aW9uKG9iail7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1
bmN0aW9uKG9iail7XG5cdGlmIChvYmogJiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigp
O1xuXG5cdHN3aXRjaCAodHlwZU9mKG9iaikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRy
ZXR1cm4gJ1wiJyArIG9iai5yZXBsYWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkg
KyAnXCInO1xuXHRcdGNhc2UgJ2FycmF5Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpT
T04uZW5jb2RlKS5jbGVhbigpICsgJ10nO1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gn
OlxuXHRcdFx0dmFyIHN0cmluZyA9IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlv
bih2YWx1ZSwga2V5KXtcblx0XHRcdFx0dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5c
dFx0XHRcdGlmIChqc29uKSBzdHJpbmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNv
bik7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2Fz
ZSAnbnVtYmVyJzogY2FzZSAnYm9vbGVhbic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdu
dWxsJzogcmV0dXJuICdudWxsJztcblx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5z
ZWN1cmUgPSB0cnVlO1xuXG5cbkpTT04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUp
e1xuXHRpZiAoIXN0cmluZyB8fCB0eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51
bGw7XG5cblx0aWYgKHNlY3VyZSA9PSBudWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYg
KHNlY3VyZSl7XG5cdFx0aWYgKEpTT04ucGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7
XG5cdFx0aWYgKCFKU09OLnZhbGlkYXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBj
b3VsZCBub3QgZGVjb2RlIHRoZSBpbnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZh
bHVlIGlzIG5vdCBzZWN1cmUuJyk7XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcg
KyAnKScpO1xufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxu
ZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlv
bmFsIG1ldGhvZHMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnBy
b3ZpZGVzOiBSZXF1ZXN0LkpTT05cblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xh
c3Moe1xuXG5cdEV4dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJv
cjogZnVuY3Rpb24odGV4dCwgZXJyb3Ipe30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxu
XHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25z
KTtcblx0XHRPYmplY3QuYXBwZW5kKHRoaXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdh
cHBsaWNhdGlvbi9qc29uJyxcblx0XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0
fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkg
e1xuXHRcdFx0anNvbiA9IHRoaXMucmVzcG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRo
aXMub3B0aW9ucy5zZWN1cmUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmly
ZUV2ZW50KCdlcnJvcicsIFt0ZXh0LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0
XHRpZiAoanNvbiA9PSBudWxsKXtcblx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7
XG5cdFx0XHR0aGlzLm9uU3VjY2Vzcyhqc29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7
anNvbjoganNvbiwgdGV4dDogdGV4dH0pO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxu
XG5uYW1lOiBDb29raWVcblxuZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGlu
ZywgYW5kIGRlbGV0aW5nIGJyb3dzZXIgQ29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1Q
YXVsIEtvY2ggKGh0dHA6Ly9xdWlya3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywg
QnJvd3Nlcl1cblxucHJvdmlkZXM6IENvb2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBu
ZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRc
dHBhdGg6ICcvJyxcblx0XHRkb21haW46IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0
XHRzZWN1cmU6IGZhbHNlLFxuXHRcdGRvY3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRy
dWUsXG5cdFx0aHR0cE9ubHk6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24o
a2V5LCBvcHRpb25zKXtcblx0XHR0aGlzLmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMo
b3B0aW9ucyk7XG5cdH0sXG5cblx0d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhp
cy5vcHRpb25zLmVuY29kZSkgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRc
dGlmICh0aGlzLm9wdGlvbnMuZG9tYWluKSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0
aW9ucy5kb21haW47XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRo
PScgKyB0aGlzLm9wdGlvbnMucGF0aDtcblx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtc
blx0XHRcdHZhciBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdl
dFRpbWUoKSArIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xu
XHRcdFx0dmFsdWUgKz0gJzsgZXhwaXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1c
blx0XHRpZiAodGhpcy5vcHRpb25zLnNlY3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRp
ZiAodGhpcy5vcHRpb25zLmh0dHBPbmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhp
cy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUg
PSB0aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRo
aXMua2V5LmVzY2FwZVJlZ0V4cCgpICsgJz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkg
PyBkZWNvZGVVUklDb21wb25lbnQodmFsdWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3Nl
OiBmdW5jdGlvbigpe1xuXHRcdG5ldyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwg
dGhpcy5vcHRpb25zLCB7ZHVyYXRpb246IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59KTtcblxuQ29va2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0
aW9ucyl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xu
fTtcblxuQ29va2llLnJlYWQgPSBmdW5jdGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShr
ZXkpLnJlYWQoKTtcbn07XG5cbkNvb2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25z
KXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4v
KlxuLS0tXG5cbm5hbWU6IERPTVJlYWR5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3Vz
dG9tIGV2ZW50IGRvbXJlYWR5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVx
dWlyZXM6IFtCcm93c2VyLCBFbGVtZW50LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RP
TVJlYWR5LCBEb21SZWFkeV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVu
dCl7XG5cbnZhciByZWFkeSxcblx0bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9s
bCxcblx0dGltZXIsXG5cdHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7XG5cbnZhciBkb21yZWFkeSA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7
XG5cdGlmICghcmVhZHkpe1xuXHRcdEJyb3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRc
dGRvY3VtZW50LnJlbW92ZUxpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJl
bW92ZUxpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZp
cmVFdmVudCgnZG9tcmVhZHknKTtcblx0XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xu
XHR9XG5cdC8vIGNsZWFudXAgc2NvcGUgdmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RF
bGVtZW50ID0gbnVsbDtcbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFy
IGkgPSBjaGVja3MubGVuZ3RoOyBpLS07KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5
KCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBv
bGwgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkp
IHRpbWVyID0gc2V0VGltZW91dChwb2xsLCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5l
cignRE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Ny
b2xsIHRlY2huaXF1ZSBieSBEaWVnbyBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29t
L0lFQ29udGVudExvYWRlZC9cbi8vIHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4g
dGhlIERPTSBpcyBub3QgcmVhZHksIG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9s
bFdvcmtzID0gZnVuY3Rpb24oKXtcblx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgp
O1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07
XG4vLyBJZiBkb1Njcm9sbCB3b3JrcyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVy
bWluZSBkb21yZWFkeVxuLy8gICBlLmcuIGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRv
U2Nyb2xsICYmICFkb1Njcm9sbFdvcmtzKCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtz
KTtcblx0c2hvdWxkUG9sbCA9IHRydWU7XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50
LnJlYWR5U3RhdGUpIGNoZWNrcy5wdXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3Vt
ZW50LnJlYWR5U3RhdGU7XG5cdHJldHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0g
J2NvbXBsZXRlJyk7XG59KTtcblxuaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50
KSBkb2N1bWVudC5hZGRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ug
c2hvdWxkUG9sbCA9IHRydWU7XG5cbmlmIChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQu
RXZlbnRzLmRvbXJlYWR5ID0ge1xuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFk
eSkgZm4uY2FsbCh0aGlzKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkg
ZmlyZXMgYmVmb3JlIGxvYWRcbkVsZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2Fk
Jyxcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2lu
ZG93KSBmbi5jYWxsKHRoaXMpO1xuXHR9LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0
aWYgKHRoaXMgPT0gd2luZG93KXtcblx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxl
bWVudC5FdmVudHMubG9hZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8v
IFRoaXMgaXMgYmFzZWQgb24gdGhlIGN1c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQo
J2xvYWQnLCBmdW5jdGlvbigpe1xuXHRsb2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywg
ZG9jdW1lbnQpO1xuIgorbW9kdWxlLmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2Ny
aXB0IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29w
eXJpZ2h0IChjKSAyMDA2LTIwMTcgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMu
bmV0LykuKi8gXG4vKiFcbldlYiBCdWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWls
ZGVyL2U0MjZhOWFlNzE2N2M1ODA3YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1l
OiBDb3JlXG5cbmRlc2NyaXB0aW9uOiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1
IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0
aG9yczogVGhlIE1vb1Rvb2xzIHByb2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9k
ZXZlbG9wZXJzLylcblxuaW5zcGlyYXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5z
cGlyZWQgYnkgW0Jhc2UuanNdKGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8w
My9iYXNlLykgQ29weXJpZ2h0IChjKSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwt
bGljZW5zZS5waHApXG4gIC0gU29tZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5
cGUuanNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNh
bSBTdGVwaGVuc29uLCBbTUlUIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl
cy9taXQtbGljZW5zZS5waHApXG5cbnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5
cGVPZiwgaW5zdGFuY2VPZiwgTmF0aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBq
YXZhc2NyaXB0IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdo
dDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0
aHViLmNvbS9rYW1pY2FuZS8pLiovXG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtc
blx0dmVyc2lvbjogJzEuNi4wJyxcblx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2
YzdjYTUxMTRlZTk1ZTJiJ1xufTtcblxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBl
T2YgPSB0aGlzLnR5cGVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSBy
ZXR1cm4gJ251bGwnO1xuXHRpZiAoaXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRm
YW1pbHkoKTtcblxuXHRpZiAoaXRlbS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUg
PT0gMSkgcmV0dXJuICdlbGVtZW50Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1
cm4gKC9cXFMvKS50ZXN0KGl0ZW0ubm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFj
ZSc7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRp
ZiAoJ2NhbGxlZScgaW4gaXRlbSkgcmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScg
aW4gaXRlbSkgcmV0dXJuICdjb2xsZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRl
bTtcbn07XG5cbnZhciBpbnN0YW5jZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRl
bSwgb2JqZWN0KXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29u
c3RydWN0b3IgPSBpdGVtLiRjb25zdHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGls
ZSAoY29uc3RydWN0b3Ipe1xuXHRcdGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4g
dHJ1ZTtcblx0XHRjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxs
dElFOD4qL1xuXHRpZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8
L2x0SUU4PiovXG5cdHJldHVybiBpdGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhh
c093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJ
RTg+Ki9cbnZhciBlbnVtZXJhYmxlcyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzog
MX0pIGVudW1lcmFibGVzID0gbnVsbDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBb
J2hhc093blByb3BlcnR5JywgJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlz
RW51bWVyYWJsZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3Rvcidd
O1xuZnVuY3Rpb24gZm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQp
e1xuXHRpZiAoZW51bWVyYWJsZXMpIGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGkt
LTspe1xuXHRcdHZhciBrID0gZW51bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBr
ZXktdmFsdWUsIHNvIG92ZXJsb2FkU2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8v
IG1ldGhvZCBmdW5jdGlvbiwgd2l0aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhh
c093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10p
O1xuXHR9XG59XG4vKjwvbHRJRTg+Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFy
IEZ1bmN0aW9uID0gdGhpcy5GdW5jdGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2Fk
U2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1
cm4gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0
aWYgKHVzZVBsdXJhbCB8fCB0eXBlb2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBr
IGluIGEpIHNlbGYuY2FsbCh0aGlzLCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0
XHRmb3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwv
bHRJRTg+Ki9cblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVy
bG9hZEdldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0
cmV0dXJuIGZ1bmN0aW9uKGEpe1xuXHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVv
ZiBhICE9ICdzdHJpbmcnKSBhcmdzID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID4gMSkgYXJncyA9IGFyZ3VtZW50cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBb
YV07XG5cdFx0aWYgKGFyZ3Mpe1xuXHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBp
ID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0
aGlzLCBhcmdzW2ldKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRo
aXMsIGEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24u
cHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2
YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVu
dCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7
XG59Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJv
dG90eXBlLnNsaWNlO1xuXG5BcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChp
dGVtID09IG51bGwpIHJldHVybiBbXTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVt
KSAmJiB0eXBlb2YgaXRlbSAhPSAnc3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScp
ID8gaXRlbSA6IHNsaWNlLmNhbGwoaXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252
ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlv
bicpID8gaXRlbSA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5c
bk51bWJlci5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZs
b2F0KGl0ZW0pO1xuXHRyZXR1cm4gaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59
O1xuXG5TdHJpbmcuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcn
O1xufTtcblxuXG5cbkZ1bmN0aW9uLmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZy
b20gPSBOdW1iZXIuY29udmVydDtcblN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8v
IGhpZGUsIHByb3RlY3RcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlv
bigpe1xuXHRcdHRoaXMuJGhpZGRlbiA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cHJvdGVjdDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5U
eXBlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dl
ciA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRl
bSl7XG5cdFx0XHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRc
dFR5cGVbJ2lzJyArIG5hbWVdID0gdHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7
XG5cdFx0XHRvYmplY3QucHJvdG90eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0
cmV0dXJuIGxvd2VyO1xuXHRcdFx0fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0
aWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMp
O1xuXHRvYmplY3QuJGNvbnN0cnVjdG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29u
c3RydWN0b3IgPSBvYmplY3Q7XG5cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmlu
ZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVu
Y3Rpb24oaXRlbSl7XG5cdHJldHVybiAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0
aCA9PSAnbnVtYmVyJyAmJiB0b1N0cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9u
XScgKTtcbn07XG5cbnZhciBob29rcyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9i
amVjdCl7XG5cdHZhciB0eXBlID0gdHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4g
aG9va3NbdHlwZV0gfHwgKGhvb2tzW3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9
IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4p
IHJldHVybjtcblxuXHR2YXIgaG9va3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkg
PSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5c
dFx0aWYgKHR5cGVPZihob29rKSA9PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUs
IG1ldGhvZCk7XG5cdFx0ZWxzZSBob29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxu
XG5cdHZhciBwcmV2aW91cyA9IHRoaXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMg
PT0gbnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBt
ZXRob2Q7XG5cblx0aWYgKHRoaXNbbmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAn
ZnVuY3Rpb24nKSBleHRlbmQuY2FsbCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRy
ZXR1cm4gbWV0aG9kLmFwcGx5KGl0ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0p
O1xufTtcblxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRo
b2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1l
XTtcblx0aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNb
bmFtZV0gPSBtZXRob2Q7XG59O1xuXG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBp
bXBsZW1lbnQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNl
dHRlcigpLFxuXG5cdGFsaWFzOiBmdW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVt
ZW50LmNhbGwodGhpcywgbmFtZSwgdGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVy
bG9hZFNldHRlcigpLFxuXG5cdG1pcnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0
aGlzKS5wdXNoKGhvb2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlw
ZSgnVHlwZScsIFR5cGUpO1xuXG4vLyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0
aW9uKG5hbWUsIG9iamVjdCwgbWV0aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9i
amVjdCksXG5cdFx0cHJvdG90eXBlID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBl
KSBvYmplY3QgPSBuZXcgVHlwZShuYW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBs
ID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ld
LFxuXHRcdFx0Z2VuZXJpYyA9IG9iamVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVb
a2V5XTtcblxuXHRcdGlmIChnZW5lcmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNU
eXBlICYmIHByb3RvKSBvYmplY3QuaW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0
fVxuXG5cdGlmIChpc1R5cGUpe1xuXHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlw
ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1l
dGhvZCA9IGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAo
dmFyIGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5j
YWxsKHByb3RvdHlwZSwgcHJvdG90eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRc
dH1cblx0XHRcdGZvciAodmFyIGtleSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBw
cm90b3R5cGVba2V5XSwga2V5KTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtc
blxuZm9yY2UoJ1N0cmluZycsIFN0cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAn
Y29uY2F0JywgJ2NvbnRhaW5zJywgJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAn
cXVvdGUnLCAncmVwbGFjZScsICdzZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3Ry
JywgJ3N1YnN0cmluZycsICd0cmltJywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSko
J0FycmF5JywgQXJyYXksIFtcblx0J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAn
c29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5c
dCdpbmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5Jywg
J21hcCcsICdzb21lJywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdO
dW1iZXInLCBOdW1iZXIsIFtcblx0J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2Fs
ZVN0cmluZycsICd0b1ByZWNpc2lvbidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdh
cHBseScsICdjYWxsJywgJ2JpbmQnXG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywg
J3Rlc3QnXG5dKSgnT2JqZWN0JywgT2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVy
dHknLCAnZGVmaW5lUHJvcGVydGllcycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dl
dE93blByb3BlcnR5RGVzY3JpcHRvcicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZl
bnRFeHRlbnNpb25zJywgJ2lzRXh0ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6
ZScsICdpc0Zyb3plbidcbl0pKCdEYXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRl
bmQgPSBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0
aW9uKCl7XG5cdHJldHVybiArKG5ldyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbics
IEJvb2xlYW4pO1xuXG4vLyBmaXhlcyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIu
cHJvdG90eXBlLiRmYW1pbHkgPSBmdW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykg
PyAnbnVtYmVyJyA6ICdudWxsJztcbn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51
bWJlci5leHRlbmQoJ3JhbmRvbScsIGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGgu
Zmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8g
Zm9yRWFjaCwgZWFjaCwga2V5c1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9c
blx0Zm9yRWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0g
dGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChi
aW5kLCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0
ZWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJp
bmQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxu
XHRrZXlzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2
YXIgayBpbiBvYmplY3Qpe1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBr
KSkga2V5cy5wdXNoKGspO1xuXHRcdH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmpl
Y3RFbnVtYmVyYWJsZUtleShvYmplY3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGsp
O1xuXHRcdH0pO1xuXHRcdC8qPC9sdElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5c
dGZvckVhY2g6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9i
amVjdCkuZm9yRWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rb
a2V5XSwga2V5LCBvYmplY3QpO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9
IE9iamVjdC5mb3JFYWNoO1xuXG5cbi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBt
ZXJnaW5nIGFuZCBhcHBlbmRpbmdcblxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0
c3dpdGNoICh0eXBlT2YoaXRlbSkpe1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xv
bmUoKTtcblx0XHRjYXNlICdvYmplY3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRc
dGRlZmF1bHQ6IHJldHVybiBpdGVtO1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25l
JywgZnVuY3Rpb24oKXtcblx0dmFyIGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXko
aSk7XG5cdHdoaWxlIChpLS0pIGNsb25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJu
IGNsb25lO1xufSk7XG5cbnZhciBtZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJy
ZW50KXtcblx0c3dpdGNoICh0eXBlT2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5c
dFx0XHRpZiAodHlwZU9mKHNvdXJjZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNv
dXJjZVtrZXldLCBjdXJyZW50KTtcblx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xv
bmUoY3VycmVudCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXld
ID0gY3VycmVudC5jbG9uZSgpOyBicmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1
cnJlbnQ7XG5cdH1cblx0cmV0dXJuIHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5c
dG1lcmdlOiBmdW5jdGlvbihzb3VyY2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0
cmluZycpIHJldHVybiBtZXJnZU9uZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAx
LCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0g
YXJndW1lbnRzW2ldO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291
cmNlLCBrZXksIG9iamVjdFtrZXldKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxc
blxuXHRjbG9uZTogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRm
b3IgKHZhciBrZXkgaW4gb2JqZWN0KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7
XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwp
e1xuXHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
XG5cdFx0XHR2YXIgZXh0ZW5kZWQgPSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZh
ciBrZXkgaW4gZXh0ZW5kZWQpIG9yaWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1c
blx0XHRyZXR1cm4gb3JpZ2luYWw7XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVz
XG5cblsnT2JqZWN0JywgJ1doaXRlU3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdB
cmd1bWVudHMnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xu
XG4vLyBVbmlxdWUgSURcblxudmFyIFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQo
J3VuaXF1ZUlEJywgZnVuY3Rpb24oKXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xu
fSk7XG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyBBcnJheSBQcm90b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFz
ZS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxu
cHJvdmlkZXM6IEFycmF5XG5cbi4uLlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwh
RVM1PiovXG5cdGV2ZXJ5OiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAs
IGwgPSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhp
cykgJiYgIWZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmlu
ZCl7XG5cdFx0dmFyIHJlc3VsdHMgPSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2
YWx1ZSA9IHRoaXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykp
IHJlc3VsdHMucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxu
XG5cdGluZGV4T2Y6IGZ1bmN0aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlz
Lmxlbmd0aCA+Pj4gMDtcblx0XHRmb3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAs
IGxlbmd0aCArIGZyb20pIDogZnJvbSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYg
KHRoaXNbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0s
XG5cblx0bWFwOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVu
Z3RoID4+PiAwLCByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5j
YWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztc
blx0fSxcblxuXHRzb21lOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAs
IGwgPSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhp
cykgJiYgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0
fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRy
ZXR1cm4gaXRlbSAhPSBudWxsO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24o
bWV0aG9kTmFtZSl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xu
XHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21l
dGhvZE5hbWVdLmFwcGx5KGl0ZW0sIGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0
ZTogZnVuY3Rpb24oa2V5cyl7XG5cdFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0
aGlzLmxlbmd0aCwga2V5cy5sZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIG9ialtrZXlzW2ldXSA9IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxu
XHRsaW5rOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3Ig
KHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFy
IGtleSBpbiBvYmplY3Qpe1xuXHRcdFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRc
dFx0XHRcdHJlc3VsdFtrZXldID0gdGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tl
eV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0
dXJuIHJlc3VsdDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5c
dFx0cmV0dXJuIHRoaXMuaW5kZXhPZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBl
bmQ6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuICh0aGlzLmxlbmd0aCkgPyB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxu
XG5cdGdldFJhbmRvbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRo
aXNbTnVtYmVyLnJhbmRvbSgwLCB0aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0
aW5jbHVkZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0
aGlzLnB1c2goaXRlbSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVu
Y3Rpb24oYXJyYXkpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwg
bDsgaSsrKSB0aGlzLmluY2x1ZGUoYXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGVyYXNlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7
IGktLTspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xu
XHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0
XHR0aGlzLmxlbmd0aCA9IDA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgYXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9
IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNb
aV0pO1xuXHRcdFx0aWYgKHR5cGUgPT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0g
YXJyYXkuY29uY2F0KCh0eXBlID09ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwg
dHlwZSA9PSAnYXJndW1lbnRzJyB8fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJh
eS5mbGF0dGVuKHRoaXNbaV0pIDogdGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtc
blx0fSxcblxuXHRwaWNrOiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJu
IHRoaXNbaV07XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBm
dW5jdGlvbihhcnJheSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xu
XHRcdHZhciByZ2IgPSB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUu
bGVuZ3RoID09IDEpIHZhbHVlICs9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVl
LCAxNik7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2Ig
KyAnKSc7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhp
cy5sZW5ndGggPCAzKSByZXR1cm4gbnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0
aGlzWzNdID09IDAgJiYgIWFycmF5KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4
ID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9
ICh0aGlzW2ldIC0gMCkudG9TdHJpbmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGgg
PT0gMSkgPyAnMCcgKyBiaXQgOiBiaXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhl
eCA6ICcjJyArIGhleC5qb2luKCcnKTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFt
ZTogRnVuY3Rpb25cblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMg
bGlrZSBjcmVhdGUsIGJpbmQsIHBhc3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5c
biovXG5cbkZ1bmN0aW9uLmV4dGVuZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRm
b3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7
fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVt
ZW50KHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRc
dFx0cmV0dXJuIHRoaXMuYXBwbHkoYmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBj
YXRjaCAoZSl7fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiov
XG5cdGJpbmQ6IGZ1bmN0aW9uKHRoYXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFy
Z3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBu
dWxsLFxuXHRcdFx0RiA9IGZ1bmN0aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9u
KCl7XG5cdFx0XHR2YXIgY29udGV4dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7
XG5cdFx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUg
PSBzZWxmLnByb3RvdHlwZTtcblx0XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRc
dFx0dmFyIHJlc3VsdCA9ICghYXJncyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChj
b250ZXh0KVxuXHRcdFx0XHQ6IHNlbGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBh
cmdzLmNvbmNhdChBcnJheS5zbGljZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtc
blx0XHRcdHJldHVybiBjb250ZXh0ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07
XG5cdFx0cmV0dXJuIGJvdW5kO1xuXHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczog
ZnVuY3Rpb24oYXJncywgYmluZCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdz
ICE9IG51bGwpIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlv
bigpe1xuXHRcdFx0cmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xu
XHRcdH07XG5cdH0sXG5cblx0ZGVsYXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0
XHRyZXR1cm4gc2V0VGltZW91dCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyks
IGJpbmQpLCBkZWxheSk7XG5cdH0sXG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNh
bCwgYmluZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9
PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5c
blxuLypcbi0tLVxuXG5uYW1lOiBOdW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJl
ciBQcm90b3R5cGVzIGxpa2UgbGltaXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVt
YmVyXG5cbi4uLlxuKi9cblxuTnVtYmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9u
KG1pbiwgbWF4KXtcblx0XHRyZXR1cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMp
KTtcblx0fSxcblxuXHRyb3VuZDogZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24g
PSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1w
cmVjaXNpb24gOiAwKTtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAv
IHByZWNpc2lvbjtcblx0fSxcblxuXHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpczsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9
LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7
XG5cdH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0
aGlzLCBiYXNlIHx8IDEwKTtcblx0fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3Rp
bWVzJyk7XG5cbihmdW5jdGlvbihtYXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5l
YWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNv
bmNhdChBcnJheS5jb252ZXJ0KGFyZ3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1w
bGVtZW50KG1ldGhvZHMpO1xuXG59KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdh
dGFuMicsICdjZWlsJywgJ2NvcycsICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4n
LCAncG93JywgJ3NpbicsICdzcXJ0JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJp
bmdcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxD
YXNlLCBjYXBpdGFsaXplLCB0ZXN0LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5c
bi4uLlxuKi9cblxuU3RyaW5nLmltcGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6
IGZ1bmN0aW9uKHN0cmluZywgaW5kZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhp
cykuc2xpY2UoaW5kZXgpIDogU3RyaW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0
fSxcblx0Ly88LyFFUzY+XG5cblx0dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0
cmV0dXJuICgodHlwZU9mKHJlZ2V4KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAo
JycgKyByZWdleCwgcGFyYW1zKSkudGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycp
O1xuXHR9LFxuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcyku
cmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9u
KG1hdGNoKXtcblx0XHRcdHJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0
XHR9KTtcblx0fSxcblxuXHRoeXBoZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmlu
Zyh0aGlzKS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4g
KCctJyArIG1hdGNoLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxu
XHRjYXBpdGFsaXplOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFj
ZSgvXFxiW2Etel0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBw
ZXJDYXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxc
XF0pL2csICdcXFxcJDEnKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0
cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9S
Z2I6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9e
Iz8oXFx3ezEsMn0pKFxcd3sxLDJ9KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8g
aGV4LnNsaWNlKDEpLmhleFRvUmdiKGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7
MSwzfS9nKTtcblx0XHRyZXR1cm4gKHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtc
blx0fSxcblxuXHRzdWJzdGl0dXRlOiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0
dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0v
ZyksIGZ1bmN0aW9uKG1hdGNoLCBuYW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0g
J1xcXFwnKSByZXR1cm4gbWF0Y2guc2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1l
XSAhPSBudWxsKSA/IG9iamVjdFtuYW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5c
blxuLypcbi0tLVxuXG5uYW1lOiBCcm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBP
YmplY3QuIENvbnRhaW5zIEJyb3dzZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1l
bnQsIGFuZCB0aGUgQnJvd3NlciBIYXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IFtBcnJheSwgRnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRl
czogW0Jyb3dzZXIsIFdpbmRvdywgRG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQu
d2luZG93ID0gdGhpcztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0
dWEgPSB1YS50b0xvd2VyQ2FzZSgpO1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3Jt
LnRvTG93ZXJDYXNlKCkgOiAnJyk7XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBl
ZGdlIFVBLCBzbyBuZWVkIHRvIGNoZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hl
Y2tpbmcgaWYgaXQncyBjaHJvbWUuXG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwv
Ol0oW1xcd1xcZFxcLl0rKS8pO1xuXHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3Bl
cmF8aWV8ZmlyZWZveHxjaHJvbWV8dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3
XFxkXFwuXSspPy4qPyhzYWZhcml8KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xc
d1xcZFxcLl0rKXwkKS8pIHx8IFtudWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVB
WzFdID09ICd0cmlkZW50Jyl7XG5cdFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFb
Ml0gPSBVQVs0XTtcblx0fSBlbHNlIGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9
ICdjaHJvbWUnO1xuXHR9XG5cblx0cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25l
KS8pID8gJ2lvcycgOiAodWEubWF0Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2go
L21hY3x3aW58bGludXgvKSB8fCBbJ290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dp
bicpIHBsYXRmb3JtID0gJ3dpbmRvd3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5j
dGlvbi5wcm90b3R5cGUuZXh0ZW5kLFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8g
VUFbM10gOiBVQVsxXSxcblx0XHR2ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEn
ICYmIFVBWzRdKSA/IFVBWzRdIDogVUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9
O1xufTtcblxudmFyIEJyb3dzZXIgPSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNl
ckFnZW50LCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScg
JiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQu
ZG9jdW1lbnRNb2RlO1xufVxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0
eHBhdGg6ICEhKGRvY3VtZW50LmV2YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1l
KSxcblx0XHRxdWVyeTogISEoZG9jdW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEo
d2luZG93LkpTT04pXG5cdH0sXG5cdHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVl
c3RcblxuQnJvd3Nlci5SZXF1ZXN0ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2
YXIgTVNYTUwyID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01T
WE1MMi5YTUxIVFRQJyk7XG5cdH07XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0
cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0
cmV0dXJuIFhNTEhUVFA7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0
dXJuIE1TWE1MMjtcblx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBN
U1hNTDtcblx0fSk7XG5cbn0pKCk7XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nl
ci5SZXF1ZXN0KTtcblxuXG5cbi8vIFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1
bmN0aW9uKHRleHQpe1xuXHRpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4
ZWNTY3JpcHQpe1xuXHRcdHdpbmRvdy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRc
dHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3Jp
cHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50
ZXh0ID0gdGV4dDtcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0
ZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xu
fTtcblxuU3RyaW5nLmltcGxlbWVudCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5c
dHZhciBzY3JpcHRzID0gJyc7XG5cdHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+
XSo+KFtcXHNcXFNdKj8pPFxcL3NjcmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0
c2NyaXB0cyArPSBjb2RlICsgJ1xcbic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4
ZWMgPT09IHRydWUpIEJyb3dzZXIuZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4
ZWMpID09ICdmdW5jdGlvbicpIGV4ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xu
fSk7XG5cbi8vIFdpbmRvdywgRG9jdW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVu
dDogdGhpcy5Eb2N1bWVudCxcblx0V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhp
cy5FbGVtZW50LFxuXHRFdmVudDogdGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhp
cy4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhp
cy4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cu
bWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtc
bn0pO1xuXG50aGlzLkRvY3VtZW50ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUo
J0RvY3VtZW50JywgZnVuY3Rpb24oKXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9u
LmNvbnZlcnQoJ2RvY3VtZW50JykuaGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24o
bmFtZSwgbWV0aG9kKXtcblx0ZG9jdW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1l
bnQuaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkg
ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07
XG5cbmlmIChkb2N1bWVudC5leGVjQ29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1h
bmQoJ0JhY2tncm91bmRJbWFnZUNhY2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxu
XG4vKjxsdElFOT4qL1xuaWYgKHRoaXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0
ZW5lcil7XG5cdHZhciB1bmxvYWRFdmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hF
dmVudCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3Vt
ZW50Lmh0bWwgPSBkb2N1bWVudC53aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2lu
ZG93ID0gZG9jdW1lbnQgPSBudWxsO1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9h
ZCcsIHVubG9hZEV2ZW50KTtcbn1cblxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxz
ZWxlY3Q+Lm9wdGlvbnMgKHJlZmVycyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJh
eS5jb252ZXJ0O1xudHJ5IHtcblx0YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7
XG59IGNhdGNoIChlKXtcblx0QXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlm
ICh0eXBlb2YgaXRlbSAhPSAnc3RyaW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0
eXBlT2YoaXRlbSkgIT0gJ2FycmF5Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJh
eSA9IG5ldyBBcnJheShpKTtcblx0XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtc
blx0XHRcdHJldHVybiBhcnJheTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtc
blx0fTtcblxuXHR2YXIgcHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0g
cHJvdG90eXBlLnNsaWNlO1xuXHRbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAn
c29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVh
Y2goZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0
XHRBcnJheVtuYW1lXSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBs
eShBcnJheS5jb252ZXJ0KGl0ZW0pLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07
XG5cdH0pO1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6
IENsYXNzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVh
c2lseSBjcmVhdGluZywgZXh0ZW5kaW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNz
ZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBT
dHJpbmcsIEZ1bmN0aW9uLCBOdW1iZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5c
bihmdW5jdGlvbigpe1xuXG52YXIgQ2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNz
JywgZnVuY3Rpb24ocGFyYW1zKXtcblx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikp
IHBhcmFtcyA9IHtpbml0aWFsaXplOiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0
aW9uKCl7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykg
cmV0dXJuIHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkg
PSBudWxsO1xuXHRcdHZhciB2YWx1ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFs
aXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRo
aXMuY2FsbGVyID0gbnVsbDtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmlt
cGxlbWVudChwYXJhbXMpO1xuXG5cdG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRu
ZXdDbGFzcy5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnBy
b3RvdHlwZS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZh
ciBwYXJlbnQgPSBmdW5jdGlvbigpe1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVy
cm9yKCdUaGUgbWV0aG9kIFwicGFyZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5h
bWUgPSB0aGlzLiRjYWxsZXIuJG5hbWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25l
ci5wYXJlbnQsXG5cdFx0cHJldmlvdXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFt
ZV0gOiBudWxsO1xuXHRpZiAoIXByZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2Qg
XCInICsgbmFtZSArICdcIiBoYXMgbm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBw
bHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7
XG5cdGZvciAodmFyIGtleSBpbiBvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXld
O1xuXHRcdHN3aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRc
dFx0XHR2YXIgRiA9IGZ1bmN0aW9uKCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtc
blx0XHRcdFx0b2JqZWN0W2tleV0gPSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRc
dFx0Y2FzZSAnYXJyYXknOiBvYmplY3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRc
dH1cblx0fVxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxm
LCBrZXksIG1ldGhvZCl7XG5cdGlmIChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRv
cmlnaW47XG5cdHZhciB3cmFwcGVyID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90
ZWN0ZWQgJiYgdGhpcy4kY2FsbGVyID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhv
ZCBcIicgKyBrZXkgKyAnXCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0g
dGhpcy5jYWxsZXIsIGN1cnJlbnQgPSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBj
dXJyZW50OyB0aGlzLiRjYWxsZXIgPSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2Qu
YXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlz
LmNhbGxlciA9IGNhbGxlcjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVy
OiBzZWxmLCAkb3JpZ2luOiBtZXRob2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7
XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0
aWYgKENsYXNzLk11dGF0b3JzLmhhc093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xh
c3MuTXV0YXRvcnNba2V5XS5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVs
bCkgcmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24n
KXtcblx0XHRpZiAodmFsdWUuJGhpZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5
cGVba2V5XSA9IChyZXRhaW4pID8gdmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9
IGVsc2Uge1xuXHRcdE9iamVjdC5tZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5c
dH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGts
YXNzKXtcblx0a2xhc3MuJHByb3RvdHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGts
YXNzO1xuXHRkZWxldGUga2xhc3MuJHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xu
XG5DbGFzcy5pbXBsZW1lbnQoJ2ltcGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigp
KTtcblxuQ2xhc3MuTXV0YXRvcnMgPSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtc
blx0XHR0aGlzLnBhcmVudCA9IHBhcmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3Rh
bmNlKHBhcmVudCk7XG5cdH0sXG5cblx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRc
dEFycmF5LmNvbnZlcnQoaXRlbXMpLmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5z
dGFuY2UgPSBuZXcgaXRlbTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVt
ZW50LmNhbGwodGhpcywga2V5LCBpbnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtc
blx0fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVz
Y3JpcHRpb246IENvbnRhaW5zIFV0aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRl
ZCBpbnRvIHlvdXIgb3duIENsYXNzZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29t
bW9uIHRhc2tzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENs
YXNzXG5cbnByb3ZpZGVzOiBbQ2xhc3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxu
XG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxu
XHQkY2hhaW46IFtdLFxuXG5cdGNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFw
cGVuZChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGNhbGxDaGFpbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0
aCkgPyB0aGlzLiRjaGFpbi5zaGlmdCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtc
blx0fSxcblxuXHRjbGVhckNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5
KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0
aW9uKHN0cmluZyl7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0
aW9uKGZ1bGwsIGZpcnN0KXtcblx0XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7
XG59O1xuXG50aGlzLkV2ZW50cyA9IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0
YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92
ZU9uKHR5cGUpO1xuXG5cdFx0XG5cblx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZl
bnRzW3R5cGVdIHx8IFtdKS5pbmNsdWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVy
bmFsID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0
aW9uKGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQo
dHlwZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZl
bnQ6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlw
ZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50
cykgcmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZl
bnRzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwg
dGhpcywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRo
aXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0
eXBlLCBmbil7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0
aGlzLiRldmVudHNbdHlwZV07XG5cdFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRc
dFx0dmFyIGluZGV4ID0gZXZlbnRzLmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0x
KSBkZWxldGUgZXZlbnRzW2luZGV4XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlm
ICh0eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRz
KSB0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhp
cztcblx0XHR9XG5cdFx0aWYgKGV2ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0
XHRmb3IgKHR5cGUgaW4gdGhpcy4kZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRz
ICE9IHR5cGUpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtc
blx0XHRcdGZvciAodmFyIGkgPSBmbnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRc
dFx0XHR0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xu
XG5cdHNldE9wdGlvbnM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlv
bnMgPSBPYmplY3QubWVyZ2UuYXBwbHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChh
cmd1bWVudHMpKTtcblx0XHRpZiAodGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9w
dGlvbnMpe1xuXHRcdFx0aWYgKHR5cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicg
fHwgISgvXm9uW0EtWl0vKS50ZXN0KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRF
dmVudChvcHRpb24sIG9wdGlvbnNbb3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRp
b25dO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypc
bi0tLVxuXG5uYW1lOiBDbGFzcy5UaGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBV
dGlsaXR5IENsYXNzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3Nl
cyB0byBtYWtlIHRoZW0gXCJ0aGVuYWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4u
LlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVf
RlVMRklMTEVEID0gMSxcblx0U1RBVEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBD
bGFzcy5UaGVuYWJsZSA9IG5ldyBDbGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BF
TkRJTkcsXG5cdCR0aGVuYWJsZVJlc3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBb
XSxcblxuXHRyZXNvbHZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1
ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24p
e1xuXHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGdldFRoZW5hYmxlU3RhdGU6IGZ1bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJs
ZVN0YXRlKXtcblx0XHRcdGNhc2UgU1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5k
aW5nJztcblxuXHRcdFx0Y2FzZSBTVEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVs
ZmlsbGVkJztcblxuXHRcdFx0Y2FzZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdy
ZWplY3RlZCc7XG5cdFx0fVxuXHR9LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNv
bil7XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0
ZWQpe1xuXHRcdGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmls
bGVkID0gJ0lkZW50aXR5Jztcblx0XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlv
bicpIG9uUmVqZWN0ZWQgPSAnVGhyb3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhl
bmFibGUoKTtcblxuXHRcdHRoaXMuJHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhl
bmFibGU6IHRoZW5hYmxlLFxuXHRcdFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRc
dFx0cmVqZWN0SGFuZGxlcjogb25SZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRo
ZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0
fVxuXG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9u
UmVqZWN0ZWQpe1xuXHRcdHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1c
blxufSk7XG5cblRoZW5hYmxlLmV4dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtc
blx0XHR2YXIgdGhlbmFibGU7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xu
XHRcdFx0dGhlbmFibGUgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBu
ZXcgVGhlbmFibGUoKTtcblx0XHRcdHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5c
dFx0dmFyIHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCBy
ZWFzb24pO1xuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVu
Y3Rpb25zXG5cbmZ1bmN0aW9uIHJlc29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUg
PT09IHZhbHVlKXtcblx0XHRcdHJlamVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQg
dG8gcmVzb2x2ZSBhIHRoZW5hYmxlIHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZh
bHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1
bmN0aW9uJykpe1xuXHRcdFx0dmFyIHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0g
dmFsdWUudGhlbjtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0
aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0g
J2Z1bmN0aW9uJyl7XG5cdFx0XHRcdHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZl
cihmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5c
dFx0XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xu
XHRcdFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2
ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVl
KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1
bmN0aW9uKHJlYXNvbil7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRc
dFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhl
bmFibGUsIHJlYXNvbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0
XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRp
ZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRc
dFx0XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRc
dFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFi
bGUsIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJs
ZSwgdmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2
YWx1ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7
XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRo
ZW5hYmxlU3RhdGUgPSBTVEFURV9GVUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5c
dH1cbn1cblxuZnVuY3Rpb24gcmVqZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFi
bGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVu
YWJsZVJlc3VsdCA9IHJlYXNvbjtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRF
X1JFSkVDVEVEO1xuXG5cdFx0cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJl
c2V0KHRoZW5hYmxlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9Q
RU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiBy
ZWFjdCh0aGVuYWJsZSl7XG5cdHZhciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxu
XHRcdHJlc3VsdCA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0
aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09
IFNUQVRFX0ZVTEZJTExFRCl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107
XG5cdFx0dHlwZSA9ICdmdWxmaWxsSGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RB
VEVfUkVKRUNURUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRc
dHR5cGUgPSAncmVqZWN0SGFuZGxlcic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIo
aGFuZGxlLnBhc3MoW3Jlc3VsdCwgcmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0
aW9uIGhhbmRsZShyZXN1bHQsIHJlYWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBs
ID0gcmVhY3Rpb25zLmxlbmd0aDsgaSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVh
Y3Rpb25zW2ldLFxuXHRcdFx0aGFuZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhh
bmRsZXIgPT09ICdJZGVudGl0eScpe1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwg
cmVzdWx0KTtcblx0XHR9IGVsc2UgaWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRy
ZWplY3QocmVhY3Rpb24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRy
eSB7XG5cdFx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7
XG5cdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhl
bmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtc
bmlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4
dFRpY2sgPT09ICdmdW5jdGlvbicpe1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVs
c2UgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBz
ZXRJbW1lZGlhdGU7XG59IGVsc2Uge1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRU
aW1lb3V0KGZuLCAwKTtcblx0fTtcbn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmpl
Y3RcblxuZGVzY3JpcHRpb246IE9iamVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBI
YXNoXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRz
dWJzZXQ6IGZ1bmN0aW9uKG9iamVjdCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0
XHRmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZh
ciBrID0ga2V5c1tpXTtcblx0XHRcdGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVj
dFtrXTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlv
bihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlz
ID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVu
Z3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0g
PSBmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJl
dHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmlu
ZCl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9i
amVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRc
dHZhciBrZXkgPSBrZXlzW2ldLCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNh
bGwoYmluZCwgdmFsdWUsIGtleSwgb2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0
fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3Qs
IGZuLCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlz
W2ldO1xuXHRcdFx0aWYgKCFmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4g
ZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9u
KG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtl
eSA9IGtleXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkg
cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6
IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0g
T2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3Ro
OyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0
W2tdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1
bmN0aW9uKG9iamVjdCl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xu
XHR9LFxuXG5cdGtleU9mOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9
IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0
aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXld
ID09PSB2YWx1ZSkgcmV0dXJuIGtleTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5c
blx0Y29udGFpbnM6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qu
a2V5T2Yob2JqZWN0LCB2YWx1ZSkgIT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBm
dW5jdGlvbihvYmplY3QsIGJhc2Upe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0
T2JqZWN0LmVhY2gob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNl
KSBrZXkgPSBiYXNlICsgJ1snICsga2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRc
dHN3aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9
IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAn
YXJyYXknOlxuXHRcdFx0XHRcdHZhciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVu
Y3Rpb24odmFsLCBpKXtcblx0XHRcdFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xu
XHRcdFx0XHRcdHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0
XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVV
UklDb21wb25lbnQodmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1
ZXJ5U3RyaW5nLnB1c2gocmVzdWx0KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmlu
Zy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBT
bGljay5QYXJzZXJcbmRlc2NyaXB0aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2Vy
XG5wcm92aWRlczogU2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFy
IHBhcnNlZCxcblx0c2VwYXJhdG9ySW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJz
ZWQsXG5cdGNhY2hlID0ge30sXG5cdHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0g
L1xcXFwvZztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7
XG5cdGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lv
bi5TbGljayA9PT0gdHJ1ZSkgcmV0dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycg
KyBleHByZXNzaW9uKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0g
ISFpc1JldmVyc2VkO1xuXHR2YXIgY3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VD
YWNoZSA6IGNhY2hlO1xuXHRpZiAoY3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3Vy
cmVudENhY2hlW2V4cHJlc3Npb25dO1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5c
dFx0ZXhwcmVzc2lvbnM6IFtdLFxuXHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBm
dW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5c
dH07XG5cdHNlcGFyYXRvckluZGV4ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHBy
ZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQu
bGVuZ3RoID0gcGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNo
ZVtwYXJzZWQucmF3XSA9IChyZXZlcnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59
O1xuXG52YXIgcmV2ZXJzZUNvbWJpbmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYg
KGNvbWJpbmF0b3IgPT09ICchJykgcmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9
PT0gJyAnKSByZXR1cm4gJyEnO1xuXHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkg
cmV0dXJuIGNvbWJpbmF0b3IucmVwbGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyAr
IGNvbWJpbmF0b3I7XG59O1xuXG52YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xu
XHR2YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBp
ID0gMDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVz
c2lvbnNbaV07XG5cdFx0dmFyIGxhc3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRv
cjogcmV2ZXJzZUNvbWJpbmF0b3IoZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFy
IGogPSAwOyBqIDwgZXhwLmxlbmd0aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xu
XHRcdFx0aWYgKCFjZXhwLnJldmVyc2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9y
ID0gJyAnO1xuXHRcdFx0Y2V4cC5jb21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtc
blx0XHRcdGRlbGV0ZSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5y
ZXZlcnNlKCkucHVzaChsYXN0KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZh
ciBlc2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYu
MSAoYykgMjAwNy0yMDA4IFN0ZXZlbiBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNv
bS9yZWdleC94cmVnZXhwLz4gTUlUIExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b
LVtcXF17fSgpKis/LlxcXFxeJHwsI1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVy
biAnXFxcXCcgKyBtYXRjaDtcblx0fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChc
bi8qXG4jIS91c3IvYmluL2VudiBydWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1
YigvXFwoXFw/eFxcKXxcXHMrIy4qJHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0
XCIoP3gpXig/OlxcXG5cdCAgXFxcXHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2Vw
YXJhdG9yICAgICAgICAgIFxcblxcXG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxz
KiAgICMgQ29tYmluYXRvciAgICAgICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAg
ICAgICAgICAgICAjIENvbWJpbmF0b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29k
ZT4rIHwgXFxcXCogKSAgICAgIyBUYWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAg
KCA8dW5pY29kZT4rICAgICAgICkgICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwg
XFxcXC4gICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5c
XFxuXHR8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAg
IFxcblxcXG5cdFxcXFxbICBcXFxuXHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5c
dFx0XHRcXFxccyogKFsqXiQhfnxdPz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxu
XHRcdFx0XHRcdChbXFxcIiddPykoLio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAg
XFxcblx0XHQpPyAgXFxcXHMqICBcXFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisg
KCA8dW5pY29kZT4rICkoPzpcXFxuXHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxc
XFwxMl0qKVxcXFwxMil8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwp
XFxcblx0KT9cXFxuXHQpXCJcbiovXG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNv
bWJpbmF0b3I+KylcXFxccyp8KFxcXFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmlj
b2RlPispfFxcXFwuKDx1bmljb2RlPispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxz
KihbKl4kIX58XT89KSg/OlxcXFxzKig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxc
XFxdKD8hXFxcXF0pfCg6KykoPHVuaWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxc
XFwxM10qKVxcXFwxMyl8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxu
XHQucmVwbGFjZSgvPGNvbWJpbmF0b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4m
PXt9XFxcXDs8LycpICsgJ10nKVxuXHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdc
XFxcdTAwYTEtXFxcXHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFj
ZSgvPHVuaWNvZGUxPi9nLCAnKD86WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxc
XFteXFxcXHMwLTlhLWZdKScpXG4pO1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxu
XG5cdHNlcGFyYXRvcixcblx0Y29tYmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5c
dHRhZ05hbWUsXG5cdGlkLFxuXHRjbGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRy
aWJ1dGVPcGVyYXRvcixcblx0YXR0cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5c
dHBzZXVkb01hcmtlcixcblx0cHNldWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9D
bGFzc1F1b3RlZFZhbHVlLFxuXHRwc2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9y
IHx8IHNlcGFyYXRvckluZGV4ID09PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2Vw
YXJhdG9ySW5kZXhdID0gW107XG5cdFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNl
cGFyYXRvcikgcmV0dXJuICcnO1xuXHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRv
ckNoaWxkcmVuIHx8IGNvbWJpbmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBj
b21iaW5hdG9yIHx8ICcgJztcblx0XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHBy
ZXNzaW9uc1tzZXBhcmF0b3JJbmRleF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBh
cmF0b3JbY29tYmluYXRvckluZGV4XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRv
ckluZGV4XS5yZXZlcnNlQ29tYmluYXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3Ip
O1xuXHRcdGN1cnJlbnRTZXBhcmF0b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6
IGNvbWJpbmF0b3IsIHRhZzogJyonfTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFy
c2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlm
ICh0YWdOYW1lKXtcblx0XHRjdXJyZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVu
ZXNjYXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9
IGlkLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtc
blx0XHRjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0
XHRpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9
IFtdO1xuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNz
ZXMgPSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5c
dFx0Y3VycmVudFBhcnNlZC5jbGFzc2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxc
blx0XHRcdHJlZ2V4cDogbmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFz
c05hbWUpICsgJyhcXFxcc3wkKScpXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFz
cyl7XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xh
c3NRdW90ZWRWYWx1ZTtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/
IHBzZXVkb0NsYXNzVmFsdWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0
aWYgKCFjdXJyZW50UGFyc2VkLnBzZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xu
XHRcdGN1cnJlbnRQYXJzZWQucHNldWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3Mu
cmVwbGFjZShyZVVuZXNjYXBlLCAnJyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxc
blx0XHRcdHR5cGU6IHBzZXVkb01hcmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVu
dCdcblx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRl
S2V5ID0gYXR0cmlidXRlS2V5LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0
ZVZhbHVlID0gKGF0dHJpYnV0ZVZhbHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtc
blxuXHRcdHZhciB0ZXN0LCByZWdleHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9y
KXtcblx0XHRcdGNhc2UgJ149JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNj
YXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnJD0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0
cmlidXRlVmFsdWUpICsnJCcgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdl
eHAgPSBuZXcgUmVnRXhwKCAnKF58XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVl
KSArJyhcXFxcc3wkKScgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcg
UmVnRXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScg
ICApOyBicmVhaztcblx0XHRcdGNhc2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5c
dFx0XHRcdHJldHVybiBhdHRyaWJ1dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xu
XHRcdFx0Y2FzZSAnKj0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJu
IHZhbHVlICYmIHZhbHVlLmluZGV4T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBi
cmVhaztcblx0XHRcdGNhc2UgJyE9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dHJldHVybiBhdHRyaWJ1dGVWYWx1ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0
ZGVmYXVsdCAgIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFs
dWU7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAo
L15bKiReXT0kLykudGVzdChhdHRyaWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xu
XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5j
dGlvbih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xu
XHRcdH07XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNl
ZC5hdHRyaWJ1dGVzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xu
XHRcdFx0a2V5OiBhdHRyaWJ1dGVLZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0
b3IsXG5cdFx0XHR2YWx1ZTogYXR0cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0
fSk7XG5cblx0fVxuXG5cdHJldHVybiAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGlj
ayA9ICh0aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNz
aW9uKXtcblx0cmV0dXJuIHBhcnNlKGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVn
RXhwID0gZXNjYXBlUmVnRXhwO1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGlj
aztcblxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5l
ZCcpID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBT
bGljay5GaW5kZXJcbmRlc2NyaXB0aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9y
IGVuZ2luZS5cbnByb3ZpZGVzOiBTbGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJc
bi4uLlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXND
YWNoZSA9IHt9LFxuXHR0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8v
IEZlYXR1cmUgLyBCdWcgZGV0ZWN0aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9u
KGZuKXtcblx0cmV0dXJuICgvXFx7XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3Qo
JycgKyBmbik7XG59O1xuXG5sb2NhbC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0
dXJuICghIWRvY3VtZW50LnhtbFZlcnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3Ry
aW5nLmNhbGwoZG9jdW1lbnQpID09ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1
bWVudC5ub2RlVHlwZSA9PSA5ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAh
PSAnSFRNTCcpO1xufTtcblxubG9jYWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7
XG5cblx0Ly8gY29udmVydCBlbGVtZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQu
IGlmIGRvY3VtZW50IGNhbm5vdCBiZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5z
LlxuXHR2YXIgbm9kZVR5cGUgPSBkb2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09
IDkpOyAvLyBkb2N1bWVudFxuXHRlbHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVu
dC5vd25lckRvY3VtZW50OyAvLyBub2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikg
ZG9jdW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xu
XG5cdC8vIGNoZWNrIGlmIGl0J3MgdGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3Vt
ZW50ID09PSBkb2N1bWVudCkgcmV0dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5c
blx0Ly8gY2hlY2sgaWYgd2UgaGF2ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9j
dW1lbnQgYmVmb3JlXG5cblx0dmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5c
dFx0cm9vdFVpZCA9IHRoaXMuZ2V0VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVy
ZXNDYWNoZVtyb290VWlkXSxcblx0XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0
Zm9yIChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJl
c1tmZWF0dXJlXTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0
dXJlc0NhY2hlW3Jvb3RVaWRdID0ge307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZl
YXR1cmVzLmlzWE1MRG9jdW1lbnQgPSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJl
cy5icm9rZW5TdGFyR0VCVE5cblx0PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9
IGZlYXR1cmVzLmlkR2V0c05hbWVcblx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0
PSBmZWF0dXJlcy5icm9rZW5HRUJDTlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0
PSBmZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERv
Y3VtZW50XG5cdD0gZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5c
blx0dmFyIHN0YXJTZWxlY3RzQ2xvc2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tl
blNlY29uZENsYXNzTmFtZUdFQkNOLCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRc
dGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlj
a191bmlxdWVpZCc7XG5cdHZhciB0ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpO1xuXG5cdHZhciB0ZXN0Um9vdCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGls
ZCh0ZXN0Tm9kZSk7XG5cblx0Ly8gb24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQg
Z2V0RWxlbWVudHNCeUlkIGRvZXNudCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5v
ZGUuaW5uZXJIVE1MID0gJzxhIGlkPVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNI
VE1MRG9jdW1lbnQgPSAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAo
ZSl7fVxuXG5cdGlmIChmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5z
dHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVz
IGZvciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRl
c3ROb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFy
U2VsZWN0c0NvbW1lbnRzID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVu
Z3RoID4gMSk7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5c
IikgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0
dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2Vs
ZWN0ZWQgPSB0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNl
bGVjdHNDbG9zZWQgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRb
MF0ubm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRc
dGZlYXR1cmVzLmJyb2tlblN0YXJHRUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNl
bGVjdHNDbG9zZWQ7XG5cblx0XHQvLyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUg
aW5zdGVhZCBvZiBqdXN0IGlkIGZvciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRz
XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQg
KydcIj48L2E+PGIgaWQ9XCInKyBpZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRz
TmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGls
ZDtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSl7XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBj
YWNoZXMgcmVzdWx0c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0g
JzxhIGNsYXNzPVwiZlwiPjwvYT48YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5v
ZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUu
Zmlyc3RDaGlsZC5jbGFzc05hbWUgPSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlD
bGFzc05hbWUgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAh
PSAyKTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lIGRvZXNudCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBm
aXJzdCBvbmVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBj
bGFzcz1cImFcIj48L2E+PGEgY2xhc3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5T
ZWNvbmRDbGFzc05hbWVHRUJDTiA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdh
JykubGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5i
cm9rZW5HRUJDTiA9IGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25k
Q2xhc3NOYW1lR0VCQ047XG5cdFx0fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JB
bGwpe1xuXHRcdFx0Ly8gSUUgOCByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikg
Zm9yIHF1ZXJ5U2VsZWN0b3JBbGwoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxl
Y3RlZCA9IHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMu
c3RhclNlbGVjdHNDbG9zZWRRU0EgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYg
c2VsZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChl
KXt9XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3
aXRoIG1peGVkY2FzZSBvbiBxdWlya3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9k
ZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMu
YnJva2VuTWl4ZWRDYXNlUVNBID0gIXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5s
ZW5ndGg7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEg
ZG9udCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0
cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVj
dGVkPVwic2VsZWN0ZWRcIj5hPC9vcHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMu
YnJva2VuQ2hlY2tlZFFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcp
Lmxlbmd0aCA9PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVy
bnMgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVy
eVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAn
PGEgY2xhc3M9XCJcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1
dGVRU0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0
aCAhPSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBp
ZiBhIGZvcm0gaGFzIGFuIGlucHV0IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVy
bnMgYSByZWZlcmVuY2UgdG8gdGhlIGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlu
bmVySFRNTCA9ICc8Zm9ybSBhY3Rpb249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9y
bT4nO1xuXHRcdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENo
aWxkLmdldEF0dHJpYnV0ZSgnYWN0aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5c
blx0XHQvLyBuYXRpdmUgbWF0Y2hlc1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5u
YXRpdmVNYXRjaGVzU2VsZWN0b3IgPSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1Nl
bGVjdG9yIHx8Ki8gcm9vdC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVz
U2VsZWN0b3I7XG5cdFx0aWYgKGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtc
blx0XHRcdC8vIGlmIG1hdGNoZXNTZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNp
bnRheGVzIHdlIGNhbiB1c2UgaXRcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ci5jYWxsKHJvb3QsICc6c2xpY2snKTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxl
Y3RvciA9IG51bGw7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJv
b3Quc2xpY2tfZXhwYW5kbyA9IDE7XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0
XHRmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRc
dGZlYXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVt
b3ZlQ2hpbGQodGVzdE5vZGUpO1xuXHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBu
dWxsO1xuXG5cdC8vIGdldEF0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChm
ZWF0dXJlcy5pc0hUTUxEb2N1bWVudCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1
bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRl
cnNbbmFtZV07XG5cdFx0aWYgKG1ldGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRc
dHZhciBhdHRyaWJ1dGVOb2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJl
dHVybiAoYXR0cmlidXRlTm9kZSkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5c
dH0gOiBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1
dGVHZXR0ZXJzW25hbWVdO1xuXHRcdHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUp
IDogbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5c
blx0ZmVhdHVyZXMuaGFzQXR0cmlidXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9v
dC5oYXNBdHRyaWJ1dGUpKSA/IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJu
IG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRy
aWJ1dGUpe1xuXHRcdG5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0
XHRyZXR1cm4gISEobm9kZSAmJiAobm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtc
blx0fTtcblxuXHQvLyBjb250YWluc1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250
YWlucyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2
YXIgbmF0aXZlUm9vdENvbnRhaW5zID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNv
bnRhaW5zKSxcblx0XHRuYXRpdmVEb2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5p
c05hdGl2ZUNvZGUoZG9jdW1lbnQuY29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0g
KG5hdGl2ZVJvb3RDb250YWlucyAmJiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9u
KGNvbnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9
IDogKG5hdGl2ZVJvb3RDb250YWlucyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5j
dGlvbihjb250ZXh0LCBub2RlKXtcblx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMg
b24gZG9jdW1lbnQuXG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09
PSBkb2N1bWVudCkgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlu
cyhub2RlKTtcblx0fSA6IChyb290ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8g
ZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwg
ISEoY29udGV4dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1
bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9k
ZSA9PT0gY29udGV4dCkgcmV0dXJuIHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBh
cmVudE5vZGUpKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3Jk
ZXIgc29ydGluZ1xuXHQvLyBjcmVkaXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8p
XG5cblx0ZmVhdHVyZXMuZG9jdW1lbnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbikgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRp
b24gfHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBh
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xu
XHR9IDogKCdzb3VyY2VJbmRleCcgaW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAo
IWEuc291cmNlSW5kZXggfHwgIWIuc291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBh
LnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5n
ZSkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25l
ckRvY3VtZW50KSByZXR1cm4gMDtcblx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNy
ZWF0ZVJhbmdlKCksIGJSYW5nZSA9IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRc
dGFSYW5nZS5zZXRTdGFydChhLCAwKTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJS
YW5nZS5zZXRTdGFydChiLCAwKTtcblx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVy
biBhUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdl
KTtcblx0fSA6IG51bGw7XG5cblx0cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZl
YXR1cmVzKXtcblx0XHR0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07
XG5cbi8vIE1haW4gTWV0aG9kXG5cbnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/
OltcXHctXSt8XFwqKSkkLyxcblx0cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/Olwi
XCJ8JycpP1xcXS8sXG5cdHFzYUZhaWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBm
dW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91
bmQgPSB0aGlzLmZvdW5kID0gKGZpcnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRp
ZiAoIWNvbnRleHQpIHJldHVybiBmb3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3Ip
IGNvbnRleHQgPSBjb250ZXh0LmRvY3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3
aW5kb3cgdG8gYSBkb2N1bWVudFxuXHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJu
IGZvdW5kO1xuXG5cdC8vIHNldHVwXG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5c
dFx0dW5pcXVlcyA9IHRoaXMudW5pcXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVu
ZCAmJiBhcHBlbmQubGVuZ3RoKSxcblx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5v
ZGVUeXBlID09IDkpO1xuXG5cdGlmICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1l
bnQgPyBjb250ZXh0IDogY29udGV4dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChj
b250ZXh0KTtcblxuXHQvLyBhdm9pZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBh
cHBlbmQgYXJyYXlcblx0aWYgKGhhc090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07
KSB1bmlxdWVzW3RoaXMuZ2V0VUlEKGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Np
b24gY2hlY2tzXG5cblx0aWYgKHR5cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhw
cmVzc2lvbiBpcyBhIHN0cmluZ1xuXG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4q
L1xuXHRcdHZhciBzaW1wbGVTZWxlY3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxl
Y3Rvcik7XG5cdFx0c2ltcGxlU2VsZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0
XHR2YXIgc3ltYm9sID0gc2ltcGxlU2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVT
ZWxlY3RvclsyXTtcblxuXHRcdFx0aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09
ICcqJyAmJiB0aGlzLmJyb2tlblN0YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRc
dFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRc
dGlmIChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7
IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1
ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5c
dFx0XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hU
TUxEb2N1bWVudCB8fCAhY29udGV4dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztc
blx0XHRcdFx0bm9kZSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlm
ICghbm9kZSkgcmV0dXJuIGZvdW5kO1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5v
ZGUuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxl
U2VsZWN0b3JzO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0
XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5k
LnB1c2gobm9kZSk7XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRc
dFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSB8fCB0aGlzLmJyb2tlbkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwp
KSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRz
QnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29u
dGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkg
cmV0dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5v
ZGVzW2krK107KXtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMu
Z2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9
IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMp
JysgU2xpY2suZXNjYXBlUmVnRXhwKG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9k
ZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChp
ID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUu
Y2xhc3NOYW1lO1xuXHRcdFx0XHRcdFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVz
dChjbGFzc05hbWUpKSkgY29udGludWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBu
b2RlO1xuXHRcdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQo
bm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRc
dFx0fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0
dXJuIChmaXJzdCkgPyBudWxsIDogZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxl
Y3RvcnMtb3ZlcnJpZGU+Ki9cblxuXHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5c
dFx0cXVlcnlTZWxlY3RvcjogaWYgKGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRc
dGlmICghdGhpcy5pc0hUTUxEb2N1bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhw
cmVzc2lvbl1cblx0XHRcdFx0Ly9UT0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFj
dHVhbGx5IG1peGVkIGNhc2Vcblx0XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0
XHRcdFx0fHwgKHRoaXMuYnJva2VuQ2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpj
aGVja2VkJykgPiAtMSlcblx0XHRcdFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0Eg
JiYgcmVFbXB0eUF0dHJpYnV0ZS50ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRl
eHRJc0RvY3VtZW50IC8vQWJvcnQgd2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0
XHRcdFx0Ly8gIHRoZXJlIGFyZSBtdWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jc
blx0XHRcdFx0XHQvLyAgc2luY2Ugd2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCBy
b290ZWQgUVNBIGZvciBzaW5nbGUgZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBl
eHByZXNzaW9uLmluZGV4T2YoJywnKSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2su
ZGlzYWJsZVFTQVxuXHRcdFx0KSBicmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4
cHJlc3Npb24gPSBleHByZXNzaW9uLCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0
XHRcdGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9v
dGVkIFFTQVxuXHRcdFx0XHQvLyBjcmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3Vy
cmVudElkID0gX2NvbnRleHQuZ2V0QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRf
Xyc7XG5cdFx0XHRcdF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRc
dFx0X2V4cHJlc3Npb24gPSAnIycgKyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0
XHRcdGNvbnRleHQgPSBfY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkg
e1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJl
c3Npb24pIHx8IG51bGw7XG5cdFx0XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0
b3JBbGwoX2V4cHJlc3Npb24pO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxF
eHBDYWNoZVtleHByZXNzaW9uXSA9IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5c
dFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRc
dFx0XHRpZiAoY3VycmVudElkKSBfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElk
KTtcblx0XHRcdFx0XHRlbHNlIF9jb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRc
dFx0XHRjb250ZXh0ID0gX2NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYg
KHRoaXMuc3RhclNlbGVjdHNDbG9zZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytd
Oyl7XG5cdFx0XHRcdGlmIChub2RlLm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVu
aXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxz
ZSBmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhl
cnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRc
dFx0fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0
dXJuIGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xu
XG5cdFx0cGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBh
cnNlZC5sZW5ndGgpIHJldHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51
bGwpeyAvLyB0aGVyZSBpcyBubyBleHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVs
c2UgaWYgKGV4cHJlc3Npb24uU2xpY2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNr
IG9iamVjdFxuXHRcdHBhcnNlZCA9IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250
YWlucyhjb250ZXh0LmRvY3VtZW50RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8v
IGV4cHJlc3Npb24gaXMgYSBub2RlXG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lv
bikgOiBmb3VuZCA9IGV4cHJlc3Npb247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAv
LyBvdGhlciBqdW5rXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVj
dG9ycz4qLy8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMg
Zm9yIHRoZSBudGggc2VsZWN0b3JzXG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NO
VEhMYXN0ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVM
YXN0ID0ge307XG5cblx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxl
Y3RvcnM+Ki9cblxuXHQvLyBpZiBhcHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNp
bmdsZSBzZWxlY3RvciB3aXRoIG9uZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNl
IHB1c2hVSURcblx0dGhpcy5wdXNoID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQu
bGVuZ3RoID09IDEgJiYgcGFyc2VkLmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhp
cy5wdXNoQXJyYXkgOiB0aGlzLnB1c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5k
ID0gW107XG5cblx0Ly8gZGVmYXVsdCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNv
bWJpbmF0b3IsIHRhZywgaWQsIGNsYXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cztcblx0dmFyIGN1cnJlbnRJdGVtcywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxh
c3RCaXQsIGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9y
IChpID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAo
aiA9IDA7IChjdXJyZW50Qml0ID0gY3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0
Y29tYmluYXRvciA9ICdjb21iaW5hdG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0
aWYgKCF0aGlzW2NvbWJpbmF0b3JdKSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAg
ID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFn
LnRvVXBwZXJDYXNlKCk7XG5cdFx0aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xh
c3NMaXN0ICA9IGN1cnJlbnRCaXQuY2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50
Qml0LmNsYXNzZXM7XG5cdFx0YXR0cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0
XHRwc2V1ZG9zICAgID0gY3VycmVudEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9
PT0gKGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVl
cyA9IHt9O1xuXG5cdFx0aWYgKGxhc3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVl
cztcblx0XHRcdHRoaXMuZm91bmQgPSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51
bmlxdWVzID0ge307XG5cdFx0XHR0aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGog
PT09IDApe1xuXHRcdFx0dGhpc1tjb21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxh
c3RCaXQgJiYgZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRc
dGlmIChmaXJzdCAmJiBsYXN0Qml0KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0
aDsgbSA8IG47IG0rKyl7XG5cdFx0XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21d
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRc
dFx0XHRpZiAoZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yICht
ID0gMCwgbiA9IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRv
cl0oY3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
LCBjbGFzc0xpc3QpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5c
dH1cblxuXHQvLyBzaG91bGQgc29ydCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBp
ZiB5b3UgcGFzcyBtdWx0aXBsZSBleHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFy
c2VkLmV4cHJlc3Npb25zLmxlbmd0aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVy
biAoZmlyc3QpID8gKGZvdW5kWzBdIHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xu
XG5sb2NhbC51aWR4ID0gMTtcbmxvY2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2Nh
bC5nZXRVSURYTUwgPSBmdW5jdGlvbihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmli
dXRlKHRoaXMudWlkayk7XG5cdGlmICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0
XHRub2RlLnNldEF0dHJpYnV0ZSh0aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtc
bn07XG5cbmxvY2FsLmdldFVJREhUTUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUu
dW5pcXVlTnVtYmVyIHx8IChub2RlLnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5c
bi8vIHNvcnQgYmFzZWQgb24gdGhlIHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5c
blxubG9jYWwuc29ydCA9IGZ1bmN0aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRT
b3J0ZXIpIHJldHVybiByZXN1bHRzO1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRl
cik7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50
aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1h
dGNoTlRIID0gL14oWystXT9cXGQqKT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5w
YXJzZU5USEFyZ3VtZW50ID0gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJn
dW1lbnQubWF0Y2godGhpcy5tYXRjaE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7
XG5cdHZhciBzcGVjaWFsID0gcGFyc2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsx
XSB8fCAxO1xuXHRpZiAoYSA9PSAnLScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8
IDA7XG5cdHBhcnNlZCA9XG5cdFx0KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxu
XHRcdChzcGVjaWFsID09ICdvZGQnKVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09
ICdldmVuJylcdD8ge2E6IDIsIGI6IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhp
cy5jYWNoZU5USFthcmd1bWVudF0gPSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNl
dWRvID0gZnVuY3Rpb24oY2hpbGQsIHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0
dXJuIGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQo
bm9kZSk7XG5cdFx0aWYgKCF0aGlzW3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50
ID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0
XHRcdHZhciBlbCA9IHBhcmVudFtjaGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUp
e1xuXHRcdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5c
dFx0XHRcdFx0aWYgKGVsLm5vZGVOYW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0
XHR0aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0g
d2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7
XG5cdFx0XHRcdFx0aWYgKGVsLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRo
aXNbcG9zaXRpb25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGls
ZSAoKGVsID0gZWxbc2libGluZ10pKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBh
cmd1bWVudCB8fCAnbic7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRd
IHx8IHRoaXMucGFyc2VOVEhBcmd1bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJl
dHVybiBmYWxzZTtcblx0XHR2YXIgYSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRo
aXNbcG9zaXRpb25zXVt1aWRdO1xuXHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0
XHRpZiAoYSA+IDApe1xuXHRcdFx0aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVs
c2Uge1xuXHRcdFx0aWYgKGIgPCBwb3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJu
ICgocG9zIC0gYikgJSBhKSA9PSAwO1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0
b3JzPiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rp
b24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0
aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcykpIHRoaXMuZm91bmQucHVzaChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5j
dGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFy
IHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRo
aXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKSl7XG5cdFx0dGhpcy51bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVz
aChub2RlKTtcblx0fVxufTtcblxubG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2Vs
ZWN0b3Ipe1xuXHRpZiAodGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNT
ZWxlY3Rvcil7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxl
Y3Rvci5jYWxsKG5vZGUsIHNlbGVjdG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxc
XV0rPylcXHMqXFxdL2csICdbJDE9XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9y
KXt9XG5cdH1cblxuXHR2YXIgcGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5c
dGlmICghcGFyc2VkKSByZXR1cm4gdHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0
b3JzXG5cdHZhciBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291
bnRlciA9IDAsIGksIGN1cnJlbnRFeHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4
cHJlc3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNz
aW9uLmxlbmd0aCA9PSAxKXtcblx0XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtc
blx0XHRcdGlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkg
PyBleHAudGFnIDogZXhwLnRhZy50b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBl
eHAuYXR0cmlidXRlcywgZXhwLnBzZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4
cENvdW50ZXIrKztcblx0XHR9XG5cdH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJz
ZWQubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhp
cy5kb2N1bWVudCwgcGFyc2VkKSwgaXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2kr
K107KXtcblx0XHRpZiAoaXRlbSA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJu
IGZhbHNlO1xufTtcblxubG9jYWwubWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBh
cmd1bWVudCl7XG5cdHZhciBwc2V1ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRo
aXNbcHNldWRvTmFtZV0pIHJldHVybiB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtc
blx0dmFyIGF0dHJpYnV0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1
cm4gKGFyZ3VtZW50KSA/IGFyZ3VtZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtc
blxubG9jYWwubWF0Y2hTZWxlY3RvciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAo
dGhpcy5pc1hNTERvY3VtZW50KSA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBw
ZXJDYXNlKCk7XG5cdFx0aWYgKHRhZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0An
KSByZXR1cm4gZmFsc2U7IC8vIEZpeCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVz
XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtc
blx0XHR9XG5cdH1cblxuXHRpZiAoaWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQp
IHJldHVybiBmYWxzZTtcblxuXHR2YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9y
IChpID0gY2xhc3Nlcy5sZW5ndGg7IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRl
KG5vZGUsICdjbGFzcycpO1xuXHRcdGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0
KGNscykpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0
dHJpYnV0ZXMubGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRp
ZiAocGFydC5vcGVyYXRvciA/ICFwYXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFy
dC5rZXkpKSA6ICF0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxz
ZTtcblx0fVxuXHRpZiAocHNldWRvcykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xu
XHRcdHBhcnQgPSBwc2V1ZG9zW2ldO1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBw
YXJ0LmtleSwgcGFydC52YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtc
bn07XG5cbnZhciBjb21iaW5hdG9ycyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGls
ZCBub2RlcywgYW55IGxldmVsXG5cblx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRp
ZiAodGhpcy5pc0hUTUxEb2N1bWVudCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0
XHRpdGVtID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgo
IWl0ZW0gJiYgbm9kZS5hbGwpIHx8ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdl
dEF0dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxs
W2lkXSByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRl
IG5vZGVcblx0XHRcdFx0XHQvLyBpZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhl
IGVsZW1lbnQsIGVsc2UgaXQgd2lsbCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJl
biA9IG5vZGUuYWxsW2lkXTtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0
XHRcdFx0aWYgKCFjaGlsZHJlblswXSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRc
dGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWRO
b2RlID0gaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9k
ZSAmJiBpZE5vZGUubm9kZVZhbHVlID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0
ZW0sIHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0
XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47
XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29u
dGV4dCBpcyBpbiB0aGUgZG9tIHdlIHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJl
YWtpbmcgdGhlIGdldEJ5SWQgbGFiZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlz
LnJvb3QsIG5vZGUpKSByZXR1cm47XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRc
dFx0XHR9IGVsc2UgaWYgKHRoaXMuZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMo
bm9kZSwgaXRlbSkpIHJldHVybjtcblx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1c
blx0XHRcdGdldEJ5Q2xhc3M6IGlmIChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShj
aGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRm
b3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlk
LCBudWxsLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxu
XHRcdH1cblx0XHRnZXRCeVRhZzoge1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRz
QnlUYWdOYW1lKHRhZyk7XG5cdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgp
KSBicmVhayBnZXRCeVRhZztcblx0XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9
IG51bGw7XG5cdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVz
aChpdGVtLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5c
dH0sXG5cblx0Jz4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gZGlyZWN0IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJz
dENoaWxkKSkgZG8ge1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUg
KChub2RlID0gbm9kZS5uZXh0U2libGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGlu
Z1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlw
ZSA9PSAxKXtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0
aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJz
dCBjaGlsZFxuXHRcdG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRc
dFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisn
XShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5c
dH0sXG5cblx0J34nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4
dFNpYmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRc
dFx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVl
c1t1aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRc
dHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtc
blx0XHR9XG5cdH0sXG5cblx0JysrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGlu
Z1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBz
aWJsaW5ncyBhbmQgcHJldmlvdXMgc2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydj
b21iaW5hdG9yOiF+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyk7XG5cdH0sXG5cblx0JyEnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKXsgLy8gYWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRc
dHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3Vt
ZW50KSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyk7XG5cdH0sXG5cblx0JyE+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2Rl
ID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlz
LnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0s
XG5cblx0JyErJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnBy
ZXZpb3VzU2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNo
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJl
YWs7XG5cdFx0fVxuXHR9LFxuXG5cdCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUu
bGFzdENoaWxkO1xuXHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEp
IHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtc
blx0XHRcdGVsc2UgdGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMg
c2libGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRc
dFx0aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhp
cy5nZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xu
XHRcdFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59
O1xuXG5mb3IgKHZhciBjIGluIGNvbWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10g
PSBjb21iaW5hdG9yc1tjXTtcblxudmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVj
dG9ycz4qL1xuXG5cdCdlbXB0eSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5v
ZGUuZmlyc3RDaGlsZDtcblx0XHRyZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAx
KSAmJiAhKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtc
blx0fSxcblxuXHQnbm90JzogZnVuY3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJu
ICF0aGlzLm1hdGNoTm9kZShub2RlLCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMn
OiBmdW5jdGlvbihub2RlLCB0ZXh0KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5v
ZGUudGV4dENvbnRlbnQgfHwgJycpLmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmly
c3QtY2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZp
b3VzU2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRy
ZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRc
dHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAx
KSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQn
OiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2
ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4g
ZmFsc2U7XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4
dFNpYmxpbmcpKSBpZiAobmV4dC5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0
dXJuIHRydWU7XG5cdH0sXG5cblx0Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRo
LWNoaWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5n
JywgJ3Bvc05USCcpLFxuXG5cdCdudGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVk
bygnbGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250
aC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJs
aW5nJywgJ3Bvc05USFR5cGUnLCB0cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2Fs
LmNyZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhU
eXBlTGFzdCcsIHRydWUpLFxuXG5cdCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0
XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkp
O1xuXHR9LFxuXG5cdCdldmVuJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3Bz
ZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScp
O1xuXHR9LFxuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUt
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7
XG5cdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBu
b2RlLnByZXZpb3VzU2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1
cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hp
bGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVO
YW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2Yt
dHlwZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBu
b2RlLm5vZGVOYW1lO1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkg
aWYgKHByZXYubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4
dCA9IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0
Lm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5c
dH0sXG5cblx0Lyo8L29mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBw
c2V1ZG9zXG5cblx0J2VuYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUu
ZGlzYWJsZWQ7XG5cdH0sXG5cblx0J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0
dXJuIG5vZGUuZGlzYWJsZWQ7XG5cdH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtc
blx0XHRyZXR1cm4gbm9kZS5jaGVja2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2Zv
Y3VzJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYg
dGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9k
ZS50eXBlIHx8IHRoaXMuaGFzQXR0cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxu
XHQncm9vdCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290
KTtcblx0fSxcblxuXHQnc2VsZWN0ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9k
ZS5zZWxlY3RlZDtcblx0fVxuXG5cdC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3Ig
KHZhciBwIGluIHBzZXVkb3MpIGxvY2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxu
Ly8gYXR0cmlidXRlcyBtZXRob2RzXG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0
cmlidXRlR2V0dGVycyA9IHtcblxuXHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdo
dG1sRm9yJyBpbiB0aGlzKSA/IHRoaXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3In
KTtcblx0fSxcblxuXHQnaHJlZic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4g
dGhpcykgPyB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUo
J2hyZWYnKTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhp
cy5zdHlsZSkgPyB0aGlzLnN0eWxlLmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUn
KTtcblx0fSxcblxuXHQndGFiaW5kZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVO
b2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0
cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5v
ZGVWYWx1ZSA6IG51bGw7XG5cdH0sXG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzLmdldEF0dHJpYnV0ZSgndHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5j
dGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdt
YXhMZW5ndGgnKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5z
cGVjaWZpZWQpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5c
bmF0dHJpYnV0ZUdldHRlcnMuTUFYTEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGgg
PSBhdHRyaWJ1dGVHZXR0ZXJzLm1heGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0g
bG9jYWwuU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4x
LjcnO1xuXG4vLyBTbGljayBmaW5kZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4
dCwgZXhwcmVzc2lvbiwgYXBwZW5kKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBl
eHByZXNzaW9uLCBhcHBlbmQpO1xufTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQs
IGV4cHJlc3Npb24pe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24s
IG51bGwsIHRydWUpO1xufTtcblxuLy8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGlj
ay5jb250YWlucyA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3Vt
ZW50KGNvbnRhaW5lcik7XG5cdHJldHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUp
O1xufTtcblxuLy8gU2xpY2sgYXR0cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUg
PSBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJl
dHVybiBsb2NhbC5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRy
aWJ1dGUgPSBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7
XG5cdHJldHVybiBsb2NhbC5oYXNBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGlj
ayBtYXRjaGVyXG5cblNsaWNrLm1hdGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRp
ZiAoIShub2RlICYmIHNlbGVjdG9yKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8
IHNlbGVjdG9yID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9k
ZSk7XG5cdHJldHVybiBsb2NhbC5tYXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8g
U2xpY2sgYXR0cmlidXRlIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9
IGZ1bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZu
O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1
bmN0aW9uKG5hbWUpe1xuXHRyZXR1cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07
XG5cbi8vIFNsaWNrIHBzZXVkbyBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5j
dGlvbihuYW1lLCBmbil7XG5cdGxvY2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9k
ZSwgYXJndW1lbnQpe1xuXHRcdHJldHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtc
blx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1l
KXtcblx0dmFyIHBzZXVkbyA9IGxvY2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRv
KSByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlz
LCBhcmd1bWVudCk7XG5cdH07XG5cdHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJp
ZGVzIGFjY2Vzc29yXG5cblNsaWNrLm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5c
dGxvY2FsLm92ZXJyaWRlKHJlZ2V4cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNr
LmlzWE1MID0gbG9jYWwuaXNYTUw7XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5c
dHJldHVybiBsb2NhbC5nZXRVSURIVE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0
aGlzLlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBv
cnRzICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBFbGVtZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3Qg
aW1wb3J0YW50IGl0ZW1zIGluIE1vb1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9u
LCB0aGUgZG9sbGFycyBmdW5jdGlvbiwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3Nlciwg
dGltZS1zYXZlciBtZXRob2RzIHRvIGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1l
bnRzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3cs
IERvY3VtZW50LCBBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNr
LlBhcnNlciwgU2xpY2suRmluZGVyXVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAk
LCAkJCwgSUZyYW1lLCBTZWxlY3RvcnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlz
LkVsZW1lbnQgPSBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxl
bWVudC5Db25zdHJ1Y3RvcnNbdGFnXTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3Ry
dWN0b3IocHJvcHMpO1xuXHRpZiAodHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3Vt
ZW50LmlkKHRhZykuc2V0KHByb3BzKTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5c
dGlmICghKC9eW1xcdy1dKyQvKS50ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5w
YXJzZSh0YWcpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcq
JykgPyAnZGl2JyA6IHBhcnNlZC50YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9
PSBudWxsKSBwcm9wcy5pZCA9IHBhcnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFy
c2VkLmF0dHJpYnV0ZXM7XG5cdFx0aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAw
LCBsID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJp
YnV0ZXNbaV07XG5cdFx0XHRpZiAocHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xu
XG5cdFx0XHRpZiAoYXR0ci52YWx1ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBw
cm9wc1thdHRyLmtleV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUg
JiYgIWF0dHIub3BlcmF0b3IpIHByb3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0
aWYgKHBhcnNlZC5jbGFzc0xpc3QgJiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2Ns
YXNzJ10gPSBwYXJzZWQuY2xhc3NMaXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1
bWVudC5uZXdFbGVtZW50KHRhZywgcHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50
KXtcblx0RWxlbWVudC5wcm90b3R5cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQv
LyBJRTggYW5kIElFOSByZXF1aXJlIHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUu
X2ZpcmVFdmVudCA9IChmdW5jdGlvbihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0
eXBlLCBldmVudCl7XG5cdFx0XHRyZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZl
bnQpO1xuXHRcdH07XG5cdH0pKEVsZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5l
dyBUeXBlKCdFbGVtZW50JywgRWxlbWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAo
QXJyYXkucHJvdG90eXBlW25hbWVdKSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpb
bmFtZV0gPSBmdW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVu
dHMsIGVsZW1lbnRzID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3Ro
OyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVz
dWx0c1tpXSA9IGVsZW1lbnRbbmFtZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVt
ZW50cyA9IChlbGVtZW50cyAmJiB0eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1c
blx0XHRyZXR1cm4gKGVsZW1lbnRzKSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7
XG5cdH07XG5cblx0RWxlbWVudHMuaW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2Vy
LkVsZW1lbnQpe1xuXHRFbGVtZW50LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3Rv
dHlwZSA9IHtcblx0XHQnJGNvbnN0cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1
bmN0aW9uLmNvbnZlcnQoJ2VsZW1lbnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJv
cihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0g
bWV0aG9kO1xuXHR9KTtcbn1cblxuRWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZh
ciBJRnJhbWUgPSBuZXcgVHlwZSgnSUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9
IEFycmF5LmxpbmsoYXJndW1lbnRzLCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxc
blx0XHRpZnJhbWU6IGZ1bmN0aW9uKG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtc
blx0XHR9XG5cdH0pO1xuXG5cdHZhciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBp
ZnJhbWU7XG5cdGlmIChwYXJhbXMuaWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMu
aWZyYW1lKTtcblx0dmFyIG9ubG9hZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5c
dGRlbGV0ZSBwcm9wcy5vbmxvYWQ7XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5p
ZCwgcHJvcHMubmFtZSwgaWZyYW1lID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZy
YW1lXycgKyBTdHJpbmcudW5pcXVlSUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVu
dChpZnJhbWUgfHwgJ2lmcmFtZScsIHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24o
KXtcblx0XHRvbmxvYWQuY2FsbChpZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYg
KHdpbmRvdy5mcmFtZXNbcHJvcHMuaWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlz
dGVuZXIoJ2xvYWQnLCBvbkxvYWQpO1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVt
ZW50cyA9IHRoaXMuRWxlbWVudHMgPSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBu
b2Rlcy5sZW5ndGgpe1xuXHRcdHZhciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yo
bm9kZSk7XG5cdFx0XHRpZiAoIXVuaXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9
IHRydWU7XG5cdFx0XHRcdHRoaXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07
XG5cbkVsZW1lbnRzLnByb3RvdHlwZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0g
QXJyYXk7XG5cbm5ldyBUeXBlKCdFbGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5c
dGZpbHRlcjogZnVuY3Rpb24oZmlsdGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJu
IHRoaXM7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVP
ZihmaWx0ZXIpID09ICdzdHJpbmcnKSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0
ZW0ubWF0Y2goZmlsdGVyKTtcblx0XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgp
LFxuXG5cdHB1c2g6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xu
XHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRl
bSkgdGhpc1tsZW5ndGgrK10gPSBpdGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3Ro
ID0gbGVuZ3RoKTtcblx0fS5wcm90ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgaXRlbXMgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNb
aV0pO1xuXHRcdFx0aWYgKGl0ZW0pIGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVy
biBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVj
dCgpLFxuXG5cdGNvbmNhdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcg
RWxlbWVudHModGhpcyk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3Ro
OyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYg
KFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0
XHRlbHNlIG5ld0VsZW1lbnRzLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVt
ZW50cztcblx0fS5wcm90ZWN0KCksXG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtc
blx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0
aGlzLnB1c2goY29sbGVjdGlvbltpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgp
LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRl
IHRoaXNbLS10aGlzLmxlbmd0aF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5c
bn0pO1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5
LnByb3RvdHlwZS5zcGxpY2UsIG9iamVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtc
blxuc3BsaWNlLmNhbGwob2JqZWN0LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVu
dHMuaW1wbGVtZW50KCdzcGxpY2UnLCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5s
ZW5ndGg7XG5cdHZhciByZXN1bHQgPSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0
d2hpbGUgKGxlbmd0aCA+PSB0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRy
ZXR1cm4gcmVzdWx0O1xufS5wcm90ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0
aW9uKG1ldGhvZCwgbmFtZSl7XG5cdEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xu
fSk7XG5cbkFycmF5Lm1pcnJvcihFbGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRl
RWxlbWVudEFjY2VwdHNIVE1MO1xudHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0g
KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xu
fSBjYXRjaCAoZSl7fVxuXG52YXIgZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJl
dHVybiAoJycgKyBodG1sKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcm
cXVvdDsnKTtcbn07XG4vKjwvbHRJRTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4
IENhbm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1M
ID0gKGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHls
ZScpLFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNq
dXN0VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5c
dH0gY2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRv
Y3VtZW50LmltcGxlbWVudCh7XG5cblx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7
XG5cdFx0aWYgKHByb3BzKXtcblx0XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3Bz
LmRlZmF1bHRDaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9
PSAnY2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0g
bnVsbCkgcHJvcHMudmFsdWUgPSAnb24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMg
dGhlIHR5cGUgdG8gYmUgc2V0IGJlZm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1l
bnRcblx0XHRcdGlmICghY2FuQ2hhbmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0
XHRcdFx0dmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7
XG5cdFx0XHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtc
blx0XHRcdFx0aWYgKHByb3BzLnR5cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1
cm4gdGhpcy5pZChzdHlsZUVsZW1lbnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwv
bHRJRTk+Ki9cblx0XHRcdC8qPGx0SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0
eXBlIHByb3BlcnRpZXMgaW4gSUUgPCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNI
VE1MKXtcblx0XHRcdFx0dGFnID0gJzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkg
dGFnICs9ICcgbmFtZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRc
dFx0XHRpZiAocHJvcHMudHlwZSkgdGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJv
cHMudHlwZSkgKyAnXCInO1xuXHRcdFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJv
cHMubmFtZTtcblx0XHRcdFx0ZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwv
bHRJRTg+Ki9cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRh
ZykpLnNldChwcm9wcyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5T
bGljay51aWRPZih3aW5kb3cpO1xuU2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5p
bXBsZW1lbnQoe1xuXG5cdG5ld1RleHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4g
dGhpcy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMud2luZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxu
XHRcdHZhciB0eXBlcyA9IHtcblxuXHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBk
b2Mpe1xuXHRcdFx0XHRpZCA9IFNsaWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxX
KS9nLCAnXFxcXCQxJykpO1xuXHRcdFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQs
IG5vY2FzaCkgOiBudWxsO1xuXHRcdFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWws
IG5vY2FzaCl7XG5cdFx0XHRcdFNsaWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2gg
JiYgIWVsLiRmYW1pbHkgJiYgISgvXig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFt
ZSkpe1xuXHRcdFx0XHRcdHZhciBmaXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0
Ly8gd3JhcHBpbmcgbmVlZGVkIGluIElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9m
aXJlRXZlbnQgPSBmdW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmly
ZUV2ZW50KHR5cGUsIGV2ZW50KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBl
bmQoZWwsIEVsZW1lbnQuUHJvdG90eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7
XG5cdFx0XHR9LFxuXG5cdFx0XHRvYmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xu
XHRcdFx0XHRpZiAob2JqLnRvRWxlbWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxl
bWVudChkb2MpLCBub2Nhc2gpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRc
dH07XG5cblx0XHR0eXBlcy50ZXh0bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5k
b3cgPSB0eXBlcy5kb2N1bWVudCA9IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87
XG5cdFx0fTtcblxuXHRcdHJldHVybiBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0
aWYgKGVsICYmIGVsLiRmYW1pbHkgJiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0
XHR2YXIgdHlwZSA9IHR5cGVPZihlbCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5
cGVzW3R5cGVdKGVsLCBub2Nhc2gsIGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5c
blx0fSkoKVxuXG59KTtcblxuaWYgKHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQo
JyQnLCBmdW5jdGlvbihlbCwgbmMpe1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlz
LmRvY3VtZW50KTtcbn0pO1xuXG5XaW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5k
b3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVu
dCwgRWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0
aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lv
biwgbmV3IEVsZW1lbnRzKTtcblx0fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNz
aW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9u
KSk7XG5cdH1cblxufSk7XG5cbnZhciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxl
bWVudCl7XG5cdHJldHVybiBTbGljay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5p
ZiAoIWRvY3VtZW50LmNvbnRhaW5zKSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYg
KCFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1l
bnQoY29udGFpbnMpO1xuXG5cblxuLy8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5h
dG9yID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lv
bikgcmV0dXJuIGNvbWJpbmF0b3I7XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGlj
ay5wYXJzZShleHByZXNzaW9uKSk7XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5l
eHByZXNzaW9ucztcblx0Zm9yICh2YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0
XHRleHByZXNzaW9uc1tpXVswXS5jb21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4g
ZXhwcmVzc2lvbjtcbn07XG5cbk9iamVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRn
ZXRQcmV2aW91czogJyF+Jyxcblx0Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0
b3IsIG1ldGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVz
c2lvbil7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJl
c3Npb24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRn
ZXRBbGxOZXh0OiAnficsXG5cdGdldEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczog
J35+Jyxcblx0Z2V0Q2hpbGRyZW46ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlv
bihjb21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0
aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJp
bmF0b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50Lmlt
cGxlbWVudCh7XG5cblx0Z2V0Rmlyc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVy
biBkb2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNz
aW9uLCAnPicpKVswXSk7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7
XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5h
dG9yKGV4cHJlc3Npb24sICc+JykpLmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxu
XG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1l
bnQ7XG5cdH0sXG5cblx0Z2V0RWxlbWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4g
ZG9jdW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxc
VykvZywgJ1xcXFwkMScpKSk7XG5cdH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24p
e1xuXHRcdHJldHVybiAhZXhwcmVzc2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9u
KTtcblx0fVxuXG59KTtcblxuXG5cbmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxl
bWVudCgnJCQnLCBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09
IDEpe1xuXHRcdGlmICh0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5z
ZWFyY2godGhpcy5kb2N1bWVudCwgc2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBp
ZiAoVHlwZS5pc0VudW1lcmFibGUoc2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVj
dG9yKTtcblx0fVxuXHRyZXR1cm4gbmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8g
SW5zZXJ0ZXJzXG5cbnZhciBpbnNlcnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250
ZXh0LCBlbGVtZW50KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRc
dGlmIChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0s
XG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQg
PSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9y
ZShjb250ZXh0LCBlbGVtZW50Lm5leHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0
aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7
XG5cdH0sXG5cblx0dG9wOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50
Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5c
bmluc2VydGVycy5pbnNpZGUgPSBpbnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVy
dHkgLyBzZXRQcm9wZXJ0eVxuXG52YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0
dGVycyA9IHt9O1xuXG4vLyBwcm9wZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJh
eS5mb3JFYWNoKFtcblx0J3R5cGUnLCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tl
eScsICdjZWxsUGFkZGluZycsICdjZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9y
ZGVyJywgJ3Jvd1NwYW4nLCAndGFiSW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVy
dHkpe1xuXHRwcm9wZXJ0aWVzW3Byb3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59
KTtcblxucHJvcGVydGllcy5odG1sID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5u
ZXJUZXh0JzogJ3RleHRDb250ZW50JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVu
Y3Rpb24ocmVhbCwga2V5KXtcblx0cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2Rl
LCB2YWx1ZSl7XG5cdFx0bm9kZVtyZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRl
cnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xu
fSk7XG5cbi8qPGx0SUU5PiovXG5wcm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xu
XHRyZXR1cm4gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykg
PT0gJ3N0eWxlJykgbm9kZS5zZXQoJ2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3Bl
cnRpZXMudGV4dF0gPSB2YWx1ZTtcblx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxu
cHJvcGVydHlHZXR0ZXJzLnRleHQgPSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHJldHVybiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9k
ZS5pbm5lckhUTUwgOiBnZXR0ZXIobm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4
dCk7XG4vKjwvbHRJRTk+Ki9cblxuLy8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29t
cGFjdCcsICdub3dyYXAnLCAnaXNtYXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQn
LFxuXHQnZGlzYWJsZWQnLCAncmVhZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9y
ZXNpemUnLFxuXHQnZGVmZXInLCAnZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRy
b2xzJywgJ2F1dG9wbGF5Jyxcblx0J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFy
cmF5LmZvckVhY2goYm9vbHMsIGZ1bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRv
TG93ZXJDYXNlKCk7XG5cdGJvb2xlYW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVy
c1tsb3dlcl0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFs
dWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0
XHRyZXR1cm4gISFub2RlW2Jvb2xdO1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxu
T2JqZWN0LmFwcGVuZChwcm9wZXJ0eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihu
b2RlLCB2YWx1ZSl7XG5cdFx0KCdjbGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUg
PSAodmFsdWUgfHwgJycpIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9
LFxuXG5cdCdmb3InOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBu
b2RlKSA/IG5vZGUuaHRtbEZvciA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZh
bHVlKTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5v
ZGUuc3R5bGUpID8gbm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0
ZSgnc3R5bGUnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFs
dWUpe1xuXHRcdG5vZGUudmFsdWUgPSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9
XG5cbn0pO1xuXG5wcm9wZXJ0eUdldHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0
cmV0dXJuICgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBu
b2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyBy
ZWFkb25seSBhbmQgdGhyb3dzXG50cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUp
e31cbmlmIChlbC50eXBlICE9ICdidXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0
aW9uKG5vZGUsIHZhbHVlKXtcblx0bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59
O1xuZWwgPSBudWxsO1xuLyogPC93ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5Piov
XG4vLyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNh
bkNoYW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2
LmlubmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFk
aXYuaW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8q
PC9sdElFOT4qL1xuXG52YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcp
LCB2b2xhdGlsZUlucHV0VmFsdWUsIGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5w
dXQudmFsdWUgPSAndCc7XG5pbnB1dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFs
dWUgPSBpbnB1dC52YWx1ZSAhPSAndCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxp
ZCBBcmd1bWVudFwiIHdoZW4gdHJ5aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtc
blx0aW5wdXQudmFsdWUgPSAnJztcblx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5w
dXRTdXBwb3J0ID0gaW5wdXQudHlwZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1
dCA9IG51bGw7XG5cbmlmICh2b2xhdGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0
KSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xu
XHRcdHZhciB2YWx1ZSA9IG5vZGUudmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRu
b2RlLnZhbHVlID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyog
Z2V0UHJvcGVydHksIHNldFByb3BlcnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRl
c0dldEF0dHJpYnV0ZSA9IChmdW5jdGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0
ZSc7XG5cdHJldHVybiAoZGl2LmdldEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScp
O1xufSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcg
PSAoZnVuY3Rpb24odGVzdCl7XG5cdHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5h
bWU9XCJzaG91bGRfZml4XCIgdmFsdWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0
cmV0dXJuIHRlc3QuY2xvbmVOb2RlKHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGgg
IT0gMTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICov
XG5cbnZhciBoYXNDbGFzc0xpc3QgPSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNs
YXNzTGlzdDtcblxudmFyIGNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xh
c3NOYW1lcyA9IChjbGFzc05hbWUgfHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9
IHt9O1xuXHRyZXR1cm4gY2xhc3NOYW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0
XHRpZiAoY2xhc3NOYW1lICE9PSAnJyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5p
cXVlc1tjbGFzc05hbWVdID0gY2xhc3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNz
TGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xu
XG52YXIgcmVtb3ZlRnJvbUNsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNz
TGlzdC5yZW1vdmUobmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJv
cGVydHk6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlT
ZXR0ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0
ZXIodGhpcywgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0
XHR2YXIgYXR0cmlidXRlQWxsb3dMaXN0O1xuXHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRl
KSBhdHRyaWJ1dGVBbGxvd0xpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0
Jywge30pO1xuXHRcdFx0LyogPC9sdElFOT4gKi9cblxuXHRcdFx0aWYgKHZhbHVlID09IG51bGwp
e1xuXHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0LyogPGx0SUU5
PiAqL1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dGVB
bGxvd0xpc3RbbmFtZV07XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xu
XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0Lyog
PGx0SUU5PiAqL1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZUFs
bG93TGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9u
KGF0dHJpYnV0ZXMpe1xuXHRcdGZvciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlz
LnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRnZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFy
IGdldHRlciA9IHByb3BlcnR5R2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChn
ZXR0ZXIpIHJldHVybiBnZXR0ZXIodGhpcyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChw
b2xsdXRlc0dldEF0dHJpYnV0ZSl7XG5cdFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRl
Tm9kZShuYW1lKSwgYXR0cmlidXRlQWxsb3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0
ZUFsbG93TGlzdCcsIHt9KTtcblx0XHRcdGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRp
ZiAoYXR0ci5leHBhbmRvICYmICFhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0pe1xuXHRcdFx0XHR2
YXIgb3V0ZXIgPSB0aGlzLm91dGVySFRNTDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3Bl
bmluZyB0YWcgYW5kIGZpbmQgbWVudGlvbiBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAo
b3V0ZXIuc3Vic3RyKDAsIG91dGVyLnNlYXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkv
KSkuaW5kZXhPZihuYW1lKSA8IDApIHJldHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVBbGxv
d0xpc3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xu
XHRcdHZhciByZXN1bHQgPSBTbGljay5nZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0
dXJuICghcmVzdWx0ICYmICFTbGljay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6
IHJlc3VsdDtcblx0fSxcblxuXHRnZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBh
cmdzID0gQXJyYXkuY29udmVydChhcmd1bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlz
LmdldFByb3BlcnR5LCB0aGlzKS5hc3NvY2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJv
cGVydHk6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUs
IG51bGwpO1xuXHR9LFxuXG5cdHJlbW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJy
YXkuZWFjaChhcmd1bWVudHMsIHRoaXMucmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBw
cm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJv
cGVydHkuc2V0KSA/IHByb3BlcnR5LnNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJv
cGVydHkocHJvcCwgdmFsdWUpO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5j
dGlvbihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07
XG5cdFx0cmV0dXJuIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFw
cGx5KHRoaXMpIDogdGhpcy5nZXRQcm9wZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigp
LFxuXG5cdGVyYXNlOiBmdW5jdGlvbihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50
LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHBy
b3BlcnR5LmVyYXNlLmFwcGx5KHRoaXMpIDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rp
b24oY2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NO
YW1lKTtcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhp
cy5jbGFzc05hbWUpLmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhh
c0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUp
LmZvckVhY2goYWRkVG9DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDog
ZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NO
YW1lICsgJyAnICsgdGhpcy5jbGFzc05hbWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRyZW1vdmVDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1l
KXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0
aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0
dmFyIGNsYXNzTmFtZXMgPSBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNs
YXNzTmFtZSkuZm9yRWFjaChjbGFzc05hbWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlz
LmNsYXNzTmFtZSA9IGNsYXNzTmFtZXMuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAo
Zm9yY2UgPT0gbnVsbCkgZm9yY2UgPSAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJl
dHVybiAoZm9yY2UpID8gdGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFz
cyhjbGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJl
bnQgPSB0aGlzLCBmcmFnbWVudCwgZWxlbWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyks
IGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0g
ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1l
bnQuaWQoZWxlbWVudHNbaV0sIHRydWUpO1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBl
bmRDaGlsZChlbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5k
Q2hpbGQoZnJhZ21lbnQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4
dDogZnVuY3Rpb24odGV4dCwgd2hlcmUpe1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXRE
b2N1bWVudCgpLm5ld1RleHROb2RlKHRleHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVu
Y3Rpb24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3Vt
ZW50LmlkKGVsLCB0cnVlKSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5q
ZWN0OiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9t
J10odGhpcywgZG9jdW1lbnQuaWQoZWwsIHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRyZXBsYWNlczogZnVuY3Rpb24oZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRy
dWUpO1xuXHRcdGVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHR3cmFwczogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9
IGRvY3VtZW50LmlkKGVsLCB0cnVlKTtcblx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3Jh
YihlbCwgd2hlcmUpO1xuXHR9LFxuXG5cdGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuc2VsZWN0ZWRJbmRleDsgLy8gU2FmYXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50
cyhBcnJheS5jb252ZXJ0KHRoaXMub3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5c
dFx0XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5
U3RyaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMu
Z2V0RWxlbWVudHMoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7
XG5cdFx0XHR2YXIgdHlwZSA9IGVsLnR5cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlz
YWJsZWQgfHwgdHlwZSA9PSAnc3VibWl0JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAn
ZmlsZScgfHwgdHlwZSA9PSAnaW1hZ2UnKSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChl
bC5nZXQoJ3RhZycpID09ICdzZWxlY3QnKSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9u
KG9wdCl7XG5cdFx0XHRcdC8vIElFXG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdl
dCgndmFsdWUnKTtcblx0XHRcdH0pIDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hl
Y2tib3gnKSAmJiAhZWwuY2hlY2tlZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0
XHRBcnJheS5jb252ZXJ0KHZhbHVlKS5lYWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0
eXBlb2YgdmFsICE9ICd1bmRlZmluZWQnKSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBv
bmVudChlbC5uYW1lKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0p
O1xuXHRcdH0pO1xuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7
XG5cblxuLy8gYXBwZW5kSFRNTFxuXG52YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6
ICdiZWZvcmVCZWdpbicsXG5cdGFmdGVyOiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVF
bmQnLFxuXHR0b3A6ICdhZnRlckJlZ2luJyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxu
RWxlbWVudC5pbXBsZW1lbnQoJ2FwcGVuZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xu
XHR0aGlzLmluc2VydEFkamFjZW50SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRv
bSddLCBodG1sKTtcblx0cmV0dXJuIHRoaXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xu
XHR2YXIgdGVtcCA9IG5ldyBFbGVtZW50KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxk
cmVuID0gdGVtcC5jaGlsZE5vZGVzLFxuXHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xu
XG5cdGlmICghZnJhZ21lbnQpIHJldHVybiB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4g
MSl7XG5cdFx0ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGlu
c2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhp
cztcbn0pO1xuXG52YXIgY29sbGVjdGVkID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9
IGZ1bmN0aW9uKHVpZCl7XG5cdHJldHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0g
PSB7fSkpO1xufTtcblxudmFyIGNsZWFuID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBp
dGVtLnVuaXF1ZU51bWJlcjtcblx0aWYgKGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2
ZW50cygpO1xuXHRpZiAoaXRlbS5jbGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVz
KCk7XG5cdGlmICh1aWQgIT0gbnVsbCl7XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRc
dGRlbGV0ZSBzdG9yYWdlW3VpZF07XG5cdH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9y
bVByb3BzID0ge2lucHV0OiAnY2hlY2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6
ICd2YWx1ZSd9O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24o
KXtcblx0XHR2YXIgY2hpbGRyZW4gPSBjbGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
KicpO1xuXHRcdEFycmF5LmVhY2goY2hpbGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bv
c2UodGhpcyk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7
XG5cdFx0QXJyYXkuY29udmVydCh0aGlzLmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3Nl
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy5wYXJlbnROb2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0
aGlzKSA6IHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQp
e1xuXHRcdGNvbnRlbnRzID0gY29udGVudHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRo
aXMuY2xvbmVOb2RlKGNvbnRlbnRzKSwgY2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxu
XHRcdGlmIChjb250ZW50cyl7XG5cdFx0XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVy
dCh0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkg
PSBjZS5sZW5ndGg7IGktLTspe1xuXHRcdFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRl
W2ldO1xuXHRcdFx0aWYgKCFrZWVwaWQpIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRc
dFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRc
dG5vZGUuY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVs
ZW1lbnQpO1xuXHRcdFx0XHRub2RlLnJlbW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5c
dFx0XHRcdGlmIChub2RlLm9wdGlvbnMpe1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9u
cywgZW8gPSBlbGVtZW50Lm9wdGlvbnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0
aDsgai0tOykgbm9bal0uc2VsZWN0ZWQgPSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRc
dFx0fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVt
ZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3By
b3BdKSBub2RlW3Byb3BdID0gZWxlbWVudFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4q
L1xuXHRcdGlmIChoYXNDbG9uZUJ1Zyl7XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnb2JqZWN0JyksIHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2Jq
ZWN0Jyk7XG5cdFx0XHRmb3IgKGkgPSBjby5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9
IHRvW2ldLm91dGVySFRNTDtcblx0XHR9XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRv
Y3VtZW50LmlkKGNsb25lKTtcblx0fVxuXG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1l
bnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0aWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlz
dGVuZXIpe1xuXHRcdFx0Y29sbGVjdGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0
fVxuXHRcdGlmICh0aGlzLmFkZEV2ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0
eXBlLCBmbiwgISFhcmd1bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24n
ICsgdHlwZSwgZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVy
OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikg
dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0
ZWxzZSB0aGlzLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmV0cmlldmU6IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIg
c3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5
XTtcblx0XHRpZiAoZGZsdCAhPSBudWxsICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2Vb
cHJvcGVydHldID0gZGZsdDtcblx0XHRyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7
XG5cdH0sXG5cblx0c3RvcmU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0
b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0g
dmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihw
cm9wZXJ0eSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRc
dGRlbGV0ZSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtc
blxuLyo8bHRJRTk+Ki9cbmlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKXtcblx0dmFyIGdjID0gZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xs
ZWN0ZWQsIGNsZWFuKTtcblx0XHRpZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2Fy
YmFnZSgpO1xuXHRcdHdpbmRvdy5yZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xu
XHR3aW5kb3cuYWRkTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5F
bGVtZW50LlByb3BlcnRpZXMgPSB7fTtcblxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9
IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBz
dHlsZTtcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUu
Y3NzVGV4dDtcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNz
c1RleHQgPSAnJztcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5c
dGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7
XG5cdH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5j
dGlvbihodG1sKXtcblx0XHRpZiAoaHRtbCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBp
ZiAodHlwZU9mKGh0bWwpID09ICdhcnJheScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0
Lyo8bHRJRTk+Ki9cblx0XHRpZiAodGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhU
TUwpIHRoaXMuc3R5bGVTaGVldC5jc3NUZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4q
L3RoaXMuaW5uZXJIVE1MID0gaHRtbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0
dGhpcy5zZXQoJ2h0bWwnLCAnJyk7XG5cdH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVt
ZW50cyA9IHRydWUsIHN1cHBvcnRzVGFibGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5u
ZXJIVE1MID0gdHJ1ZTtcblxuLyo8bHRJRTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQg
LSBodHRwOi8vamRiYXJ0bGV0dC5jb20vaW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpO1xudmFyIGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2
PjwvbmF2Pic7XG5zdXBwb3J0c0hUTUw1RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3Ro
ID09IDEpO1xuaWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJy
IGFydGljbGUgYXNpZGUgYXVkaW8gY2FudmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBm
aWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNz
IHNlY3Rpb24gc3VtbWFyeSB0aW1lIHZpZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGls
ZSAobC0tKSBmcmFnbWVudC5jcmVhdGVFbGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtc
bi8qPC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0
aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgndGFibGUnKTtcblx0dGFibGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7
XG5cdHJldHVybiB0cnVlO1xufSk7XG5cbi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCd0cicpLCBodG1sID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBo
dG1sO1xuc3VwcG9ydHNUUklubmVySFRNTCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9
IG51bGw7XG4vKjwvbHRGRjQ+Ki9cblxuaWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFz
dXBwb3J0c1RSSW5uZXJIVE1MIHx8ICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1l
bnQuUHJvcGVydGllcy5odG1sLnNldCA9IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5z
bGF0aW9ucyA9IHtcblx0XHRcdHRhYmxlOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0
XHRcdHNlbGVjdDogWzEsICc8c2VsZWN0PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBb
MiwgJzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywg
Jzx0YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5c
blx0XHR0cmFuc2xhdGlvbnMudGhlYWQgPSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlv
bnMudGJvZHk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5
PiovXG5cdFx0XHRpZiAodGhpcy5zdHlsZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRt
bCk7XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3Ro
aXMuZ2V0KCd0YWcnKV07XG5cdFx0XHRpZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50
cykgd3JhcCA9IFswLCAnJywgJyddO1xuXHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwo
dGhpcywgaHRtbCk7XG5cblx0XHRcdHZhciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICgh
c3VwcG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0
XHRcdHdyYXBwZXIuaW5uZXJIVE1MID0gW3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4o
KS5qb2luKCcnKTtcblx0XHRcdHdoaWxlIChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RD
aGlsZDtcblx0XHRcdHRoaXMuZW1wdHkoKS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0
XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBl
cik7XG5cdFx0XHR3cmFwcGVyID0gbnVsbDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVy
dGllcy5odG1sLnNldCk7XG59XG4vKjwvSUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9y
bSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9
ICc8c2VsZWN0PjxvcHRpb24+czwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5m
aXJzdENoaWxkLnZhbHVlICE9ICdzJykgRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5c
dHNldDogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5c
dFx0aWYgKHRhZyAhPSAnc2VsZWN0JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywg
dmFsdWUpO1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5c
dFx0dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9u
cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0
YXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25W
YWx1ZSA9IChhdHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5n
ZXQoJ3RleHQnKTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRp
b24uc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIG9wdGlvbiA9IHRoaXMsIHRhZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYg
KHRhZyAhPSAnc2VsZWN0JyAmJiB0YWcgIT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3Bl
cnR5KCd2YWx1ZScpO1xuXG5cdFx0aWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9w
dGlvbi5nZXRTZWxlY3RlZCgpWzBdKSkgcmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRp
b24uZ2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5z
cGVjaWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07
XG50ZXN0Rm9ybSA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlBy
b3BlcnRpZXMuaWQgPSB7XG5cdHNldDogZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlz
LmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiB0aGlzLmlkIHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlv
bigpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAn
Jztcblx0fVxufTtcbi8qPC9JRT4qL1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZl
bnQgb2JqZWN0IGNyb3NzLWJyb3dzZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBP
YmplY3RdXG5cbnByb3ZpZGVzOiBFdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52
YXIgX2tleXMgPSB7fTtcbnZhciBub3JtYWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQp
e1xuXHR2YXIgbm9ybWFsaXplZDtcblx0aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1h
bGl6ZWQgPSBldmVudC53aGVlbERlbHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8g
MTIwIDogZXZlbnQud2hlZWxEZWx0YSAvIDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91
bnQgPSBldmVudC5kZWx0YVkgfHwgZXZlbnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9
IC0ocmF3QW1vdW50ICUgMyA9PSAwID8gcmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtc
blx0fVxuXHRyZXR1cm4gbm9ybWFsaXplZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9N
RXZlbnQgPSBuZXcgVHlwZSgnRE9NRXZlbnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYg
KCF3aW4pIHdpbiA9IHdpbmRvdztcblx0ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlm
IChldmVudC4kZXh0ZW5kZWQpIHJldHVybiBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xu
XHR0aGlzLiRleHRlbmRlZCA9IHRydWU7XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtc
blx0dGhpcy5jb250cm9sID0gZXZlbnQuY3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRL
ZXk7XG5cdHRoaXMubWV0YSA9IGV2ZW50Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBl
ID0gZXZlbnQudHlwZTtcblx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNF
bGVtZW50O1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQg
PSB0YXJnZXQucGFyZW50Tm9kZTtcblx0dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQp
O1xuXG5cdGlmICh0eXBlLmluZGV4T2YoJ2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhp
cy5jb2RlID0gKGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5z
aGlmdCB8fCB0eXBlICE9ICdrZXlwcmVzcycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0
aWYgKHR5cGUgPT0gJ2tleWRvd24nIHx8IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29k
ZSA+IDExMSAmJiBjb2RlIDwgMTI0KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0
XHRcdGVsc2UgaWYgKGNvZGUgPiA5NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5
Njtcblx0XHR9XG5cdFx0aWYgKHRoaXMua2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZy
b21DaGFyQ29kZShjb2RlKS50b0xvd2VyQ2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2Ns
aWNrJyB8fCB0eXBlID09ICdkYmxjbGljaycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5
cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9m
KCdtb3VzZScpID09IDApe1xuXHRcdHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0g
KCFkb2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9j
Lmh0bWwgOiBkb2MuYm9keTtcblx0XHR0aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFn
ZVggIT0gbnVsbCkgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVm
dCxcblx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQu
Y2xpZW50WSArIGRvYy5zY3JvbGxUb3Bcblx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRc
dFx0eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZz
ZXQgOiBldmVudC5jbGllbnRYLFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZl
bnQucGFnZVkgLSB3aW4ucGFnZVlPZmZzZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRp
ZiAodHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09
ICdtb3VzZXdoZWVsJykgdGhpcy53aGVlbCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xu
XHRcdHRoaXMucmlnaHRDbGljayA9IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9
PSAyKTtcblx0XHRpZiAodHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcg
fHwgdHlwZSA9PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0
dmFyIG92ZXJUYXJnZXQgPSB0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50
ZXInO1xuXHRcdFx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50Wyhv
dmVyVGFyZ2V0ID8gJ2Zyb20nIDogJ3RvJykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJl
bGF0ZWQgJiYgcmVsYXRlZC5ub2RlVHlwZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnRO
b2RlO1xuXHRcdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5c
dFx0fVxuXHR9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5k
ZXhPZignZ2VzdHVyZScpID09IDApe1xuXHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlv
bjtcblx0XHR0aGlzLnNjYWxlID0gZXZlbnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVz
ID0gZXZlbnQudGFyZ2V0VG91Y2hlcztcblx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQu
Y2hhbmdlZFRvdWNoZXM7XG5cdFx0dmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50
b3VjaGVzO1xuXHRcdGlmICh0b3VjaGVzICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNo
ID0gdG91Y2hlc1swXTtcblx0XHRcdHRoaXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91
Y2gucGFnZVl9O1xuXHRcdFx0dGhpcy5jbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91
Y2guY2xpZW50WX07XG5cdFx0fVxuXHR9XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGll
bnQgPSB7fTtcblx0aWYgKCF0aGlzLnBhZ2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2
ZW50LmltcGxlbWVudCh7XG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5w
cmV2ZW50RGVmYXVsdCgpLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdh
dGlvbjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRo
aXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1
YmJsZSA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6
IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZl
bnQucHJldmVudERlZmF1bHQoKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBm
YWxzZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5
ID0gZnVuY3Rpb24oY29kZSwga2V5KXtcblx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0
aGlzO1xufTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVy
bG9hZFNldHRlcih0cnVlKTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcs
ICc0MCc6ICdkb3duJywgJzM3JzogJ2xlZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNj
JywgJzMyJzogJ3NwYWNlJywgJzgnOiAnYmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2Jzog
J2RlbGV0ZScsICcxMyc6ICdlbnRlcidcbn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1c
blxubmFtZTogRWxlbWVudC5FdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBt
ZXRob2RzIGZvciBkZWFsaW5nIHdpdGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBt
b3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNz
YXJ5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50
LCBFdmVudF1cblxucHJvdmlkZXM6IEVsZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rp
b24oKXtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50
cyl7XG5cdHRoaXMuYWRkRXZlbnRzKGV2ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywg
RG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0
eXBlLCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtc
blx0XHRpZiAoIWV2ZW50c1t0eXBlXSkgZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6
IFtdfTtcblx0XHRpZiAoZXZlbnRzW3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhp
cztcblx0XHRldmVudHNbdHlwZV0ua2V5cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0
eXBlLFxuXHRcdFx0Y3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRp
b24gPSBmbixcblx0XHRcdHNlbGYgPSB0aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYg
KGN1c3RvbS5vbkFkZCkgY3VzdG9tLm9uQWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0
aWYgKGN1c3RvbS5jb25kaXRpb24pe1xuXHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVu
dCl7XG5cdFx0XHRcdFx0aWYgKGN1c3RvbS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlw
ZSkpIHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtc
blx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBG
dW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0
XHR2YXIgZGVmbiA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0
XHR9O1xuXHRcdHZhciBuYXRpdmVFdmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBl
XTtcblx0XHRpZiAobmF0aXZlRXZlbnQpe1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xu
XHRcdFx0XHRkZWZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERP
TUV2ZW50KGV2ZW50LCBzZWxmLmdldFdpbmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9u
LmNhbGwoc2VsZiwgZXZlbnQpID09PSBmYWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xu
XHRcdFx0fVxuXHRcdFx0dGhpcy5hZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRz
WzJdKTtcblx0XHR9XG5cdFx0ZXZlbnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5c
dFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRz
IHx8ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5
cGVdO1xuXHRcdHZhciBpbmRleCA9IGxpc3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5k
ZXggPT0gLTEpIHJldHVybiB0aGlzO1xuXHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4
XTtcblx0XHRkZWxldGUgbGlzdC5rZXlzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNb
aW5kZXhdO1xuXHRcdHZhciBjdXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAo
Y3VzdG9tKXtcblx0XHRcdGlmIChjdXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxs
KHRoaXMsIGZuLCB0eXBlKTtcblx0XHRcdGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9u
LmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVy
biAoRWxlbWVudC5OYXRpdmVFdmVudHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBl
LCB2YWx1ZSwgYXJndW1lbnRzWzJdKSA6IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5j
dGlvbihldmVudHMpe1xuXHRcdGZvciAodmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVu
dChldmVudCwgZXZlbnRzW2V2ZW50XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVt
b3ZlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBl
T2YoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlz
LnJlbW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0
XHR9XG5cdFx0dmFyIGF0dGFjaGVkID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYg
KCFhdHRhY2hlZCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0
eXBlIGluIGF0dGFjaGVkKSB0aGlzLnJlbW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxp
bWluYXRlKCdldmVudHMnKTtcblx0XHR9IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRc
dFx0YXR0YWNoZWRbZXZlbnRzXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlz
LnJlbW92ZUV2ZW50KGV2ZW50cywgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUg
YXR0YWNoZWRbZXZlbnRzXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Zmly
ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRo
aXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0p
IHJldHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZl
bnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRl
bGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7
XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6
IGZ1bmN0aW9uKGZyb20sIHR5cGUpe1xuXHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0
XHR2YXIgZXZlbnRzID0gZnJvbS5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMp
IHJldHVybiB0aGlzO1xuXHRcdGlmICghdHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUg
aW4gZXZlbnRzKSB0aGlzLmNsb25lRXZlbnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNl
IGlmIChldmVudHNbdHlwZV0pe1xuXHRcdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlv
bihmbil7XG5cdFx0XHRcdHRoaXMuYWRkRXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2
ZW50cyA9IHtcblx0Y2xpY2s6IDIsIGRibGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246
IDIsIGNvbnRleHRtZW51OiAyLCAvL21vdXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hl
ZWw6IDIsIERPTU1vdXNlU2Nyb2xsOiAyLCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwg
bW91c2VvdXQ6IDIsIG1vdXNlbW92ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwg
Ly9tb3VzZSBtb3ZlbWVudFxuXHRrZXlkb3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8v
a2V5Ym9hcmRcblx0b3JpZW50YXRpb25jaGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0
OiAyLCB0b3VjaG1vdmU6IDIsIHRvdWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hc
blx0Z2VzdHVyZXN0YXJ0OiAyLCBnZXN0dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBn
ZXN0dXJlXG5cdGZvY3VzOiAyLCBibHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6
IDIsIHN1Ym1pdDogMiwgcGFzdGU6IDIsIGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9h
ZDogMiwgdW5sb2FkOiAxLCBiZWZvcmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9N
Q29udGVudExvYWRlZDogMSwgcmVhZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNo
YW5nZTogMSwgcG9wc3RhdGU6IDIsIHBhZ2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9y
eVxuXHRlcnJvcjogMSwgYWJvcnQ6IDEsIHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07
XG5cbkVsZW1lbnQuRXZlbnRzID0ge1xuXHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hl
ZWwnIGluIGRvY3VtZW50ID8gJ3doZWVsJyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8g
J21vdXNld2hlZWwnIDogJ0RPTU1vdXNlU2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBm
dW5jdGlvbihldmVudCl7XG5cdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0
aWYgKHJlbGF0ZWQgPT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJu
IGZhbHNlO1xuXHRyZXR1cm4gKHJlbGF0ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAn
eHVsJyAmJiB0eXBlT2YodGhpcykgIT0gJ2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxh
dGVkKSk7XG59O1xuXG5pZiAoJ29ubW91c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50KXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZl
RXZlbnRzLm1vdXNlbGVhdmUgPSAyO1xuXHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNr
O1xufSBlbHNlIHtcblx0RWxlbWVudC5FdmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAn
bW91c2VvdmVyJyxcblx0XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVu
dHMubW91c2VsZWF2ZSA9IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjog
Y2hlY2tcblx0fTtcbn1cblxuLyo8bHRJRTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIpe1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1l
bnQuRXZlbnRzLmNoYW5nZSA9IHtcblx0XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5
cGUgPSB0aGlzLnR5cGU7XG5cdFx0XHRyZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQn
ICYmICh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHlj
aGFuZ2UnIDogJ2NoYW5nZSc7XG5cdFx0fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50
KXtcblx0XHRcdHJldHVybiBldmVudC50eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQu
ZXZlbnQucHJvcGVydHlOYW1lID09ICdjaGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJ
RTk+Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9u
XG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5j
bHVkZSB0aGUgZGVsZWdhdGUgbWV0aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2Vt
ZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50
LkV2ZW50XVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4o
ZnVuY3Rpb24oKXtcblxudmFyIGV2ZW50TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcjtcblxuRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0
aXZlRXZlbnRzLmZvY3Vzb3V0ID0gMjtcblxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwg
bWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0g
c2VsZil7XG5cdFx0aWYgKG1hdGNoKHRhcmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJn
ZXQsIGV2ZW50LCB0YXJnZXQpO1xuXHRcdHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJl
bnROb2RlKTtcblx0fVxufTtcblxudmFyIG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJh
c2U6ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tc
blx0fSxcblx0bW91c2VsZWF2ZToge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0
aW9uOiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6
ICdmb2N1cycgKyAoZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1
cmU6IHRydWVcblx0fSxcblx0Ymx1cjoge1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0
ID8gJ2JsdXInIDogJ2ZvY3Vzb3V0Jyxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8q
PGx0SUU5PiovXG52YXIgX2tleSA9ICckZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9
IGZ1bmN0aW9uKHR5cGUpe1xuXG5cdHJldHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5c
blx0XHRyZW1vdmU6IGZ1bmN0aW9uKHNlbGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYu
cmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAo
bGlzdCAmJiBsaXN0LmZvcm1zKSBmb3IgKHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTsp
e1xuXHRcdFx0XHQvLyB0aGUgZm9ybSBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29u
J3QgaGF2ZSB0aGVcblx0XHRcdFx0Ly8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRo
YXQgY2FzZSB0aGUgZXZlbnQgd2FzXG5cdFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRc
dFx0aWYgKGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZl
bnQodHlwZSwgbGlzdC5mbnNbaV0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1
bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBm
b3JtID0gKHRhcmdldC5nZXQoJ3RhZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJn
ZXQuZ2V0UGFyZW50KCdmb3JtJyk7XG5cdFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0
dmFyIGxpc3RlbmVycyA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywg
e30pLFxuXHRcdFx0XHRsaXN0ZW5lciA9IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZu
czogW119LFxuXHRcdFx0XHRmb3JtcyA9IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5m
bnM7XG5cblx0XHRcdGlmIChmb3Jtcy5pbmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0
XHRmb3Jtcy5wdXNoKGZvcm0pO1xuXG5cdFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xu
XHRcdFx0XHRidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0
fTtcblx0XHRcdGZvcm0uYWRkRXZlbnQodHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7
XG5cblx0XHRcdGxpc3RlbmVyc1t1aWRdID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9r
ZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxu
dmFyIGlucHV0T2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNl
OiAnZm9jdXNpbicsXG5cdFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50
LCB0YXJnZXQpe1xuXHRcdFx0dmFyIGV2ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0
XHR0aGlzLnJlbW92ZUV2ZW50cyhldmVudHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlw
ZV0gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwg
ZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhl
dmVudHMpO1xuXHRcdH1cblx0fTtcbn07XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9i
amVjdC5hcHBlbmQobWFwLCB7XG5cdHN1Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0
cmVzZXQ6IGZvcm1PYnNlcnZlcigncmVzZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdj
aGFuZ2UnKSxcblx0c2VsZWN0OiBpbnB1dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJ
RTk+Ki9cblxudmFyIHByb3RvID0gRWxlbWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJv
dG8uYWRkRXZlbnQsXG5cdHJlbW92ZUV2ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciBy
ZWxheSA9IGZ1bmN0aW9uKG9sZCwgbWV0aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZu
LCB1c2VDYXB0dXJlKXtcblx0XHRpZiAodHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0
dXJuIG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2Vk
ID0gU2xpY2sucGFyc2UodHlwZSkuZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5w
c2V1ZG9zWzBdLmtleSAhPSAncmVsYXknKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4s
IHVzZUNhcHR1cmUpO1xuXHRcdHZhciBuZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQu
cHNldWRvcy5zbGljZSgxKS5lYWNoKGZ1bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9
ICc6JyArIHBzZXVkby5rZXkgKyAocHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsg
JyknIDogJycpO1xuXHRcdH0pO1xuXHRcdG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRy
ZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUs
IGZuKTtcblx0fTtcbn07XG5cbnZhciBkZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5j
dGlvbih0eXBlLCBtYXRjaCwgZm4pe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgn
JGRlbGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVk
KSBmb3IgKHZhciBfdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09
IGZuICYmIHN0b3JlZFtfdWlkXS5tYXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxu
XG5cdFx0dmFyIF90eXBlID0gdHlwZSwgX21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0g
bWFwW3R5cGVdIHx8IHt9O1xuXHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRt
YXRjaCA9IGZ1bmN0aW9uKHRhcmdldCl7XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0
LCBfbWF0Y2gpO1xuXHRcdH07XG5cblx0XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVu
dHNbX3R5cGVdO1xuXHRcdGlmIChfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxl
bWVudEV2ZW50LmNvbmRpdGlvbil7XG5cdFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRp
b24gPSBfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0
Y2ggPSBmdW5jdGlvbih0YXJnZXQsIGV2ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFy
Z2V0LCBldmVudCkgJiYgY29uZGl0aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0
XHR9O1xuXHRcdH1cblxuXHRcdHZhciBzZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlE
KCk7XG5cdFx0dmFyIGRlbGVnYXRvciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRh
cmdldCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdl
dCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1h
dGNoLCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRh
cmdldCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdl
dCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNo
LCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQg
PSB7fTtcblx0XHRzdG9yZWRbdWlkXSA9IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRm
bjogX2ZuLFxuXHRcdFx0ZGVsZWdhdG9yOiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2Vb
X3R5cGVdID0gc3RvcmVkO1xuXHRcdHJldHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRl
bGVnYXRvciwgX21hcC5jYXB0dXJlKTtcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24o
dHlwZSwgbWF0Y2gsIGZuLCBfdWlkKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUo
JyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9y
ZWQpIHJldHVybiB0aGlzO1xuXG5cdFx0aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlw
ZSwgZGVsZWdhdG9yID0gc3RvcmVkW191aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8
fCB7fTtcblx0XHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5y
ZW1vdmUpIF9tYXAucmVtb3ZlKHRoaXMsIF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlk
XTtcblx0XHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2
ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxu
XHRcdHZhciBfX3VpZCwgcztcblx0XHRpZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0
XHRcdHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5m
biA9PSBmbikgcmV0dXJuIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBt
YXRjaCwgZm4sIF9fdWlkKTtcblx0XHR9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRc
dFx0cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdh
dGlvbi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERv
Y3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50
LCBkZWxlZ2F0aW9uLmFkZEV2ZW50KSxcblx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50
LCBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogRWxlbWVudC5TdHlsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50
ZXJhY3Rpbmcgd2l0aCB0aGUgc3R5bGVzIG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxu
cHJvdmlkZXM6IEVsZW1lbnQuU3R5bGVcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFy
IGh0bWwgPSBkb2N1bWVudC5odG1sLCBlbDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xk
SUUsIHdoaWNoIGRvZXMgbm90IHJlbW92ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxs
XG5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAn
cmVkJztcbmVsLnN0eWxlLmNvbG9yID0gbnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0g
ZWwuc3R5bGUuY29sb3IgPT0gJ3JlZCc7XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0
dXJucyBib3JkZXIqIHNob3J0aGFuZCBzdHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13
aWR0aC1zdHlsZSBpbnN0ZWFkIG9mIHdpZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcx
cHggc29saWQgIzEyM2FiYyc7XG5lbC5zdHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJu
c0JvcmRlcnNJbldyb25nT3JkZXIgPSBlbC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBu
dWxsO1xuLy88L2x0SUU5PlxuXG52YXIgaGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93Lmdl
dENvbXB1dGVkU3R5bGUsXG5cdHN1cHBvcnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKS5zdHlsZS5ib3JkZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9w
ZXJ0aWVzLnN0eWxlcyA9IHtzZXQ6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVz
KHN0eWxlcyk7XG59fTtcblxudmFyIGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9
IG51bGwpLFxuXHRoYXNGaWx0ZXIgPSAoaHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJl
QWxwaGEgPSAvYWxwaGFcXChvcGFjaXR5PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJp
bGl0eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3Bh
Y2l0eScsIG9wYWNpdHkpO1xuXHRlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4g
MCB8fCBvcGFjaXR5ID09IG51bGwgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0
SUU5PlxudmFyIHNldEZpbHRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xu
XHR2YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8
fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0
ZXIgPSAocmVnZXhwLnRlc3QoZmlsdGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUp
IDogZmlsdGVyICsgJyAnICsgdmFsdWUpLnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0
eWxlLnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0
T3BhY2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVs
ZW1lbnQuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9u
KGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVt
ZW50LmN1cnJlbnRTdHlsZS5oYXNMYXlvdXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlm
IChvcGFjaXR5ID09IG51bGwgfHwgb3BhY2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVu
dCwgcmVBbHBoYSwgJycpO1xuXHRcdGlmIChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVt
ZW50KSAhPSAxKSBzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAw
KScpO1xuXHR9IGVsc2Uge1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEo
b3BhY2l0eT0nICsgKG9wYWNpdHkgKiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7
XG5cdH1cbn0gOiBzZXRWaXNpYmlsaXR5KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNp
dHkgPyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9w
YWNpdHkgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAo
b3BhY2l0eSA9PSAnJykgPyAxIDogb3BhY2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/
IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVy
IHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5c
dGlmIChmaWx0ZXIpIG9wYWNpdHkgPSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAo
b3BhY2l0eSA9PSBudWxsIHx8IGZpbHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEw
MCk7XG59IDogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRy
aWV2ZSgnJG9wYWNpdHknKTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVt
ZW50LnN0eWxlLnZpc2liaWxpdHkgPT0gJ2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFj
aXR5O1xufSkpO1xuXG52YXIgZmxvYXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVs
bCkgPyAnc3R5bGVGbG9hdCcgOiAnY3NzRmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0
OiAnMCUnLCB0b3A6ICcwJScsIGNlbnRlcjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTog
JzEwMCUnfSxcblx0aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3Jv
dW5kUG9zaXRpb25YICE9IG51bGwpLFxuXHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52
YXIgY2FtZWxDYXNlID0gZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVw
bGFjZShwcmVmaXhQYXR0ZXJuLCAnJDEtJykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5c
bnZhciByZW1vdmVTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9w
ZXJ0eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRl
KHByb3BlcnR5ICsgJ1gnKTtcblx0XHRwcm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVt
b3ZlQXR0cmlidXRlKHByb3BlcnR5KTtcbn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVt
ZW50KHtcblxuXHRnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYg
KCFoYXNHZXRDb21wdXRlZFN0eWxlICYmIHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5j
dXJyZW50U3R5bGVbY2FtZWxDYXNlKHByb3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0g
RWxlbWVudC5nZXREb2N1bWVudCh0aGlzKS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0g
ZGVmYXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDog
bnVsbDtcblx0XHRyZXR1cm4gKGNvbXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUo
KHByb3BlcnR5ID09IGZsb2F0TmFtZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkp
IDogJyc7XG5cdH0sXG5cblx0c2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5c
dFx0aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkg
dmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUp
O1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHBy
b3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVP
Zih2YWx1ZSkgIT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1tw
cm9wZXJ0eV0gfHwgJ0AnKS5zcGxpdCgnICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0
KHZhbHVlKS5tYXAoZnVuY3Rpb24odmFsLCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVy
biAnJztcblx0XHRcdFx0cmV0dXJuICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0u
cmVwbGFjZSgnQCcsIE1hdGgucm91bmQodmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7
XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0
dmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0
eV0gPSB2YWx1ZTtcblx0XHQvLzxsdElFOT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVl
ID09IG51bGwpICYmIGRvZXNOb3RSZW1vdmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRy
aWJ1dGUpe1xuXHRcdFx0cmVtb3ZlU3R5bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1c
blx0XHQvLzwvbHRJRTk+XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1
bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4g
Z2V0T3BhY2l0eSh0aGlzKTtcblx0XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAn
ZmxvYXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFk
aXVzICYmIHByb3BlcnR5LmluZGV4T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJl
dHVybiBbJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9y
ZGVyQm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5j
dGlvbihjb3JuZXIpe1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgn
O1xuXHRcdFx0fSwgdGhpcykuam9pbignICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhp
cy5zdHlsZVtwcm9wZXJ0eV07XG5cdFx0aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRl
eCcpe1xuXHRcdFx0aWYgKEVsZW1lbnQuU2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVy
dHkpKXtcblx0XHRcdFx0cmVzdWx0ID0gW107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVu
dC5TaG9ydFN0eWxlc1twcm9wZXJ0eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xu
XHRcdFx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9
IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNr
Z3JvdW5kUG9zaXRpb25YWSAmJiAvXmJhY2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9w
ZXJ0eSkpe1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxs
ZWZ0KS9nLCBmdW5jdGlvbihwb3NpdGlvbil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9u
c1twb3NpdGlvbl07XG5cdFx0XHR9KSB8fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQg
JiYgcHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5c
dFx0aWYgKHJlc3VsdCl7XG5cdFx0XHRyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZh
ciBjb2xvciA9IHJlc3VsdC5tYXRjaCgvcmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRp
ZiAoY29sb3IpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JU
b0hleCgpKTtcblx0XHR9XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0
eWxlW3Byb3BlcnR5XSl7XG5cdFx0XHRpZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9w
ZXJ0eSkgJiYgISgvcHgkLy50ZXN0KHJlc3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChw
cm9wZXJ0eSA9PSAnd2lkdGgnKSA/IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9t
J10sIHNpemUgPSAwO1xuXHRcdFx0XHR2YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
XHRcdFx0c2l6ZSArPSB0aGlzLmdldFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcp
LnRvSW50KCkgKyB0aGlzLmdldFN0eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0
XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRcdHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHku
Y2FwaXRhbGl6ZSgpXSAtIHNpemUgKyAncHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRl
ciguKylXaWR0aHxtYXJnaW58cGFkZGluZy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNl
RmxvYXQocmVzdWx0KSkpe1xuXHRcdFx0XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxu
XHRcdC8vPGx0SUU5PlxuXHRcdGlmIChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJv
cmRlcihUb3B8UmlnaHR8Qm90dG9tfExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVz
dChyZXN1bHQpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxz
KC4rKSQvLCAnJDIgJDMgJDEnKTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJu
IHJlc3VsdDtcblx0fSxcblxuXHRzZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9y
ICh2YXIgc3R5bGUgaW4gc3R5bGVzKSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVd
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1
bmN0aW9uKGtleSl7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0
XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0
eWxlcyA9IHtcblx0bGVmdDogJ0BweCcsIHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0
OiAnQHB4Jyxcblx0d2lkdGg6ICdAcHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcs
IG1heEhlaWdodDogJ0BweCcsIG1pbldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0
YmFja2dyb3VuZENvbG9yOiAncmdiKEAsIEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBi
YWNrZ3JvdW5kUG9zaXRpb246ICdAcHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRm
b250U2l6ZTogJ0BweCcsIGxldHRlclNwYWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4Jywg
Y2xpcDogJ3JlY3QoQHB4IEBweCBAcHggQHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBw
eCcsIHBhZGRpbmc6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwg
QCkgQHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRo
OiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6
ICdyZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxu
XHR6SW5kZXg6ICdAJywgJ3pvb20nOiAnQCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDog
J0BweCcsIG9wYWNpdHk6ICdAJywgYm9yZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtc
blxuXG5cblxuXG5FbGVtZW50LlNob3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9
LCBib3JkZXI6IHt9LCBib3JkZXJXaWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29s
b3I6IHt9fTtcblxuWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0
aW9uKGRpcmVjdGlvbil7XG5cdHZhciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZh
ciBBbGwgPSBFbGVtZW50LlN0eWxlcztcblx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVu
Y3Rpb24oc3R5bGUpe1xuXHRcdHZhciBzZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0
W3N0eWxlXVtzZF0gPSBBbGxbc2RdID0gJ0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVy
JyArIGRpcmVjdGlvbjtcblx0U2hvcnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdi
KEAsIEAsIEApJztcblx0dmFyIGJkdyA9IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUn
LCBiZGMgPSBiZCArICdDb2xvcic7XG5cdFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJX
aWR0aFtiZHddID0gU2hvcnRbYmRdW2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5i
b3JkZXJTdHlsZVtiZHNdID0gU2hvcnRbYmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hv
cnQuYm9yZGVyQ29sb3JbYmRjXSA9IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAs
IEAsIEApJztcbn0pO1xuXG5pZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hv
cnRTdHlsZXMuYmFja2dyb3VuZFBvc2l0aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywg
YmFja2dyb3VuZFBvc2l0aW9uWTogJ0AnfTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxl
bWVudC5EaW1lbnNpb25zXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsg
d2l0aCBzaXplLCBzY3JvbGwsIG9yIHBvc2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2lu
ZG93IG9iamVjdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4g
IC0gRWxlbWVudCBwb3NpdGlvbmluZyBiYXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294
ZG9vLm9yZy8pIGNvZGUgYW5kIHNtYXJ0IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0
dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVu
c2lvbnMgYmFzZWQgb24gW1lVSV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29k
ZSwgW0JTRCBMaWNlbnNlXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5o
dG1sKS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczog
W0VsZW1lbnQuRGltZW5zaW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxl
bWVudC5hcHBlbmRDaGlsZChjaGlsZCk7XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxk
Lm9mZnNldFBhcmVudCA9PT0gZWxlbWVudCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52
YXIgaGVpZ2h0Q29tcG9uZW50cyA9IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0Jv
dHRvbScsICdib3JkZXJUb3BXaWR0aCcsICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENv
bXBvbmVudHMgPSBbJ3dpZHRoJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3Jk
ZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6
ZSA9IGZ1bmN0aW9uKGVsKXtcblxuXHR2YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUo
ZWwpLFxuXHRcdGJvdW5kcyA9IHt4OiAwLCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVh
Y2goZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtc
blx0fSk7XG5cdHdpZHRoQ29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRz
LnggKz0gcGFyc2VGbG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtc
blxudmFyIGlzT2Zmc2V0ID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWws
ICdwb3NpdGlvbicpICE9ICdzdGF0aWMnIHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZz
ZXRTdGF0aWMgPSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86
dGFibGV8dGR8dGgpJC9pKS50ZXN0KGVsLnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1l
bnQoe1xuXG5cdHNjcm9sbFRvOiBmdW5jdGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMp
KXtcblx0XHRcdHRoaXMuZ2V0V2luZG93KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtc
blx0XHRcdHRoaXMuc2Nyb2xsTGVmdCA9IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5c
dFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xu
XG5cdFx0Ly88bHRJRTk+XG5cdFx0Ly8gVGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNh
bm5vdCBjYWxjdWxhdGUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlz
aWJpbGl0eSBoaWRkZW4uXG5cdFx0aWYgKCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJu
IHt4OiB0aGlzLm9mZnNldFdpZHRoLCB5OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0
SUU5PlxuXG5cdFx0Ly8gVGhpcyBzdmcgc2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3Vs
YXRlU2l6ZSgpYCwgY2FuIGJlIHJlbW92ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVn
LlxuXHRcdC8vIEJ1ZyBpbmZvOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVn
LmNnaT9pZD01MzA5ODVcblx0XHRpZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4g
c3ZnQ2FsY3VsYXRlU2l6ZSh0aGlzKTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0g
dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndp
ZHRoLCB5OiBib3VuZHMuaGVpZ2h0fTtcblx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7
eDogMCwgeTogMH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7
XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xs
U2l6ZSgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxI
ZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5
KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4g
e3g6IHRoaXMuc2Nyb2xsTGVmdCwgeTogdGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNj
cm9sbHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBv
c2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxl
bWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRw
b3NpdGlvbi55ICs9IGVsZW1lbnQuc2Nyb2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQu
cGFyZW50Tm9kZTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9m
ZnNldFBhcmVudDogYnJva2VuT2Zmc2V0UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxl
bWVudCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVt
ZW50LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09m
ZnNldENoZWNrID0gKHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMn
KSA/IGlzT2Zmc2V0U3RhdGljIDogaXNPZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxl
bWVudC5wYXJlbnROb2RlKSl7XG5cdFx0XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0
dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtc
blx0XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHls
ZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxu
XHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRj
aCAoZSl7fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0O1xuXG5cdFx0aWYgKGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2
YXIgYm91bmQgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0g
ZG9jdW1lbnQuaWQodGhpcy5nZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRc
dGh0bWxTY3JvbGwgPSBodG1sLmdldFNjcm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRo
aXMuZ2V0U2Nyb2xscygpLFxuXHRcdFx0XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdw
b3NpdGlvbicpID09ICdmaXhlZCcpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3Vu
ZC5sZWZ0LnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxT
Y3JvbGwueCkgLSBodG1sLmNsaWVudExlZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0
KCkgKyBlbGVtU2Nyb2xscy55ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRt
bC5jbGllbnRUb3Bcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBw
b3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9z
aXRpb247XG5cblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRc
dHBvc2l0aW9uLnggKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBl
bGVtZW50Lm9mZnNldFRvcDtcblxuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50
O1xuXHRcdH1cblxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjog
ZnVuY3Rpb24ocmVsYXRpdmUpe1xuXHRcdHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxc
blx0XHRcdHNjcm9sbCA9IHRoaXMuZ2V0U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtc
blx0XHRcdHg6IG9mZnNldC54IC0gc2Nyb2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9s
bC55XG5cdFx0fTtcblxuXHRcdGlmIChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5p
ZChyZWxhdGl2ZSkpKXtcblx0XHRcdHZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0
UG9zaXRpb24oKTtcblx0XHRcdHJldHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRp
b24ueCAtIGxlZnRCb3JkZXIocmVsYXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3Np
dGlvbi55IC0gdG9wQm9yZGVyKHJlbGF0aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlv
bjtcblx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYg
KGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtc
blx0XHR2YXIgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6
ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlv
bi54LFxuXHRcdFx0dG9wOiBwb3NpdGlvbi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRc
dGhlaWdodDogc2l6ZS55XG5cdFx0fTtcblx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53
aWR0aDtcblx0XHRvYmouYm90dG9tID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJu
IG9iajtcblx0fSxcblxuXHRjb21wdXRlUG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0
dXJuIHtcblx0XHRcdGxlZnQ6IG9iai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0
JyksXG5cdFx0XHR0b3A6IG9iai55IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxu
XHRcdH07XG5cdH0sXG5cblx0c2V0UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJu
IHRoaXMuc2V0U3R5bGVzKHRoaXMuY29tcHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xu
XG5cbltEb2N1bWVudCwgV2luZG93XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXpl
OiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRc
dHJldHVybiB7eDogZG9jLmNsaWVudFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxc
blxuXHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93
KCksIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFn
ZVhPZmZzZXQgfHwgZG9jLnNjcm9sbExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Ny
b2xsVG9wfTtcblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBk
b2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCks
XG5cdFx0XHRib2R5ID0gdGhpcy5nZXREb2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6
IE1hdGgubWF4KGRvYy5zY3JvbGxXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBN
YXRoLm1heChkb2Muc2Nyb2xsSGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0
fSxcblxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9
O1xuXHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0g
dGhpcy5nZXRTaXplKCk7XG5cdFx0cmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6
ZS55LCByaWdodDogc2l6ZS54LCBoZWlnaHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1c
blxufSk7XG5cbi8vIHByaXZhdGUgbWV0aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50
LmdldENvbXB1dGVkU3R5bGU7XG5cbmZ1bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxl
KXtcblx0cmV0dXJuIHN0eWxlU3RyaW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59
XG5cblxuXG5mdW5jdGlvbiB0b3BCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJl
cihlbGVtZW50LCAnYm9yZGVyLXRvcC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVy
KGVsZW1lbnQpe1xuXHRyZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdp
ZHRoJyk7XG59XG5cbmZ1bmN0aW9uIGlzQm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJv
ZHl8aHRtbCkkL2kpLnRlc3QoZWxlbWVudC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29t
cGF0RWxlbWVudChlbGVtZW50KXtcblx0dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtc
blx0cmV0dXJuICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21w
YXQnKSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxl
bWVudC5hbGlhcyh7cG9zaXRpb246ICdzZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5c
bltXaW5kb3csIERvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRn
ZXRIZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0s
XG5cblx0Z2V0V2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7
XG5cdH0sXG5cblx0Z2V0U2Nyb2xsVG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdl
dFNjcm9sbCgpLnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRn
ZXRTY3JvbGxXaWR0aDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXpl
KCkueDtcblx0fSxcblxuXHRnZXRUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0
UG9zaXRpb24oKS55O1xuXHR9LFxuXG5cdGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMuZ2V0UG9zaXRpb24oKS54O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJl
IGV4dGVuZGVkIGJ5IGFsbCBvdGhlciBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxucmVxdWlyZXM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVu
YWJsZV1cblxucHJvdmlkZXM6IEZ4XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBG
eCA9IHRoaXMuRnggPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRz
LCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0
b25TdGFydDogbmlsLFxuXHRcdG9uQ2FuY2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxu
XHRcdCovXG5cdFx0ZnBzOiA2MCxcblx0XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAw
LFxuXHRcdGZyYW1lczogbnVsbCxcblx0XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2ln
bm9yZSdcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlz
LnN1YmplY3QgPSB0aGlzLnN1YmplY3QgfHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0
aW9ucyk7XG5cdH0sXG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
ZnVuY3Rpb24ocCl7XG5cdFx0XHRyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAv
IDI7XG5cdFx0fTtcblx0fSxcblxuXHRzdGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlz
Lm9wdGlvbnMuZnJhbWVTa2lwKXtcblx0XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxs
KSA/IChub3cgLSB0aGlzLnRpbWUpIDogMCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRl
cnZhbDtcblx0XHRcdHRoaXMudGltZSA9IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVz
O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRo
aXMuZnJhbWUgPCB0aGlzLmZyYW1lcyl7XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRp
b24odGhpcy5mcmFtZSAvIHRoaXMuZnJhbWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0
ZSh0aGlzLmZyb20sIHRoaXMudG8sIGRlbHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMu
ZnJhbWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZy
b20sIHRoaXMudG8sIDEpKTtcblx0XHRcdHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRz
ZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBm
dW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRv
LCBkZWx0YSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlz
UnVubmluZygpKSByZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtc
blx0XHRcdGNhc2UgJ2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0
Y2FzZSAnY2hhaW4nOiB0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlz
KSk7IHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0
YXJ0OiBmdW5jdGlvbihmcm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkg
cmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5mcm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5c
dFx0dGhpcy5mcmFtZSA9ICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0
aGlzLnRpbWUgPSBudWxsO1xuXHRcdHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlv
bigpO1xuXHRcdHZhciBmcmFtZXMgPSB0aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9w
dGlvbnMuZnBzLCBkdXJhdGlvbiA9IHRoaXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1
cmF0aW9uID0gRnguRHVyYXRpb25zW2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRc
dHRoaXMuZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFt
ZXMgfHwgTWF0aC5yb3VuZCh0aGlzLmR1cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0
XHRpZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlz
LnJlc2V0VGhlbmFibGUodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQo
J3N0YXJ0JywgdGhpcy5zdWJqZWN0KTtcblx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KHRoaXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJ
bnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJh
bWVzID09IHRoaXMuZnJhbWUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0
aGlzLnN1YmplY3QpO1xuXHRcdFx0XHRpZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2
ZW50KCdjaGFpbkNvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0
XHRcdHRoaXMuZmlyZUV2ZW50KCdzdG9wJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRc
dHRoaXMucmVzb2x2ZSh0aGlzLnN1YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigp
e1xuXHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5c
dFx0XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRo
aXMuZnJhbWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0
aGlzLnN1YmplY3QpLmNsZWFyQ2hhaW4oKTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVj
dCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigp
e1xuXHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5c
dFx0XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0
aGlzLmlzUGF1c2VkKCkpIHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0
XHR2YXIgbGlzdCA9IGluc3RhbmNlc1t0aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlz
dCAmJiBsaXN0LmNvbnRhaW5zKHRoaXMpO1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5p
bmcoKTtcblx0fVxuXG59KTtcblxuRnguY29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0
YSl7XG5cdHJldHVybiAodG8gLSBmcm9tKSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0
aW9ucyA9IHsnc2hvcnQnOiAyNTAsICdub3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8v
IGdsb2JhbCB0aW1lcnNcblxudmFyIGluc3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFy
IGxvb3AgPSBmdW5jdGlvbigpe1xuXHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIg
aSA9IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRc
dGlmIChpbnN0YW5jZSkgaW5zdGFuY2Uuc3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaElu
c3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAo
aW5zdGFuY2VzW2Zwc10gPSBbXSk7XG5cdGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNb
ZnBzXSkgdGltZXJzW2Zwc10gPSBsb29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBz
KSwgbGlzdCk7XG59O1xuXG52YXIgcHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFy
IGxpc3QgPSBpbnN0YW5jZXNbZnBzXTtcblx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhp
cyk7XG5cdFx0aWYgKCFsaXN0Lmxlbmd0aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUg
aW5zdGFuY2VzW2Zwc107XG5cdFx0XHR0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJz
W2Zwc10pO1xuXHRcdH1cblx0fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5D
U1NcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2Vk
IGJ5IEZ4LlR3ZWVuLCBGeC5Nb3JwaCwgRnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczog
RnguQ1NTXG5cbi4uLlxuKi9cblxuRnguQ1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBG
eCxcblxuXHQvL3ByZXBhcmVzIHRoZSBiYXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTog
ZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXku
Y29udmVydCh2YWx1ZXMpO1xuXHRcdHZhciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sx
XTtcblx0XHRpZiAodG8gPT0gbnVsbCl7XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0g
ZWxlbWVudC5nZXRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9u
cy51bml0O1xuXHRcdFx0Ly8gYWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1v
cnIvZngvYmxvYi9tYXN0ZXIvZnguanMjTDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0
eXBlb2YgZnJvbSA9PSAnc3RyaW5nJyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5p
dCAmJiBwYXJzZUZsb2F0KGZyb20pICE9IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHBy
b3BlcnR5LCB0byArIHVuaXQpO1xuXHRcdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1
dGVkU3R5bGUocHJvcGVydHkpO1xuXHRcdFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhl
bExlZnQgb3IgcGl4ZWxXaWR0aFxuXHRcdFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xu
XHRcdFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2Ft
ZWxDYXNlKCldO1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8v
IGFkYXB0ZWQgZnJvbSBEZWFuIEVkd2FyZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMv
MjAwNy8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0
ID0gZWxlbWVudC5zdHlsZS5sZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0g
dG8gKyB1bml0O1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtc
blx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRc
dFx0XHR9XG5cdFx0XHRcdGZyb20gPSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwg
MSkgKiAocGFyc2VGbG9hdChmcm9tKSB8fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShw
cm9wZXJ0eSwgZnJvbSArIHVuaXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206
IHRoaXMucGFyc2UoZnJvbSksIHRvOiB0aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJz
ZXMgYSB2YWx1ZSBpbnRvIGFuIGFycmF5XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0
XHR2YWx1ZSA9IEZ1bmN0aW9uLmNvbnZlcnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9m
IHZhbHVlID09ICdzdHJpbmcnKSA/IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZh
bHVlKTtcblx0XHRyZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBT
dHJpbmcodmFsKTtcblx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2go
RnguQ1NTLlBhcnNlcnMsIGZ1bmN0aW9uKHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0
dXJuO1xuXHRcdFx0XHR2YXIgcGFyc2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlm
IChwYXJzZWQgfHwgcGFyc2VkID09PSAwKSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6
IHBhcnNlcn07XG5cdFx0XHR9KTtcblx0XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWws
IHBhcnNlcjogRnguQ1NTLlBhcnNlcnMuU3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0
XHR9KTtcblx0fSxcblxuXHQvL2NvbXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2Jq
ZWN0cywgdXNpbmcgdGhlaXIgcGFyc2Vycy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0
bywgZGVsdGEpe1xuXHRcdHZhciBjb21wdXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxl
bmd0aCwgdG8ubGVuZ3RoKSkudGltZXMoZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNo
KHt2YWx1ZTogZnJvbVtpXS5wYXJzZXIuY29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1
ZSwgZGVsdGEpLCBwYXJzZXI6IGZyb21baV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0
ZWQuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVy
biBjb21wdXRlZDtcblx0fSxcblxuXHQvL3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxu
XHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9
ICdmeDpjc3M6dmFsdWUnKSB2YWx1ZSA9IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1
cm5lZCA9IFtdO1xuXHRcdHZhbHVlLmVhY2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVk
ID0gcmV0dXJuZWQuY29uY2F0KGJpdC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5c
dFx0fSk7XG5cdFx0cmV0dXJuIHJldHVybmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hh
bmdlIHRvIGFuIGVsZW1lbnRcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5
LCB2YWx1ZSwgdW5pdCl7XG5cdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2
ZSh2YWx1ZSwgdW5pdCkpO1xuXHR9LFxuXG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNz
cyB0byBmaW5kIHRoZSB2YWx1ZXMgZm9yIGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9u
KHNlbGVjdG9yKXtcblx0XHRpZiAoRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNT
Uy5DYWNoZVtzZWxlY3Rvcl07XG5cdFx0dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBS
ZWdFeHAoJ14nICsgc2VsZWN0b3IuZXNjYXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNl
YXJjaFN0eWxlcyA9IGZ1bmN0aW9uKHJ1bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1
bmN0aW9uKHJ1bGUpe1xuXHRcdFx0XHRpZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNo
U3R5bGVzKHJ1bGUucnVsZXMgfHwgcnVsZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xu
XHRcdFx0XHR9XG5cdFx0XHRcdGlmICghcnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIg
c2VsZWN0b3JUZXh0ID0gKHJ1bGUuc2VsZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJl
cGxhY2UoL15cXHcrLywgZnVuY3Rpb24obSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNh
c2UoKTtcblx0XHRcdFx0fSkgOiBudWxsO1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAh
c2VsZWN0b3JUZXN0LnRlc3Qoc2VsZWN0b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3Qu
ZWFjaChFbGVtZW50LlN0eWxlcywgZnVuY3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRp
ZiAoIXJ1bGUuc3R5bGVbc3R5bGVdIHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1
cm47XG5cdFx0XHRcdFx0dmFsdWUgPSBTdHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0
XHRcdHRvW3N0eWxlXSA9ICgoL15yZ2IvKS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgp
IDogdmFsdWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVh
Y2goZG9jdW1lbnQuc3R5bGVTaGVldHMsIGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVm
ID0gc2hlZXQuaHJlZjtcblx0XHRcdGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAt
MSAmJiBocmVmLmluZGV4T2YoZG9jdW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0
dmFyIHJ1bGVzID0gc2hlZXQucnVsZXMgfHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hT
dHlsZXMocnVsZXMpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3Jd
ID0gdG87XG5cdH1cblxufSk7XG5cbkZ4LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2Vy
cyA9IHtcblxuXHRDb2xvcjoge1xuXHRcdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRp
ZiAodmFsdWUubWF0Y2goL14jWzAtOWEtZl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1Jn
Yih0cnVlKTtcblx0XHRcdHJldHVybiAoKHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMq
KFxcZCspLFxccyooXFxkKykvKSkpID8gW3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDog
ZmFsc2U7XG5cdFx0fSxcblx0XHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xu
XHRcdFx0cmV0dXJuIGZyb20ubWFwKGZ1bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJu
IE1hdGgucm91bmQoRnguY29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0p
O1xuXHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1
ZS5tYXAoTnVtYmVyKTtcblx0XHR9XG5cdH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBh
cnNlRmxvYXQsXG5cdFx0Y29tcHV0ZTogRnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24o
dmFsdWUsIHVuaXQpe1xuXHRcdFx0cmV0dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVl
O1xuXHRcdH1cblx0fSxcblxuXHRTdHJpbmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVy
dChmYWxzZSksXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVy
biBvbmU7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4g
emVybztcblx0XHR9XG5cdH1cblxufTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhc
blxuZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24g
YW55IG51bWJlciBvZiBDU1MgcHJvcGVydGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmpl
Y3Qgb2YgcnVsZXMsIG9yIENTUyBiYXNlZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBo
XG5cbi4uLlxuKi9cblxuRnguTW9ycGggPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNT
UyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlz
LmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlz
LnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYg
KHR5cGVvZiBub3cgPT0gJ3N0cmluZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9y
ICh2YXIgcCBpbiBub3cpIHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlz
Lm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVu
Y3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIg
cCBpbiBmcm9tKSBub3dbcF0gPSB0aGlzLnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xu
XHRcdHJldHVybiBub3c7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xu
XHRcdGlmICghdGhpcy5jaGVjayhwcm9wZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5
cGVvZiBwcm9wZXJ0aWVzID09ICdzdHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJv
cGVydGllcyk7XG5cdFx0dmFyIGZyb20gPSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGlu
IHByb3BlcnRpZXMpe1xuXHRcdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1l
bnQsIHAsIHByb3BlcnRpZXNbcF0pO1xuXHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRc
dFx0dG9bcF0gPSBwYXJzZWQudG87XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9t
LCB0byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRz
ZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNl
dE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5j
dGlvbigpe1xuXHRcdHZhciBtb3JwaCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYg
KCFtb3JwaCl7XG5cdFx0XHRtb3JwaCA9IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNl
bCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1
cm4gbW9ycGg7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBm
dW5jdGlvbihwcm9wcyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRp
b25zXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9u
cyB0byBiZSB1c2VkIHdpdGggYW55IG9mIHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVy
dCBQZW5uZXIsIDxodHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVk
IGFuZCBvcHRpbWl6ZWQgdG8gYmUgdXNlZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhc
blxucHJvdmlkZXM6IEZ4LlRyYW5zaXRpb25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtc
blxuXHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0
aW9ucy50cmFuc2l0aW9uIHx8IEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlm
ICh0eXBlb2YgdHJhbnMgPT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxp
dCgnOicpO1xuXHRcdFx0dHJhbnMgPSBGeC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJh
bnNbZGF0YVswXV0gfHwgdHJhbnNbZGF0YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRh
dGFbMV0pIHRyYW5zID0gdHJhbnNbJ2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0
YVsyXSA/IGRhdGFbMl0uY2FwaXRhbGl6ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRy
YW5zO1xuXHR9XG5cbn0pO1xuXG5GeC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwg
cGFyYW1zKXtcblx0cGFyYW1zID0gQXJyYXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUlu
ID0gZnVuY3Rpb24ocG9zKXtcblx0XHRyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5c
dH07XG5cdHJldHVybiBPYmplY3QuYXBwZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUlu
LFxuXHRcdGVhc2VPdXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRp
b24oMSAtIHBvcywgcGFyYW1zKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9z
KXtcblx0XHRcdHJldHVybiAocG9zIDw9IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1z
KSA6ICgyIC0gdHJhbnNpdGlvbigyICogKDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1c
blx0fSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHpl
cm8pe1xuXHRcdHJldHVybiB6ZXJvO1xuXHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5l
eHRlbmQgPSBmdW5jdGlvbih0cmFuc2l0aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4g
dHJhbnNpdGlvbnMpIEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRp
b24odHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5k
KHtcblxuXHRQb3c6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYm
IHhbMF0gfHwgNik7XG5cdH0sXG5cblx0RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1h
dGgucG93KDIsIDggKiAocCAtIDEpKTtcblx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0
XHRyZXR1cm4gMSAtIE1hdGguc2luKE1hdGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVu
Y3Rpb24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9
LFxuXG5cdEJhY2s6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7
XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5c
blx0Qm91bmNlOiBmdW5jdGlvbihwKXtcblx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9
IDAsIGIgPSAxOyAxOyBhICs9IGIsIGIgLz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBh
KSAvIDExKXtcblx0XHRcdFx0dmFsdWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0g
MTEgKiBwKSAvIDQsIDIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0
dXJuIHZhbHVlO1xuXHR9LFxuXG5cdEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVy
biBNYXRoLnBvdygyLCAxMCAqIC0tcCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHgg
JiYgeFswXSB8fCAxKSAvIDMpO1xuXHR9XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVh
cnQnLCAnUXVpbnQnXS5lYWNoKGZ1bmN0aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0
aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJl
dHVybiBNYXRoLnBvdyhwLCBpICsgMik7XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTog
RnguVHdlZW5cblxuZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJh
bnNpdGlvbiBhbnkgQ1NTIHByb3BlcnR5IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVu
LCBFbGVtZW50LmZhZGUsIEVsZW1lbnQuaGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVu
ID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVu
Y3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0
ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0s
XG5cblx0c2V0OiBmdW5jdGlvbihwcm9wZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxl
bmd0aCA9PSAxKXtcblx0XHRcdG5vdyA9IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlz
LnByb3BlcnR5IHx8IHRoaXMub3B0aW9ucy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5k
ZXIodGhpcy5lbGVtZW50LCBwcm9wZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0
byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlz
O1xuXHRcdHZhciBhcmdzID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJv
cGVydHkgPSB0aGlzLm9wdGlvbnMucHJvcGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBw
YXJzZWQgPSB0aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtc
blx0XHRyZXR1cm4gdGhpcy5wYXJlbnQocGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxu
fSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9u
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZh
ciB0d2VlbiA9IHRoaXMucmV0cmlldmUoJ3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0
XHR0d2VlbiA9IG5ldyBGeC5Ud2Vlbih0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRo
aXMuc3RvcmUoJ3R3ZWVuJywgdHdlZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1c
blxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0
eSwgZnJvbSwgdG8pe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9t
LCB0byk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZmFkZSA9IHRoaXMuZ2V0KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHkn
XS5hcHBlbmQoYXJndW1lbnRzKSwgdG9nZ2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFy
Z3NbMV0gPSAndG9nZ2xlJztcblx0XHRzd2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4n
OiBtZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQn
OiBtZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93
JzogbWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUn
OiBtZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xl
Jzpcblx0XHRcdFx0dmFyIGZsYWcgPSB0aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdl
dFN0eWxlKCdvcGFjaXR5JykgPT0gMSk7XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0
XHRcdGFyZ3NbMV0gPSBmbGFnID8gMCA6IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6Zmxh
ZycsICFmbGFnKTtcblx0XHRcdFx0dG9nZ2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0
XHRkZWZhdWx0OiBtZXRob2QgPSAnc3RhcnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhp
cy5lbGltaW5hdGUoJ2ZhZGU6ZmxhZycpO1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBh
cmdzKTtcblx0XHR2YXIgdG8gPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0
aG9kID09ICdzZXQnKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAw
ID8gJ2hpZGRlbicgOiAndmlzaWJsZScpO1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0
XHRpZiAoZmFkZS4kY2hhaW4ubGVuZ3RoKXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigp
e1xuXHRcdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxl
Jyk7XG5cdFx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVs
c2Uge1xuXHRcdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0
XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0
XHRpZiAodGhpcy5lbGVtZW50LmdldFN0eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0
dGhpcy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0
aGlzLmNhbGxDaGFpbigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0aGlnaGxpZ2h0OiBmdW5jdGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7
XG5cdFx0XHRlbmQgPSB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdl
dFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNw
YXJlbnQnKSA/ICcjZmZmJyA6IGVuZDtcblx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQo
J3R3ZWVuJyk7XG5cdFx0dHdlZW4uc3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAn
I2ZmZmY4OCcsIGVuZCkuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2Jh
Y2tncm91bmQtY29sb3InLCB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5c
dFx0XHR0d2Vlbi5jYWxsQ2hhaW4oKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRp
b246IFBvd2VyZnVsIGFsbCBwdXJwb3NlIFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVl
c3QuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwg
RWxlbWVudCwgQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJd
XG5cbnByb3ZpZGVzOiBSZXF1ZXN0XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBl
bXB0eSA9IGZ1bmN0aW9uKCl7fSxcblx0cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBp
biBuZXcgQnJvd3Nlci5SZXF1ZXN0KTtcblxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBu
ZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFz
cy5UaGVuYWJsZV0sXG5cblx0b3B0aW9uczogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigp
e30sXG5cdFx0b25Mb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9n
cmVzczogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigp
e30sXG5cdFx0b25DYW5jZWw6IGZ1bmN0aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9u
KHJlc3BvbnNlVGV4dCwgcmVzcG9uc2VYTUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4
aHIpe30sXG5cdFx0b25FeGNlcHRpb246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxu
XHRcdG9uVGltZW91dDogZnVuY3Rpb24oKXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3Jk
OiAnJyxcblx0XHR3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRk
YXRhOiAnJyxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxI
dHRwUmVxdWVzdCcsXG5cdFx0XHQnQWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1s
LCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1
ZSxcblx0XHRmb3JtYXQ6IGZhbHNlLFxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdp
Z25vcmUnLFxuXHRcdGlzU3VjY2VzczogbnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0
dXJsRW5jb2RlZDogdHJ1ZSxcblx0XHRlbmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0
czogZmFsc2UsXG5cdFx0ZXZhbFJlc3BvbnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRc
dG5vQ2FjaGU6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7
XG5cdFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRp
b25zKG9wdGlvbnMpO1xuXHRcdHRoaXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xu
XHR9LFxuXG5cdG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMu
eGhyO1xuXHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVy
bjtcblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0
RnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0
dXM7XG5cdFx0XHR0aGlzLnN0YXR1cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7
XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7
XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3Rh
cnQgPSBlbXB0eTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhp
cy50aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJl
c3BvbnNlID0ge3RleHQ6IHRoaXMueGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnho
ci5yZXNwb25zZVhNTH07XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlz
LCB0aGlzLnN0YXR1cykpXG5cdFx0XHR0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0
aGlzLnJlc3BvbnNlLnhtbCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0s
XG5cblx0aXNTdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1
cztcblx0XHRyZXR1cm4gKHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxu
XHRpc1J1bm5pbmc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9
LFxuXG5cdHByb2Nlc3NTY3JpcHRzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRp
b25zLmV2YWxSZXNwb25zZSB8fCAoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhl
YWRlcignQ29udGVudC10eXBlJykpKSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJl
dHVybiB0ZXh0LnN0cmlwU2NyaXB0cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxu
XG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhp
cy5wcm9jZXNzU2NyaXB0cyh0ZXh0KSwgeG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRl
eHQsIHhtbDogeG1sfSk7XG5cdH0sXG5cblx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywg
YXJndW1lbnRzKS5jYWxsQ2hhaW4oKTtcblx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xu
XHRcdHRoaXMub25GYWlsdXJlKCk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUn
LCB4aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhy
KTtcblx0fSxcblxuXHRsb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVF
dmVudCgnbG9hZHN0YXJ0JywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNz
OiBmdW5jdGlvbihldmVudCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50
LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5m
aXJlRXZlbnQoJ3RpbWVvdXQnLCB0aGlzLnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjog
J3RpbWVvdXQnLCB4aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlv
bihuYW1lLCB2YWx1ZSl7XG5cdFx0dGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1
cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdl
dFJlc3BvbnNlSGVhZGVyKG5hbWUpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hl
Y2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRc
dHN3aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5j
YW5jZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhp
cy5jYWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0
XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0
aWYgKCF0aGlzLmNoZWNrKG9wdGlvbnMpKSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9u
cy5pc1N1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xu
XHRcdHRoaXMucnVubmluZyA9IHRydWU7XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25z
KTtcblx0XHRpZiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9u
cyA9IHtkYXRhOiBvcHRpb25zfTtcblxuXHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0
b3B0aW9ucyA9IE9iamVjdC5hcHBlbmQoe2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1l
dGhvZDogb2xkLm1ldGhvZH0sIG9wdGlvbnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRh
LCB1cmwgPSBTdHJpbmcob3B0aW9ucy51cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xv
d2VyQ2FzZSgpO1xuXG5cdFx0c3dpdGNoICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxl
bWVudCc6IGRhdGEgPSBkb2N1bWVudC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xu
XHRcdFx0Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0
cmluZyhkYXRhKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0
XHR2YXIgZm9ybWF0ID0gJ2Zvcm1hdD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRh
dGEgPSAoZGF0YSkgPyBmb3JtYXQgKyAnJicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRc
dGlmICh0aGlzLm9wdGlvbnMuZW11bGF0aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMo
bWV0aG9kKSl7XG5cdFx0XHR2YXIgX21ldGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0
XHRkYXRhID0gKGRhdGEpID8gX21ldGhvZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0
bWV0aG9kID0gJ3Bvc3QnO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2Rl
ZCAmJiBbJ3Bvc3QnLCAncHV0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2Rp
bmcgPSAodGhpcy5vcHRpb25zLmVuY29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9u
cy5lbmNvZGluZyA6ICcnO1xuXHRcdFx0dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdh
cHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5c
dFx0aWYgKCF1cmwpIHVybCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFy
IHRyaW1Qb3NpdGlvbiA9IHVybC5sYXN0SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRp
b24gPiAtMSAmJiAodHJpbVBvc2l0aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0g
dXJsLnN1YnN0cigwLCB0cmltUG9zaXRpb24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0Nh
Y2hlKVxuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsg
U3RyaW5nLnVuaXF1ZUlEKCk7XG5cblx0XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8
IG1ldGhvZCA9PSAnZGVsZXRlJykpe1xuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4g
LTEgPyAnJicgOiAnPycpICsgZGF0YTtcblx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRc
dHZhciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHho
ci5vbmxvYWRzdGFydCA9IHRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25w
cm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3MuYmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3Bl
bihtZXRob2QudG9VcHBlckNhc2UoKSwgdXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0
aW9ucy51c2VyLCB0aGlzLm9wdGlvbnMucGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25z
LndpdGhDcmVkZW50aWFscykgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENy
ZWRlbnRpYWxzID0gdHJ1ZTtcblxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9u
U3RhdGVDaGFuZ2UuYmluZCh0aGlzKTtcblxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywg
ZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVz
dEhlYWRlcihrZXksIHZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZp
cmVFdmVudCgnZXhjZXB0aW9uJywgW2tleSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qo
e3JlYXNvbjogJ2V4Y2VwdGlvbicsIHhocjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1c
blx0XHR9LCB0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3Bl
bmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0
XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtc
blx0XHRpZiAoIXRoaXMub3B0aW9ucy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0
ZWxzZSBpZiAodGhpcy5vcHRpb25zLnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQu
ZGVsYXkodGhpcy5vcHRpb25zLnRpbWVvdXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGNhbmNlbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJu
IHRoaXM7XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhy
O1xuXHRcdHhoci5hYm9ydCgpO1xuXHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGlt
ZW91dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4
aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkg
eGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9
IG5ldyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5c
dFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH1cblxufSk7XG5cbnZhciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0Jywg
J3B1dCcsICdkZWxldGUnLCAncGF0Y2gnLCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAn
REVMRVRFJywgJ1BBVENIJywgJ0hFQUQnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhv
ZHNbbWV0aG9kXSA9IGZ1bmN0aW9uKGRhdGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRt
ZXRob2Q6IG1ldGhvZFxuXHRcdH07XG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEg
PSBkYXRhO1xuXHRcdHJldHVybiB0aGlzLnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1
ZXN0LmltcGxlbWVudChtZXRob2RzKTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5c
blx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5k
JykuY2FuY2VsKCk7XG5cdFx0c2VuZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0
cmlldmUoJ3NlbmQnKTtcblx0XHRpZiAoIXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0
KHtcblx0XHRcdFx0ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQo
J21ldGhvZCcpIHx8ICdwb3N0JywgdXJsOiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xu
XHRcdFx0dGhpcy5zdG9yZSgnc2VuZCcsIHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtc
blx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJs
KXtcblx0XHR2YXIgc2VuZGVyID0gdGhpcy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7
ZGF0YTogdGhpcywgdXJsOiB1cmwgfHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5I
VE1MXG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGgg
YWRkaXRpb25hbCBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1
ZXN0XVxuXG5wcm92aWRlczogUmVxdWVzdC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1M
ID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0
XHR1cGRhdGU6IGZhbHNlLFxuXHRcdGFwcGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRy
dWUsXG5cdFx0ZmlsdGVyOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0
ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5c
blx0c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlv
bnMsIHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0
LnN0cmlwU2NyaXB0cyhmdW5jdGlvbihzY3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlw
dCA9IHNjcmlwdDtcblx0XHR9KTtcblxuXHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0
Y2goLzxib2R5W14+XSo+KFtcXHNcXFNdKj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkg
cmVzcG9uc2UuaHRtbCA9IG1hdGNoWzFdO1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rp
dicpLnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRl
bXAuY2hpbGROb2Rlcztcblx0XHRyZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMo
b3B0aW9ucy5maWx0ZXIgfHwgJyonKTtcblxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9u
c2UudHJlZSA9IHJlc3BvbnNlLmVsZW1lbnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5c
dFx0XHR2YXIgdXBkYXRlID0gZG9jdW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5c
dFx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7
XG5cdFx0XHRlbHNlIHVwZGF0ZS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVs
c2UgaWYgKG9wdGlvbnMuYXBwZW5kKXtcblx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChv
cHRpb25zLmFwcGVuZCk7XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1l
bnRzLnJldmVyc2UoKS5pbmplY3QoYXBwZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRl
bXAuZ2V0Q2hpbGRyZW4oKSk7XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBC
cm93c2VyLmV4ZWMocmVzcG9uc2UuamF2YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2Vzcyhy
ZXNwb25zZS50cmVlLCByZXNwb25zZS5lbGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2Uu
amF2YXNjcmlwdCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVt
ZW50czogcmVzcG9uc2UuZWxlbWVudHMsIGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6
IHJlc3BvbnNlLmphdmFzY3JpcHR9KTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVz
LmxvYWQgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRo
aXMuZ2V0KCdsb2FkJykuY2FuY2VsKCk7XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9h
ZCA9IHRoaXMucmV0cmlldmUoJ2xvYWQnKTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9
IG5ldyBSZXF1ZXN0LkhUTUwoe2RhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRo
aXMsIG1ldGhvZDogJ2dldCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0
XHR9XG5cdFx0cmV0dXJuIGxvYWQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xu
XG5cdGxvYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5Lmxp
bmsoYXJndW1lbnRzLCB7ZGF0YTogVHlwZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05c
blxuZGVzY3JpcHRpb246IEpTT04gZW5jb2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cblNlZUFsc286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVx
dWlyZXM6IFtBcnJheSwgU3RyaW5nLCBOdW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNP
TlxuXG4uLi5cbiovXG5cbmlmICh0eXBlb2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09O
ID0ge307XG5cblxuXG4oZnVuY3Rpb24oKXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxc
YicsICdcXHQnOiAnXFxcXHQnLCAnXFxuJzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHIn
OiAnXFxcXHInLCAnXCInIDogJ1xcXFxcIicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBl
c2NhcGUgPSBmdW5jdGlvbihjaHIpe1xuXHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScg
KyAoJzAwMDAnICsgY2hyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59
O1xuXG5KU09OLnZhbGlkYXRlID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5n
LnJlcGxhY2UoL1xcXFwoPzpbXCJcXFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0An
KS5cblx0XHRcdFx0XHRyZXBsYWNlKC9cIlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51
bGx8LT9cXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRc
dFx0XHRyZXBsYWNlKC8oPzpefDp8LCkoPzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAo
L15bXFxdLDp7fVxcc10qJC8pLnRlc3Qoc3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNP
Ti5zdHJpbmdpZnkgPyBmdW5jdGlvbihvYmope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2Jq
KTtcbn0gOiBmdW5jdGlvbihvYmope1xuXHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9i
ai50b0pTT04oKTtcblxuXHRzd2l0Y2ggKHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcn
OlxuXHRcdFx0cmV0dXJuICdcIicgKyBvYmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9n
LCBlc2NhcGUpICsgJ1wiJztcblx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsg
b2JqLm1hcChKU09OLmVuY29kZSkuY2xlYW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBj
YXNlICdoYXNoJzpcblx0XHRcdHZhciBzdHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUo
dmFsdWUpO1xuXHRcdFx0XHRpZiAoanNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSAr
ICc6JyArIGpzb24pO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30n
O1xuXHRcdGNhc2UgJ251bWJlcic6IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5c
dFx0Y2FzZSAnbnVsbCc6IHJldHVybiAnbnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07
XG5cbkpTT04uc2VjdXJlID0gdHJ1ZTtcblxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmlu
Zywgc2VjdXJlKXtcblx0aWYgKCFzdHJpbmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycp
IHJldHVybiBudWxsO1xuXG5cdGlmIChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1
cmU7XG5cdGlmIChzZWN1cmUpe1xuXHRcdGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJz
ZShzdHJpbmcpO1xuXHRcdGlmICghSlNPTi52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJy
b3IoJ0pTT04gY291bGQgbm90IGRlY29kZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQg
YW5kIHRoZSB2YWx1ZSBpcyBub3Qgc2VjdXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygn
ICsgc3RyaW5nICsgJyknKTtcbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVz
dC5KU09OXG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdp
dGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRh
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBK
U09OXVxuXG5wcm92aWRlczogUmVxdWVzdC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09O
ID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0
XHQvKm9uRXJyb3I6IGZ1bmN0aW9uKHRleHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVl
XG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJl
bnQob3B0aW9ucyk7XG5cdFx0T2JqZWN0LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdB
Y2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5c
dFx0fSk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247
XG5cdFx0dHJ5IHtcblx0XHRcdGpzb24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29k
ZSh0ZXh0LCB0aGlzLm9wdGlvbnMuc2VjdXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0
XHR0aGlzLmZpcmVFdmVudCgnZXJyb3InLCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtc
blx0XHR9XG5cdFx0aWYgKGpzb24gPT0gbnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0
XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vblN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlz
LnJlc29sdmUoe2pzb246IGpzb24sIHRleHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5c
bi8qXG4tLS1cblxubmFtZTogQ29va2llXG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRp
bmcsIHJlYWRpbmcsIGFuZCBkZWxldGluZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMg
YnkgUGV0ZXItUGF1bCBLb2NoIChodHRwOi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczog
W09wdGlvbnMsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIg
Q29va2llID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlv
bnM6IHtcblx0XHRwYXRoOiAnLycsXG5cdFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjog
ZmFsc2UsXG5cdFx0c2VjdXJlOiBmYWxzZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0
ZW5jb2RlOiB0cnVlLFxuXHRcdGh0dHBPbmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6
IGZ1bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5z
ZXRPcHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5c
dFx0aWYgKHRoaXMub3B0aW9ucy5lbmNvZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZh
bHVlKTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScg
KyB0aGlzLm9wdGlvbnMuZG9tYWluO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUg
Kz0gJzsgcGF0aD0nICsgdGhpcy5vcHRpb25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5k
dXJhdGlvbil7XG5cdFx0XHR2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRp
bWUoZGF0ZS5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAg
KiAxMDAwKTtcblx0XHRcdHZhbHVlICs9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmco
KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3Vy
ZSc7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHkn
O1xuXHRcdHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZh
bHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIHZhbHVlID0gdGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxc
XFxzKicgKyB0aGlzLmtleS5lc2NhcGVSZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVy
biAodmFsdWUpID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5c
blx0ZGlzcG9zZTogZnVuY3Rpb24oKXtcblx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3Qu
bWVyZ2Uoe30sIHRoaXMub3B0aW9ucywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwg
dmFsdWUsIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRl
KHZhbHVlKTtcbn07XG5cbkNvb2tpZS5yZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5l
dyBDb29raWUoa2V5KS5yZWFkKCk7XG59O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtl
eSwgb3B0aW9ucyl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgp
O1xufTtcblxuLypcbi0tLVxuXG5uYW1lOiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFp
bnMgdGhlIGN1c3RvbSBldmVudCBkb21yZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbQnJvd3NlciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJv
dmlkZXM6IFtET01SZWFkeSwgRG9tUmVhZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRv
dywgZG9jdW1lbnQpe1xuXG52YXIgcmVhZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5c
dHNob3VsZFBvbGwsXG5cdHRpbWVyLFxuXHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpO1xuXG52YXIgZG9tcmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVv
dXQodGltZXIpO1xuXHRpZiAoIXJlYWR5KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0g
dHJ1ZTtcblx0XHRkb2N1bWVudC5yZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRv
bXJlYWR5KS5yZW1vdmVMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRk
b2N1bWVudC5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9t
cmVhZHknKTtcblx0fVxuXHQvLyBjbGVhbnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5k
b3cgPSB0ZXN0RWxlbWVudCA9IG51bGw7XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xu
XHRmb3IgKHZhciBpID0gY2hlY2tzLmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0
XHRkb21yZWFkeSgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07
XG5cbnZhciBwb2xsID0gZnVuY3Rpb24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYg
KCFjaGVjaygpKSB0aW1lciA9IHNldFRpbWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQu
YWRkTGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4Piov
XG4vLyBkb1Njcm9sbCB0ZWNobmlxdWUgYnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0
Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRo
cm93cyB3aGVuIHRoZSBET00gaXMgbm90IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52
YXIgZG9TY3JvbGxXb3JrcyA9IGZ1bmN0aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQu
ZG9TY3JvbGwoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4g
ZmFsc2U7XG59O1xuLy8gSWYgZG9TY3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNl
ZCB0byBkZXRlcm1pbmUgZG9tcmVhZHlcbi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0
RWxlbWVudC5kb1Njcm9sbCAmJiAhZG9TY3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9T
Y3JvbGxXb3Jrcyk7XG5cdHNob3VsZFBvbGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlm
IChkb2N1bWVudC5yZWFkeVN0YXRlKSBjaGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3Rh
dGUgPSBkb2N1bWVudC5yZWFkeVN0YXRlO1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8
IHN0YXRlID09ICdjb21wbGV0ZScpO1xufSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBp
biBkb2N1bWVudCkgZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVj
ayk7XG5lbHNlIHNob3VsZFBvbGwgPSB0cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xu
XG5FbGVtZW50LkV2ZW50cy5kb21yZWFkeSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0
XHRpZiAocmVhZHkpIGZuLmNhbGwodGhpcyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0
IGRvbXJlYWR5IGZpcmVzIGJlZm9yZSBsb2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRi
YXNlOiAnbG9hZCcsXG5cdG9uQWRkOiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0
aGlzID09IHdpbmRvdykgZm4uY2FsbCh0aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlv
bigpe1xuXHRcdGlmICh0aGlzID09IHdpbmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0
ZGVsZXRlIEVsZW1lbnQuRXZlbnRzLmxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9
XG59O1xuXG4vLyBUaGlzIGlzIGJhc2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93
LmFkZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59
KSh3aW5kb3csIGRvY3VtZW50KTtcbiIKIAogLyoqKi8gfSksCiAvKiA0MTIgKi8KQEAgLTExMzg5
NCwxMyArMTEzODk0LDEzIEBAIG1vZHVsZS5leHBvcnRzID0gIi8qanNoaW50IHF1b3RtYXJrOiBm
YWwKIC8qIDQyMCAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1
bGUuZXhwb3J0cyA9ICIvLyBsaWJzL2pxdWVyeS9qcXVlcnkuZC50c1xuLyogKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLlxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXG50aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZVxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBc
blxuVEhJUyBDT0RFIElTIFBST1ZJREVEICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWVxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwg
SU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxuV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcbk1F
UkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXG5cblNlZSB0aGUgQXBhY2hlIFZlcnNp
b24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u
c1xuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiogKi9cblxuLy8gVHlwaW5nIGZvciB0aGUgalF1ZXJ5IGxpYnJhcnksIHZlcnNpb24gMS4xMC54
IC8gMi4wLnhcbi8vIFByb2plY3Q6IGh0dHA6Ly9qcXVlcnkuY29tL1xuLy8gRGVmaW5pdGlvbnMg
Ynk6IEJvcmlzIFlhbmtvdiA8aHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292Lz4sIENocmlz
dGlhbiBIb2ZmbWVpc3RlciA8aHR0cHM6Ly9naXRodWIuY29tL2Nob2ZmbWVpc3Rlcj4sIFN0ZXZl
IEZlbnRvbiwgRGl1bGxlaSBHb21lcyA8aHR0cHM6Ly9naXRodWIuY29tL0RpdWxsZWk+LCBUYXNz
IElsaW9wb3Vsb3MgPGh0dHBzOi8vZ2l0aHViLmNvbS90YXNvaWxpPiwgSmFzb24gU3dlYXJpbmdl
biwgU2VhbiBIaWxsIDxodHRwczovL2dpdGh1Yi5jb20vc2VhbnNraT4sIEd1dXMgR29vc3NlbnMg
PGh0dHBzOi8vZ2l0aHViLmNvbS9HdXV6PiwgS2VsbHkgU3VtbWVybGluIDxodHRwczovL2dpdGh1
Yi5jb20va3N1bW1lcmxpbj4sIEJhc2FyYXQgQWxpIFN5ZWQgPGh0dHBzOi8vZ2l0aHViLmNvbS9i
YXNhcmF0PiwgTmljaG9sYXMgV29sdmVyc29uIDxodHRwczovL2dpdGh1Yi5jb20vbndvbHZlcnNv
bj4sIERlcmVrIENpY2Vyb25lIDxodHRwczovL2dpdGh1Yi5jb20vZGVyZWtjaWNlcm9uZT4sIEFu
ZHJldyBHYXNwYXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9BbmRyZXdHYXNwYXI+LCBKYW1lcyBIYXJy
aXNvbiBGaXNoZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qYW1lc2hmaXNoZXI+LCBTZWlraWNoaSBL
b25kbyA8aHR0cHM6Ly9naXRodWIuY29tL3NlaWtpY2hpPiwgQmVuamFtaW4gSmFja21hbiA8aHR0
cHM6Ly9naXRodWIuY29tL2JlbmphbWluamFja21hbj4sIFBvdWwgU29yZW5zZW4gPGh0dHBzOi8v
Z2l0aHViLmNvbS9zMDkzMjk0PiwgSm9zaCBTdHJvYmwgPGh0dHBzOi8vZ2l0aHViLmNvbS9Kb3No
U3Ryb2JsPiwgSm9obiBSZWlsbHkgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb2hubnlyZWlsbHkvPlxu
Ly8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5
VHlwZWRcblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBBSkFYIHNldHRpbmcgdGhhdCB3aWxs
IGNvbmZpZ3VyZSB0aGUgQUpBWCByZXF1ZXN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeUFqYXhTZXR0
aW5ncyB7XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgdHlwZSBzZW50IGluIHRoZSByZXF1
ZXN0IGhlYWRlciB0aGF0IHRlbGxzIHRoZSBzZXJ2ZXIgd2hhdCBraW5kIG9mIHJlc3BvbnNlIGl0
IHdpbGwgYWNjZXB0IGluIHJldHVybi4gSWYgdGhlIGFjY2VwdHMgc2V0dGluZyBuZWVkcyBtb2Rp
ZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNl
dHVwKCkgbWV0aG9kLlxuICAgICAqL1xuICAgIGFjY2VwdHM/OiBhbnk7XG4gICAgLyoqXG4gICAg
ICogQnkgZGVmYXVsdCwgYWxsIHJlcXVlc3RzIGFyZSBzZW50IGFzeW5jaHJvbm91c2x5IChpLmUu
IHRoaXMgaXMgc2V0IHRvIHRydWUgYnkgZGVmYXVsdCkuIElmIHlvdSBuZWVkIHN5bmNocm9ub3Vz
IHJlcXVlc3RzLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2UuIENyb3NzLWRvbWFpbiByZXF1ZXN0
cyBhbmQgZGF0YVR5cGU6IFwianNvbnBcIiByZXF1ZXN0cyBkbyBub3Qgc3VwcG9ydCBzeW5jaHJv
bm91cyBvcGVyYXRpb24uIE5vdGUgdGhhdCBzeW5jaHJvbm91cyByZXF1ZXN0cyBtYXkgdGVtcG9y
YXJpbHkgbG9jayB0aGUgYnJvd3NlciwgZGlzYWJsaW5nIGFueSBhY3Rpb25zIHdoaWxlIHRoZSBy
ZXF1ZXN0IGlzIGFjdGl2ZS4gQXMgb2YgalF1ZXJ5IDEuOCwgdGhlIHVzZSBvZiBhc3luYzogZmFs
c2Ugd2l0aCBqcVhIUiAoJC5EZWZlcnJlZCkgaXMgZGVwcmVjYXRlZDsgeW91IG11c3QgdXNlIHRo
ZSBzdWNjZXNzL2Vycm9yL2NvbXBsZXRlIGNhbGxiYWNrIG9wdGlvbnMgaW5zdGVhZCBvZiB0aGUg
Y29ycmVzcG9uZGluZyBtZXRob2RzIG9mIHRoZSBqcVhIUiBvYmplY3Qgc3VjaCBhcyBqcVhIUi5k
b25lKCkgb3IgdGhlIGRlcHJlY2F0ZWQganFYSFIuc3VjY2VzcygpLlxuICAgICAqL1xuICAgIGFz
eW5jPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIHByZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1
bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEu
NC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGJlZm9yZSBpdCBpcyBzZW50LiBVc2UgdGhpcyB0
byBzZXQgY3VzdG9tIGhlYWRlcnMsIGV0Yy4gVGhlIGpxWEhSIGFuZCBzZXR0aW5ncyBvYmplY3Rz
IGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuIFJldHVybmlu
ZyBmYWxzZSBpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbiB3aWxsIGNhbmNlbCB0aGUgcmVxdWVz
dC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGJlZm9yZVNlbmQgb3B0aW9uIHdpbGwgYmUgY2FsbGVk
IHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBiZWZvcmVT
ZW5kPyAoanFYSFI6IEpRdWVyeVhIUiwgc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IGFu
eTtcbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gZmFsc2UsIGl0IHdpbGwgZm9yY2UgcmVxdWVz
dGVkIHBhZ2VzIG5vdCB0byBiZSBjYWNoZWQgYnkgdGhlIGJyb3dzZXIuIE5vdGU6IFNldHRpbmcg
Y2FjaGUgdG8gZmFsc2Ugd2lsbCBvbmx5IHdvcmsgY29ycmVjdGx5IHdpdGggSEVBRCBhbmQgR0VU
IHJlcXVlc3RzLiBJdCB3b3JrcyBieSBhcHBlbmRpbmcgXCJfPXt0aW1lc3RhbXB9XCIgdG8gdGhl
IEdFVCBwYXJhbWV0ZXJzLiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBuZWVkZWQgZm9yIG90aGVyIHR5
cGVzIG9mIHJlcXVlc3RzLCBleGNlcHQgaW4gSUU4IHdoZW4gYSBQT1NUIGlzIG1hZGUgdG8gYSBV
UkwgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCBieSBhIEdFVC5cbiAgICAgKi9cbiAg
ICBjYWNoZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgd2hlbiB0aGUgcmVxdWVzdCBmaW5pc2hlcyAoYWZ0ZXIgc3VjY2VzcyBhbmQgZXJyb3IgY2Fs
bGJhY2tzIGFyZSBleGVjdXRlZCkuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0d28gYXJndW1l
bnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBh
bmQgYSBzdHJpbmcgY2F0ZWdvcml6aW5nIHRoZSBzdGF0dXMgb2YgdGhlIHJlcXVlc3QgKFwic3Vj
Y2Vzc1wiLCBcIm5vdG1vZGlmaWVkXCIsIFwiZXJyb3JcIiwgXCJ0aW1lb3V0XCIsIFwiYWJvcnRc
Iiwgb3IgXCJwYXJzZXJlcnJvclwiKS4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGNvbXBsZXRlIHNl
dHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2ls
bCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAg
IGNvbXBsZXRlPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nKTogYW55O1xu
ICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBzdHJpbmcvcmVndWxhci1leHByZXNzaW9uIHBh
aXJzIHRoYXQgZGV0ZXJtaW5lIGhvdyBqUXVlcnkgd2lsbCBwYXJzZSB0aGUgcmVzcG9uc2UsIGdp
dmVuIGl0cyBjb250ZW50IHR5cGUuICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAg
Y29udGVudHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvL0FjY29yZGluZyB0byBq
UXVlcnkuYWpheCBzb3VyY2UgY29kZSwgYWpheCdzIG9wdGlvbiBhY3R1YWxseSBhbGxvd3MgY29u
dGVudFR5cGUgdG8gc2V0IHRvIFwiZmFsc2VcIlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9i
b3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzc0MlxuICAgIC8qKlxuICAgICAqIFdo
ZW4gc2VuZGluZyBkYXRhIHRvIHRoZSBzZXJ2ZXIsIHVzZSB0aGlzIGNvbnRlbnQgdHlwZS4gRGVm
YXVsdCBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYt
OFwiLCB3aGljaCBpcyBmaW5lIGZvciBtb3N0IGNhc2VzLiBJZiB5b3UgZXhwbGljaXRseSBwYXNz
IGluIGEgY29udGVudC10eXBlIHRvICQuYWpheCgpLCB0aGVuIGl0IGlzIGFsd2F5cyBzZW50IHRv
IHRoZSBzZXJ2ZXIgKGV2ZW4gaWYgbm8gZGF0YSBpcyBzZW50KS4gVGhlIFczQyBYTUxIdHRwUmVx
dWVzdCBzcGVjaWZpY2F0aW9uIGRpY3RhdGVzIHRoYXQgdGhlIGNoYXJzZXQgaXMgYWx3YXlzIFVU
Ri04OyBzcGVjaWZ5aW5nIGFub3RoZXIgY2hhcnNldCB3aWxsIG5vdCBmb3JjZSB0aGUgYnJvd3Nl
ciB0byBjaGFuZ2UgdGhlIGVuY29kaW5nLlxuICAgICAqL1xuICAgIGNvbnRlbnRUeXBlPzogYW55
O1xuICAgIC8qKlxuICAgICAqIFRoaXMgb2JqZWN0IHdpbGwgYmUgbWFkZSB0aGUgY29udGV4dCBv
ZiBhbGwgQWpheC1yZWxhdGVkIGNhbGxiYWNrcy4gQnkgZGVmYXVsdCwgdGhlIGNvbnRleHQgaXMg
YW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgYWpheCBzZXR0aW5ncyB1c2VkIGluIHRoZSBj
YWxsICgkLmFqYXhTZXR0aW5ncyBtZXJnZWQgd2l0aCB0aGUgc2V0dGluZ3MgcGFzc2VkIHRvICQu
YWpheCkuXG4gICAgICovXG4gICAgY29udGV4dD86IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhVHlwZS10by1kYXRhVHlwZSBjb252ZXJ0ZXJzLiBFYWNoIGNv
bnZlcnRlcidzIHZhbHVlIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB0cmFuc2Zvcm1l
ZCB2YWx1ZSBvZiB0aGUgcmVzcG9uc2UuICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4g
ICAgY29udmVydGVycz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAq
IElmIHlvdSB3aXNoIHRvIGZvcmNlIGEgY3Jvc3NEb21haW4gcmVxdWVzdCAoc3VjaCBhcyBKU09O
UCkgb24gdGhlIHNhbWUgZG9tYWluLCBzZXQgdGhlIHZhbHVlIG9mIGNyb3NzRG9tYWluIHRvIHRy
dWUuIFRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwgc2VydmVyLXNpZGUgcmVkaXJlY3Rpb24gdG8g
YW5vdGhlciBkb21haW4uICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY3Jvc3NE
b21haW4/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERhdGEgdG8gYmUgc2VudCB0byB0aGUg
c2VydmVyLiBJdCBpcyBjb252ZXJ0ZWQgdG8gYSBxdWVyeSBzdHJpbmcsIGlmIG5vdCBhbHJlYWR5
IGEgc3RyaW5nLiBJdCdzIGFwcGVuZGVkIHRvIHRoZSB1cmwgZm9yIEdFVC1yZXF1ZXN0cy4gU2Vl
IHByb2Nlc3NEYXRhIG9wdGlvbiB0byBwcmV2ZW50IHRoaXMgYXV0b21hdGljIHByb2Nlc3Npbmcu
IE9iamVjdCBtdXN0IGJlIEtleS9WYWx1ZSBwYWlycy4gSWYgdmFsdWUgaXMgYW4gQXJyYXksIGpR
dWVyeSBzZXJpYWxpemVzIG11bHRpcGxlIHZhbHVlcyB3aXRoIHNhbWUga2V5IGJhc2VkIG9uIHRo
ZSB2YWx1ZSBvZiB0aGUgdHJhZGl0aW9uYWwgc2V0dGluZyAoZGVzY3JpYmVkIGJlbG93KS5cbiAg
ICAgKi9cbiAgICBkYXRhPzogYW55O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUg
dXNlZCB0byBoYW5kbGUgdGhlIHJhdyByZXNwb25zZSBkYXRhIG9mIFhNTEh0dHBSZXF1ZXN0LlRo
aXMgaXMgYSBwcmUtZmlsdGVyaW5nIGZ1bmN0aW9uIHRvIHNhbml0aXplIHRoZSByZXNwb25zZS4g
WW91IHNob3VsZCByZXR1cm4gdGhlIHNhbml0aXplZCBkYXRhLiBUaGUgZnVuY3Rpb24gYWNjZXB0
cyB0d28gYXJndW1lbnRzOiBUaGUgcmF3IGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIGFu
ZCB0aGUgJ2RhdGFUeXBlJyBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgZGF0YUZpbHRlcj8gKGRh
dGE6IGFueSwgdHk6IGFueSk6IGFueTtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBkYXRh
IHRoYXQgeW91J3JlIGV4cGVjdGluZyBiYWNrIGZyb20gdGhlIHNlcnZlci4gSWYgbm9uZSBpcyBz
cGVjaWZpZWQsIGpRdWVyeSB3aWxsIHRyeSB0byBpbmZlciBpdCBiYXNlZCBvbiB0aGUgTUlNRSB0
eXBlIG9mIHRoZSByZXNwb25zZSAoYW4gWE1MIE1JTUUgdHlwZSB3aWxsIHlpZWxkIFhNTCwgaW4g
MS40IEpTT04gd2lsbCB5aWVsZCBhIEphdmFTY3JpcHQgb2JqZWN0LCBpbiAxLjQgc2NyaXB0IHdp
bGwgZXhlY3V0ZSB0aGUgc2NyaXB0LCBhbmQgYW55dGhpbmcgZWxzZSB3aWxsIGJlIHJldHVybmVk
IGFzIGEgc3RyaW5nKS5cbiAgICAgKi9cbiAgICBkYXRhVHlwZT86IHN0cmluZztcbiAgICAvKipc
biAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBmYWlscy4gVGhl
IGZ1bmN0aW9uIHJlY2VpdmVzIHRocmVlIGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkg
MS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QsIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5
cGUgb2YgZXJyb3IgdGhhdCBvY2N1cnJlZCBhbmQgYW4gb3B0aW9uYWwgZXhjZXB0aW9uIG9iamVj
dCwgaWYgb25lIG9jY3VycmVkLiBQb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBzZWNvbmQgYXJndW1l
bnQgKGJlc2lkZXMgbnVsbCkgYXJlIFwidGltZW91dFwiLCBcImVycm9yXCIsIFwiYWJvcnRcIiwg
YW5kIFwicGFyc2VyZXJyb3JcIi4gV2hlbiBhbiBIVFRQIGVycm9yIG9jY3VycywgZXJyb3JUaHJv
d24gcmVjZWl2ZXMgdGhlIHRleHR1YWwgcG9ydGlvbiBvZiB0aGUgSFRUUCBzdGF0dXMsIHN1Y2gg
YXMgXCJOb3QgRm91bmRcIiBvciBcIkludGVybmFsIFNlcnZlciBFcnJvci5cIiBBcyBvZiBqUXVl
cnkgMS41LCB0aGUgZXJyb3Igc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9u
cy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBOb3RlOiBUaGlzIGhhbmRs
ZXIgaXMgbm90IGNhbGxlZCBmb3IgY3Jvc3MtZG9tYWluIHNjcmlwdCBhbmQgY3Jvc3MtZG9tYWlu
IEpTT05QIHJlcXVlc3RzLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgZXJy
b3I/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGVycm9yVGhyb3c6IHN0
cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHRyaWdnZXIgZ2xvYmFsIEFq
YXggZXZlbnQgaGFuZGxlcnMgZm9yIHRoaXMgcmVxdWVzdC4gVGhlIGRlZmF1bHQgaXMgdHJ1ZS4g
U2V0IHRvIGZhbHNlIHRvIHByZXZlbnQgdGhlIGdsb2JhbCBoYW5kbGVycyBsaWtlIGFqYXhTdGFy
dCBvciBhamF4U3RvcCBmcm9tIGJlaW5nIHRyaWdnZXJlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byBj
b250cm9sIHZhcmlvdXMgQWpheCBFdmVudHMuXG4gICAgICovXG4gICAgZ2xvYmFsPzogYm9vbGVh
bjtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgYWRkaXRpb25hbCBoZWFkZXIga2V5L3Zh
bHVlIHBhaXJzIHRvIHNlbmQgYWxvbmcgd2l0aCByZXF1ZXN0cyB1c2luZyB0aGUgWE1MSHR0cFJl
cXVlc3QgdHJhbnNwb3J0LiBUaGUgaGVhZGVyIFgtUmVxdWVzdGVkLVdpdGg6IFhNTEh0dHBSZXF1
ZXN0IGlzIGFsd2F5cyBhZGRlZCwgYnV0IGl0cyBkZWZhdWx0IFhNTEh0dHBSZXF1ZXN0IHZhbHVl
IGNhbiBiZSBjaGFuZ2VkIGhlcmUuIFZhbHVlcyBpbiB0aGUgaGVhZGVycyBzZXR0aW5nIGNhbiBh
bHNvIGJlIG92ZXJ3cml0dGVuIGZyb20gd2l0aGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uLiAo
dmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmlu
Z106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgcmVxdWVzdCB0byBiZSBzdWNj
ZXNzZnVsIG9ubHkgaWYgdGhlIHJlc3BvbnNlIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHJl
cXVlc3QuIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyB0aGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIu
IERlZmF1bHQgdmFsdWUgaXMgZmFsc2UsIGlnbm9yaW5nIHRoZSBoZWFkZXIuIEluIGpRdWVyeSAx
LjQgdGhpcyB0ZWNobmlxdWUgYWxzbyBjaGVja3MgdGhlICdldGFnJyBzcGVjaWZpZWQgYnkgdGhl
IHNlcnZlciB0byBjYXRjaCB1bm1vZGlmaWVkIGRhdGEuXG4gICAgICovXG4gICAgaWZNb2RpZmll
ZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxsb3cgdGhlIGN1cnJlbnQgZW52aXJvbm1l
bnQgdG8gYmUgcmVjb2duaXplZCBhcyBcImxvY2FsLFwiIChlLmcuIHRoZSBmaWxlc3lzdGVtKSwg
ZXZlbiBpZiBqUXVlcnkgZG9lcyBub3QgcmVjb2duaXplIGl0IGFzIHN1Y2ggYnkgZGVmYXVsdC4g
VGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIGN1cnJlbnRseSByZWNvZ25pemVkIGFzIGxvY2Fs
OiBmaWxlLCAqLWV4dGVuc2lvbiwgYW5kIHdpZGdldC4gSWYgdGhlIGlzTG9jYWwgc2V0dGluZyBu
ZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhl
ICQuYWpheFNldHVwKCkgbWV0aG9kLiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4g
ICAgaXNMb2NhbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGNhbGxi
YWNrIGZ1bmN0aW9uIG5hbWUgaW4gYSBqc29ucCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUg
dXNlZCBpbnN0ZWFkIG9mICdjYWxsYmFjaycgaW4gdGhlICdjYWxsYmFjaz0/JyBwYXJ0IG9mIHRo
ZSBxdWVyeSBzdHJpbmcgaW4gdGhlIHVybC4gU28ge2pzb25wOidvbkpTT05QTG9hZCd9IHdvdWxk
IHJlc3VsdCBpbiAnb25KU09OUExvYWQ9PycgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIuIEFzIG9mIGpR
dWVyeSAxLjUsIHNldHRpbmcgdGhlIGpzb25wIG9wdGlvbiB0byBmYWxzZSBwcmV2ZW50cyBqUXVl
cnkgZnJvbSBhZGRpbmcgdGhlIFwiP2NhbGxiYWNrXCIgc3RyaW5nIHRvIHRoZSBVUkwgb3IgYXR0
ZW1wdGluZyB0byB1c2UgXCI9P1wiIGZvciB0cmFuc2Zvcm1hdGlvbi4gSW4gdGhpcyBjYXNlLCB5
b3Ugc2hvdWxkIGFsc28gZXhwbGljaXRseSBzZXQgdGhlIGpzb25wQ2FsbGJhY2sgc2V0dGluZy4g
Rm9yIGV4YW1wbGUsIHsganNvbnA6IGZhbHNlLCBqc29ucENhbGxiYWNrOiBcImNhbGxiYWNrTmFt
ZVwiIH1cbiAgICAgKi9cbiAgICBqc29ucD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTcGVj
aWZ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGZvciBhIEpTT05QIHJlcXVlc3QuIFRoaXMg
dmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHJhbmRvbSBuYW1lIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGJ5IGpRdWVyeS4gSXQgaXMgcHJlZmVyYWJsZSB0byBsZXQgalF1ZXJ5IGdl
bmVyYXRlIGEgdW5pcXVlIG5hbWUgYXMgaXQnbGwgbWFrZSBpdCBlYXNpZXIgdG8gbWFuYWdlIHRo
ZSByZXF1ZXN0cyBhbmQgcHJvdmlkZSBjYWxsYmFja3MgYW5kIGVycm9yIGhhbmRsaW5nLiBZb3Ug
bWF5IHdhbnQgdG8gc3BlY2lmeSB0aGUgY2FsbGJhY2sgd2hlbiB5b3Ugd2FudCB0byBlbmFibGUg
YmV0dGVyIGJyb3dzZXIgY2FjaGluZyBvZiBHRVQgcmVxdWVzdHMuIEFzIG9mIGpRdWVyeSAxLjUs
IHlvdSBjYW4gYWxzbyB1c2UgYSBmdW5jdGlvbiBmb3IgdGhpcyBzZXR0aW5nLCBpbiB3aGljaCBj
YXNlIHRoZSB2YWx1ZSBvZiBqc29ucENhbGxiYWNrIGlzIHNldCB0byB0aGUgcmV0dXJuIHZhbHVl
IG9mIHRoYXQgZnVuY3Rpb24uXG4gICAgICovXG4gICAganNvbnBDYWxsYmFjaz86IGFueTtcbiAg
ICAvKipcbiAgICAgKiBBIG1pbWUgdHlwZSB0byBvdmVycmlkZSB0aGUgWEhSIG1pbWUgdHlwZS4g
KHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIG1pbWVUeXBlPzogc3RyaW5nO1xu
ICAgIC8qKlxuICAgICAqIEEgcGFzc3dvcmQgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0
IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4g
ICAgICovXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVs
dCwgZGF0YSBwYXNzZWQgaW4gdG8gdGhlIGRhdGEgb3B0aW9uIGFzIGFuIG9iamVjdCAodGVjaG5p
Y2FsbHksIGFueXRoaW5nIG90aGVyIHRoYW4gYSBzdHJpbmcpIHdpbGwgYmUgcHJvY2Vzc2VkIGFu
ZCB0cmFuc2Zvcm1lZCBpbnRvIGEgcXVlcnkgc3RyaW5nLCBmaXR0aW5nIHRvIHRoZSBkZWZhdWx0
IGNvbnRlbnQtdHlwZSBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLiBJZiB5
b3Ugd2FudCB0byBzZW5kIGEgRE9NRG9jdW1lbnQsIG9yIG90aGVyIG5vbi1wcm9jZXNzZWQgZGF0
YSwgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLlxuICAgICAqL1xuICAgIHByb2Nlc3NEYXRhPzog
Ym9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgXCJzY3JpcHRc
IiB0cmFuc3BvcnQgaXMgdXNlZCAoZS5nLiwgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIHdpdGggXCJq
c29ucFwiIG9yIFwic2NyaXB0XCIgZGF0YVR5cGUgYW5kIFwiR0VUXCIgdHlwZSkuIFNldHMgdGhl
IGNoYXJzZXQgYXR0cmlidXRlIG9uIHRoZSBzY3JpcHQgdGFnIHVzZWQgaW4gdGhlIHJlcXVlc3Qu
IFVzZWQgd2hlbiB0aGUgY2hhcmFjdGVyIHNldCBvbiB0aGUgbG9jYWwgcGFnZSBpcyBub3QgdGhl
IHNhbWUgYXMgdGhlIG9uZSBvbiB0aGUgcmVtb3RlIHNjcmlwdC5cbiAgICAgKi9cbiAgICBzY3Jp
cHRDaGFyc2V0Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBudW1lcmlj
IEhUVFAgY29kZXMgYW5kIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVzcG9uc2Ug
aGFzIHRoZSBjb3JyZXNwb25kaW5nIGNvZGUuIGYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCwg
dGhlIHN0YXR1cyBjb2RlIGZ1bmN0aW9ucyB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhl
IHN1Y2Nlc3MgY2FsbGJhY2s7IGlmIGl0IHJlc3VsdHMgaW4gYW4gZXJyb3IgKGluY2x1ZGluZyAz
eHggcmVkaXJlY3QpLCB0aGV5IHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZXJyb3Ig
Y2FsbGJhY2suICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgc3RhdHVzQ29kZT86
IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8g
YmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNz
ZWQgdGhyZWUgYXJndW1lbnRzOiBUaGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIsIGZv
cm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIGRhdGFUeXBlIHBhcmFtZXRlcjsgYSBzdHJpbmcgZGVz
Y3JpYmluZyB0aGUgc3RhdHVzOyBhbmQgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0
dHBSZXF1ZXN0KSBvYmplY3QuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBzdWNjZXNzIHNldHRpbmcg
Y2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBj
YWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIHN1Y2Nl
c3M/IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUik6IGFu
eTtcbiAgICAvKipcbiAgICAgKiBTZXQgYSB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB0
aGUgcmVxdWVzdC4gVGhpcyB3aWxsIG92ZXJyaWRlIGFueSBnbG9iYWwgdGltZW91dCBzZXQgd2l0
aCAkLmFqYXhTZXR1cCgpLiBUaGUgdGltZW91dCBwZXJpb2Qgc3RhcnRzIGF0IHRoZSBwb2ludCB0
aGUgJC5hamF4IGNhbGwgaXMgbWFkZTsgaWYgc2V2ZXJhbCBvdGhlciByZXF1ZXN0cyBhcmUgaW4g
cHJvZ3Jlc3MgYW5kIHRoZSBicm93c2VyIGhhcyBubyBjb25uZWN0aW9ucyBhdmFpbGFibGUsIGl0
IGlzIHBvc3NpYmxlIGZvciBhIHJlcXVlc3QgdG8gdGltZSBvdXQgYmVmb3JlIGl0IGNhbiBiZSBz
ZW50LiBJbiBqUXVlcnkgMS40LnggYW5kIGJlbG93LCB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0
IHdpbGwgYmUgaW4gYW4gaW52YWxpZCBzdGF0ZSBpZiB0aGUgcmVxdWVzdCB0aW1lcyBvdXQ7IGFj
Y2Vzc2luZyBhbnkgb2JqZWN0IG1lbWJlcnMgbWF5IHRocm93IGFuIGV4Y2VwdGlvbi4gSW4gRmly
ZWZveCAzLjArIG9ubHksIHNjcmlwdCBhbmQgSlNPTlAgcmVxdWVzdHMgY2Fubm90IGJlIGNhbmNl
bGxlZCBieSBhIHRpbWVvdXQ7IHRoZSBzY3JpcHQgd2lsbCBydW4gZXZlbiBpZiBpdCBhcnJpdmVz
IGFmdGVyIHRoZSB0aW1lb3V0IHBlcmlvZC5cbiAgICAgKi9cbiAgICB0aW1lb3V0PzogbnVtYmVy
O1xuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdpc2ggdG8gdXNlIHRo
ZSB0cmFkaXRpb25hbCBzdHlsZSBvZiBwYXJhbSBzZXJpYWxpemF0aW9uLlxuICAgICAqL1xuICAg
IHRyYWRpdGlvbmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiByZXF1
ZXN0IHRvIG1ha2UgKFwiUE9TVFwiIG9yIFwiR0VUXCIpLCBkZWZhdWx0IGlzIFwiR0VUXCIuIE5v
dGU6IE90aGVyIEhUVFAgcmVxdWVzdCBtZXRob2RzLCBzdWNoIGFzIFBVVCBhbmQgREVMRVRFLCBj
YW4gYWxzbyBiZSB1c2VkIGhlcmUsIGJ1dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBi
cm93c2Vycy5cbiAgICAgKi9cbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqL1xuICAgIHVybD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIHVzZXJuYW1lIHRv
IGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2Vz
cyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAqL1xuICAgIHVzZXJuYW1lPzogc3RyaW5n
O1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZvciBjcmVhdGluZyB0aGUgWE1MSHR0cFJlcXVl
c3Qgb2JqZWN0LiBEZWZhdWx0cyB0byB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGF2YWlsYWJsZSAo
SUUpLCB0aGUgWE1MSHR0cFJlcXVlc3Qgb3RoZXJ3aXNlLiBPdmVycmlkZSB0byBwcm92aWRlIHlv
dXIgb3duIGltcGxlbWVudGF0aW9uIGZvciBYTUxIdHRwUmVxdWVzdCBvciBlbmhhbmNlbWVudHMg
dG8gdGhlIGZhY3RvcnkuXG4gICAgICovXG4gICAgeGhyPzogYW55O1xuICAgIC8qKlxuICAgICAq
IEFuIG9iamVjdCBvZiBmaWVsZE5hbWUtZmllbGRWYWx1ZSBwYWlycyB0byBzZXQgb24gdGhlIG5h
dGl2ZSBYSFIgb2JqZWN0LiBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UgaXQgdG8gc2V0IHdpdGhD
cmVkZW50aWFscyB0byB0cnVlIGZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMgaWYgbmVlZGVkLiBJ
biBqUXVlcnkgMS41LCB0aGUgd2l0aENyZWRlbnRpYWxzIHByb3BlcnR5IHdhcyBub3QgcHJvcGFn
YXRlZCB0byB0aGUgbmF0aXZlIFhIUiBhbmQgdGh1cyBDT1JTIHJlcXVlc3RzIHJlcXVpcmluZyBp
dCB3b3VsZCBpZ25vcmUgdGhpcyBmbGFnLiBGb3IgdGhpcyByZWFzb24sIHdlIHJlY29tbWVuZCB1
c2luZyBqUXVlcnkgMS41LjErIHNob3VsZCB5b3UgcmVxdWlyZSB0aGUgdXNlIG9mIGl0LiAodmVy
c2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgeGhyRmllbGRzPzogeyBba2V5OiBzdHJp
bmddOiBhbnk7IH07XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUganFYSFIgb2JqZWN0
XG4qL1xuaW50ZXJmYWNlIEpRdWVyeVhIUiBleHRlbmRzIFhNTEh0dHBSZXF1ZXN0LCBKUXVlcnlQ
cm9taXNlPGFueT4ge1xuICAgIG92ZXJyaWRlTWltZVR5cGUobWltZVR5cGU6IHN0cmluZyk6IGFu
eTtcbiAgICBhYm9ydChzdGF0dXNUZXh0Pzogc3RyaW5nKTogdm9pZDtcbn1cblxuLypcbiAgICBJ
bnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgY2FsbGJhY2tcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5Q2Fs
bGJhY2sge1xuICAgIGFkZCguLi5jYWxsYmFja3M6IGFueVtdKTogYW55O1xuICAgIGRpc2FibGUo
KTogYW55O1xuICAgIGVtcHR5KCk6IGFueTtcbiAgICBmaXJlKC4uLmFyZ3VtZW50czogYW55W10p
OiBhbnk7XG4gICAgZmlyZWQoKTogYm9vbGVhbjtcbiAgICBmaXJlV2l0aChjb250ZXh0OiBhbnks
IC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAgIGhhcyhjYWxsYmFjazogYW55KTogYm9vbGVhbjtc
biAgICBsb2NrKCk6IGFueTtcbiAgICBsb2NrZWQoKTogYm9vbGVhbjtcbiAgICByZW1vdmUoLi4u
Y2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbn1cblxuLypcbiAgICBBbGxvd3MgalF1ZXJ5IFByb21p
c2VzIHRvIGludGVyb3Agd2l0aCBub24talF1ZXJ5IHByb21pc2VzXG4qL1xuaW50ZXJmYWNlIEpR
dWVyeUdlbmVyaWNQcm9taXNlPFQ+IHtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBU
KSA9PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9t
aXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVy
aWNQcm9taXNlPFU+LCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVy
aWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9u
UmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+
IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1
ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbn1cblxuLypc
biAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgcHJvbWlzZSwgcGFydCBvZiBjYWxsYmFja3Nc
biovXG5pbnRlcmZhY2UgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9u
cyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVl
cnlQcm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJv
bWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8
VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21p
c2U8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVBy
b21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21p
c2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8
VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJv
bWlzZTxUPjtcblxuICAgIC8vIERlcHJlY2F0ZWQgLSBnaXZlbiBubyB0eXBpbmdzXG4gICAgcGlw
ZShkb25lRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBmYWlsRmlsdGVyPzogKHg6IGFueSkgPT4g
YW55LCBwcm9ncmVzc0ZpbHRlcj86ICh4OiBhbnkpID0+IGFueSk6IEpRdWVyeVByb21pc2U8YW55
PjtcblxuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVh
c29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9
PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6
IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4g
SlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9
PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjog
YW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG5cbiAgICAvLyBCZWNhdXNlIEpRdWVy
eSBQcm9taXNlcyBTdWNrXG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtd
KSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86
ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAg
dGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJv
bWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/
OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAg
IHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAo
Li4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNz
PzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAg
ICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkp
OiBKUXVlcnlQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVy
eSBkZWZlcnJlZCwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5RGVmZXJy
ZWQ8VD4gZXh0ZW5kcyBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25z
IG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVy
eURlZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVm
ZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJl
ZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVm
ZXJyZWQ8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVy
eURlZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlE
ZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVm
ZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1
ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBub3RpZnkoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcbiAgICBub3RpZnlXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBK
UXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlamVjdCguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuICAgIHJlamVjdFdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6
IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVzb2x2ZSh2YWw6IFQpOiBKUXVlcnlEZWZlcnJl
ZDxUPjtcbiAgICByZXNvbHZlKC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4g
ICAgcmVzb2x2ZVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVy
cmVkPFQ+O1xuICAgIHN0YXRlKCk6IHN0cmluZztcblxuICAgIHByb21pc2UodGFyZ2V0PzogYW55
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2Ugb2YgdGhlIEpRdWVy
eSBleHRlbnNpb24gb2YgdGhlIFczQyBldmVudCBvYmplY3RcbiovXG5cbmludGVyZmFjZSBCYXNl
SlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBFdmVudCB7XG4gICAgZGF0YTogYW55O1xuICAgIGRl
bGVnYXRlVGFyZ2V0OiBFbGVtZW50O1xuICAgIGlzRGVmYXVsdFByZXZlbnRlZCgpOiBib29sZWFu
O1xuICAgIGlzSW1tZWRpYXRlUHJvcG9nYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgaXNQ
cm9wYWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAg
ICBwcmV2ZW50RGVmYXVsdCgpOiBhbnk7XG4gICAgcmVsYXRlZFRhcmdldDogRWxlbWVudDtcbiAg
ICByZXN1bHQ6IGFueTtcbiAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTogdm9pZDtcbiAg
ICBzdG9wUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZ
OiBudW1iZXI7XG4gICAgd2hpY2g6IG51bWJlcjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xufVxu
XG5pbnRlcmZhY2UgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVu
dE9iamVjdCB7XG4gICAgYWx0S2V5OiBib29sZWFuO1xuICAgIGN0cmxLZXk6IGJvb2xlYW47XG4g
ICAgbWV0YUtleTogYm9vbGVhbjtcbiAgICBzaGlmdEtleTogYm9vbGVhbjtcbn1cblxuaW50ZXJm
YWNlIEpRdWVyeU1vdXNlRXZlbnRPYmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0
IHtcbiAgICBidXR0b246IG51bWJlcjtcbiAgICBjbGllbnRYOiBudW1iZXI7XG4gICAgY2xpZW50
WTogbnVtYmVyO1xuICAgIG9mZnNldFg6IG51bWJlcjtcbiAgICBvZmZzZXRZOiBudW1iZXI7XG4g
ICAgcGFnZVg6IG51bWJlcjtcbiAgICBwYWdlWTogbnVtYmVyO1xuICAgIHNjcmVlblg6IG51bWJl
cjtcbiAgICBzY3JlZW5ZOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlLZXlFdmVudE9i
amVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAgIGNoYXI6IGFueTtcbiAg
ICBjaGFyQ29kZTogbnVtYmVyO1xuICAgIGtleTogYW55O1xuICAgIGtleUNvZGU6IG51bWJlcjtc
bn1cblxuaW50ZXJmYWNlIEpRdWVyeVBvcFN0YXRlRXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1
ZXJ5RXZlbnRPYmplY3Qge1xuICAgIG9yaWdpbmFsRXZlbnQ6IFBvcFN0YXRlRXZlbnQ7XG59XG5c
bmludGVyZmFjZSBKUXVlcnlFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVj
dCwgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCwgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCwgSlF1ZXJ5
S2V5RXZlbnRPYmplY3QsIEpRdWVyeVBvcFN0YXRlRXZlbnRPYmplY3Qge1xufVxuXG4vKlxuICAg
IENvbGxlY3Rpb24gb2YgcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBicm93c2VyXG4qL1xuXG5p
bnRlcmZhY2UgSlF1ZXJ5U3VwcG9ydCB7XG4gICAgYWpheD86IGJvb2xlYW47XG4gICAgYm94TW9k
ZWw/OiBib29sZWFuO1xuICAgIGNoYW5nZUJ1YmJsZXM/OiBib29sZWFuO1xuICAgIGNoZWNrQ2xv
bmU/OiBib29sZWFuO1xuICAgIGNoZWNrT24/OiBib29sZWFuO1xuICAgIGNvcnM/OiBib29sZWFu
O1xuICAgIGNzc0Zsb2F0PzogYm9vbGVhbjtcbiAgICBocmVmTm9ybWFsaXplZD86IGJvb2xlYW47
XG4gICAgaHRtbFNlcmlhbGl6ZT86IGJvb2xlYW47XG4gICAgbGVhZGluZ1doaXRlc3BhY2U/OiBi
b29sZWFuO1xuICAgIG5vQ2xvbmVDaGVja2VkPzogYm9vbGVhbjtcbiAgICBub0Nsb25lRXZlbnQ/
OiBib29sZWFuO1xuICAgIG9wYWNpdHk/OiBib29sZWFuO1xuICAgIG9wdERpc2FibGVkPzogYm9v
bGVhbjtcbiAgICBvcHRTZWxlY3RlZD86IGJvb2xlYW47XG4gICAgc2NyaXB0RXZhbD8gKCk6IGJv
b2xlYW47XG4gICAgc3R5bGU/OiBib29sZWFuO1xuICAgIHN1Ym1pdEJ1YmJsZXM/OiBib29sZWFu
O1xuICAgIHRib2R5PzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBhcmFtIHtcbiAg
ICAob2JqOiBhbnkpOiBzdHJpbmc7XG4gICAgKG9iajogYW55LCB0cmFkaXRpb25hbDogYm9vbGVh
bik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gY29uc3RydWN0
IGpRdWVyeSBldmVudHMgKHdpdGggJC5FdmVudCkuIEl0IGlzXG4gKiBkZWZpbmVkIHNlcGFyYXRl
bHkgaW5zdGVhZCBvZiBpbmxpbmUgaW4gSlF1ZXJ5U3RhdGljIHRvIGFsbG93XG4gKiBvdmVycmlk
aW5nIHRoZSBjb25zdHJ1Y3Rpb24gZnVuY3Rpb24gd2l0aCBzcGVjaWZpYyBzdHJpbmdzXG4gKiBy
ZXR1cm5pbmcgc3BlY2lmaWMgZXZlbnQgb2JqZWN0cy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVyeUV2
ZW50Q29uc3RydWN0b3Ige1xuICAgIChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFu
eSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xuICAgIG5ldyAobmFtZTogc3RyaW5nLCBldmVudFByb3Bl
cnRpZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJm
YWNlIHVzZWQgdG8gc3BlY2lmeSBlYXNpbmcgZnVuY3Rpb25zLlxuICovXG5pbnRlcmZhY2UgSlF1
ZXJ5RWFzaW5nIHtcbiAgICBsaW5lYXIocDogbnVtYmVyKTogbnVtYmVyO1xuICAgIHN3aW5nKHA6
IG51bWJlcik6IG51bWJlcjtcbn1cblxuLypcbiAgICBTdGF0aWMgbWVtYmVycyBvZiBqUXVlcnkg
KHRob3NlIG9uICQgYW5kIGpRdWVyeSB0aGVtc2VsdmVzKVxuKi9cbmludGVyZmFjZSBKUXVlcnlT
dGF0aWMge1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAo
QWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBr
ZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRp
bmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0
aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgoc2V0dGluZ3M6IEpRdWVyeUFqYXhT
ZXR0aW5ncyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJv
bm91cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0
cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAg
ICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmln
dXJlIHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVs
dCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9c
biAgICBhamF4KHVybDogc3RyaW5nLCBzZXR0aW5ncz86IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpR
dWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9y
IG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQg
YmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBkYXRhVHlwZXMgQW4gb3B0aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUg
c3BhY2Utc2VwYXJhdGVkIGRhdGFUeXBlc1xuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxl
ciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAq
L1xuICAgIGFqYXhQcmVmaWx0ZXIoZGF0YVR5cGVzOiBzdHJpbmcsIGhhbmRsZXI6IChvcHRzOiBh
bnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhSKSA9
PiBhbnkpOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25z
IG9yIG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBh
bmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVy
ZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoaGFuZGxlcjogKG9w
dHM6IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlY
SFIpID0+IGFueSk6IHZvaWQ7XG5cbiAgICBhamF4U2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5n
cztcblxuICAgICAvKipcbiAgICAgICogU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWph
eCByZXF1ZXN0cy4gSXRzIHVzZSBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAgICAqXG4gICAgICAq
IEBwYXJhbSBvcHRpb25zIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0
aGUgZGVmYXVsdCBBamF4IHJlcXVlc3QuIEFsbCBvcHRpb25zIGFyZSBvcHRpb25hbC5cbiAgICAg
ICovXG4gICAgYWpheFNldHVwKG9wdGlvbnM6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IHZvaWQ7XG5c
biAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBH
RVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1
Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0
IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVj
dGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNv
biwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIHN1Y2Nl
c3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+
IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9h
ZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9y
IHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAg
ICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBp
ZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUg
b2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1
ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDog
c3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czog
c3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1
ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcg
YSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBj
b250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBA
cGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBz
ZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNr
IGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAg
ICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2Vy
dmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0
bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vz
cz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2Fk
IEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVl
c3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVS
TCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEg
Y2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVk
cy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFu
eSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlY
SFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2
ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBB
IHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5c
biAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50
IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBB
IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3Vj
Y2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikg
PT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRh
dGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSBy
ZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3Ry
aW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICog
QHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRo
ZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRh
dGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpx
WEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2Fk
IGEgSmF2YVNjcmlwdCBmaWxlIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVl
c3QsIHRoZW4gZXhlY3V0ZSBpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICog
QHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRo
ZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldFNjcmlwdCh1cmw6IHN0cmluZywg
c3VjY2Vzcz86IChzY3JpcHQ6IHN0cmluZywgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1
ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG5cbiAgICBwYXJhbTogSlF1ZXJ5UGFyYW07XG5c
biAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQ
T1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBz
dWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVz
dCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUg
bnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRh
dGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAo
eG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBz
dHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBK
UXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoq
XG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBs
YWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUg
cmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQg
aXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBl
IGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJh
bSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVm
YXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5c
biAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzog
KGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnks
IGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0
YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSBy
ZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3Ry
aW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICog
QHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRo
ZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0
IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5
cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50
IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9z
dCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmlu
Zyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEEgbXVsdGktcHVycG9zZSBjYWxsYmFj
a3MgbGlzdCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIHBvd2VyZnVsIHdheSB0byBtYW5hZ2UgY2Fs
bGJhY2sgbGlzdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmxhZ3MgQW4gb3B0aW9uYWwgbGlz
dCBvZiBzcGFjZS1zZXBhcmF0ZWQgZmxhZ3MgdGhhdCBjaGFuZ2UgaG93IHRoZSBjYWxsYmFjayBs
aXN0IGJlaGF2ZXMuXG4gICAgICovXG4gICAgQ2FsbGJhY2tzKGZsYWdzPzogc3RyaW5nKTogSlF1
ZXJ5Q2FsbGJhY2s7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyBvciByZWxlYXNlcyB0aGUgZXhl
Y3V0aW9uIG9mIGpRdWVyeSdzIHJlYWR5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhv
bGQgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlYWR5IGhvbGQgaXMgYmVpbmcgcmVxdWVzdGVkIG9y
IHJlbGVhc2VkXG4gICAgICovXG4gICAgaG9sZFJlYWR5KGhvbGQ6IGJvb2xlYW4pOiB2b2lkO1xu
XG4gICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAgKGVs
ZW1lbnQ6IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgKG9iamVjdDoge30pOiBKUXVlcnk7XG4gICAg
KGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IEpRdWVyeSk6
IEpRdWVyeTtcbiAgICAoZnVuYzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgKGFycmF5OiBhbnlb
XSk6IEpRdWVyeTtcbiAgICAoKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVsaW5xdWlz
aCBqUXVlcnkncyBjb250cm9sIG9mIHRoZSAkIHZhcmlhYmxlLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHJlbW92ZUFsbCBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJlbW92ZSBhbGwg
alF1ZXJ5IHZhcmlhYmxlcyBmcm9tIHRoZSBnbG9iYWwgc2NvcGUgKGluY2x1ZGluZyBqUXVlcnkg
aXRzZWxmKS5cbiAgICAgKi9cbiAgICBub0NvbmZsaWN0KHJlbW92ZUFsbD86IGJvb2xlYW4pOiBP
YmplY3Q7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxi
YWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVy
cmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3Ig
cGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJy
ZWRzOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPltdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAv
KipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBi
YXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhh
dCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBk
ZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlw
dCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBUW10pOiBKUXVl
cnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUg
Y2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkg
RGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3Rz
LCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5k
ZWZlcnJlZHM6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGNzc0hvb2tzOiB7IFtr
ZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICBjc3NOdW1iZXI6IGFueTtcblxuICAgIC8qKlxuICAg
ICAqIFN0b3JlIGFyYml0cmFyeSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGVs
ZW1lbnQuIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNldC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5c
biAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBz
ZXQuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgZGF0YSB2YWx1ZS5cbiAgICAgKi9cbiAg
ICBkYXRhPFQ+KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFQ7XG4g
ICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUg
ZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3Ig
dGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4g
ICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0
LlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcpOiBhbnk7
XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0
aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwg
b3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEu
XG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50KTogYW55O1xuXG4gICAgZGVxdWV1
ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBoYXNE
YXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4gICAgcXVldWUoZWxlbWVudDogRWxl
bWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4gICAgcXVldWUoZWxlbWVudDogRWxl
bWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5
O1xuXG4gICAgcmVtb3ZlRGF0YShlbGVtZW50OiBFbGVtZW50LCBuYW1lPzogc3RyaW5nKTogSlF1
ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBEZWZlcnJlZDxUPihiZWZvcmVTdGFydD86IChk
ZWZlcnJlZDogSlF1ZXJ5RGVmZXJyZWQ8VD4pID0+IGFueSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
XG4gICAgLy8gRWZmZWN0c1xuICAgIGZ4OiB7IHRpY2s6ICgpID0+IHZvaWQ7IGludGVydmFsOiBu
dW1iZXI7IHN0b3A6ICgpID0+IHZvaWQ7IHNwZWVkczogeyBzbG93OiBudW1iZXI7IGZhc3Q6IG51
bWJlcjsgfTsgb2ZmOiBib29sZWFuOyBzdGVwOiBhbnk7IH07XG5cbiAgICAvLyBFdmVudHNcbiAg
ICBwcm94eShmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIGNvbnRleHQ6IGFueSwgLi4uYXJn
czogYW55W10pOiBhbnk7XG4gICAgcHJveHkoY29udGV4dDogYW55LCBuYW1lOiBzdHJpbmcsIC4u
LmFyZ3M6IGFueVtdKTogYW55O1xuXG4gICAgRXZlbnQ6IEpRdWVyeUV2ZW50Q29uc3RydWN0b3I7
XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAgICBlcnJvcihtZXNzYWdlOiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZXhwcjogYW55O1xuICAgIGZuOiBhbnk7ICAvL1RP
RE86IERlY2lkZSBob3cgd2Ugd2FudCB0byB0eXBlIHRoaXNcbiAgICBpc1JlYWR5OiBib29sZWFu
O1xuXG4gICAgLy8gUHJvcGVydGllc1xuICAgIHN1cHBvcnQ6IEpRdWVyeVN1cHBvcnQ7XG5cbiAg
ICAvLyBVdGlsaXRpZXNcbiAgICBjb250YWlucyhjb250YWluZXI6IEVsZW1lbnQsIGNvbnRhaW5l
ZDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBlYWNoKGNvbGxlY3Rpb246IGFueSwgY2FsbGJh
Y2s6IChpbmRleEluQXJyYXk6IGFueSwgdmFsdWVPZkVsZW1lbnQ6IGFueSkgPT4gYW55KTogYW55
O1xuICAgIGVhY2goY29sbGVjdGlvbjogSlF1ZXJ5LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTog
bnVtYmVyLCB2YWx1ZU9mRWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGFueSk6IGFueTtcbiAgICBl
YWNoPFQ+KGNvbGxlY3Rpb246IFRbXSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51bWJlciwg
dmFsdWVPZkVsZW1lbnQ6IFQpID0+IGFueSk6IGFueTtcblxuICAgIGV4dGVuZCh0YXJnZXQ6IGFu
eSwgLi4ub2JqczogYW55W10pOiBhbnk7XG4gICAgZXh0ZW5kKGRlZXA6IGJvb2xlYW4sIHRhcmdl
dDogYW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcblxuICAgIGdsb2JhbEV2YWwoY29kZTogc3Ry
aW5nKTogYW55O1xuXG4gICAgZ3JlcDxUPihhcnJheTogVFtdLCBmdW5jOiAoZWxlbWVudE9mQXJy
YXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBib29sZWFuLCBpbnZlcnQ/OiBib29sZWFu
KTogVFtdO1xuXG4gICAgaW5BcnJheTxUPih2YWx1ZTogVCwgYXJyYXk6IFRbXSwgZnJvbUluZGV4
PzogbnVtYmVyKTogbnVtYmVyO1xuXG4gICAgaXNBcnJheShvYmo6IGFueSk6IGJvb2xlYW47XG4g
ICAgaXNFbXB0eU9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNGdW5jdGlvbihvYmo6
IGFueSk6IGJvb2xlYW47XG4gICAgaXNOdW1lcmljKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAg
IGlzUGxhaW5PYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzV2luZG93KG9iajogYW55
KTogYm9vbGVhbjtcbiAgICBpc1hNTERvYyhub2RlOiBOb2RlKTogYm9vbGVhbjtcblxuICAgIG1h
a2VBcnJheShvYmo6IGFueSk6IGFueVtdO1xuXG4gICAgbWFwPFQsIFU+KGFycmF5OiBUW10sIGNh
bGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBVKTog
VVtdO1xuICAgIG1hcChhcnJheTogYW55LCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBhbnks
IGluZGV4SW5BcnJheTogYW55KSA9PiBhbnkpOiBhbnk7XG5cbiAgICBtZXJnZTxUPihmaXJzdDog
VFtdLCBzZWNvbmQ6IFRbXSk6IFRbXTtcbiAgICBtZXJnZTxULFU+KGZpcnN0OiBUW10sIHNlY29u
ZDogVVtdKTogYW55W107XG5cbiAgICBub29wKCk6IGFueTtcblxuICAgIG5vdygpOiBudW1iZXI7
XG5cbiAgICBwYXJzZUpTT04oanNvbjogc3RyaW5nKTogYW55O1xuXG4gICAgLyoqXG4gICAgICog
UGFyc2VzIGEgc3RyaW5nIGludG8gYW4gWE1MIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGRhdGFhIHdlbGwtZm9ybWVkIFhNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICovXG4g
ICAgcGFyc2VYTUwoZGF0YTogc3RyaW5nKTogWE1MRG9jdW1lbnQ7XG5cbiAgICBxdWV1ZShlbGVt
ZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWU6IGFueVtdKTogSlF1ZXJ5
O1xuXG4gICAgdHJpbShzdHI6IHN0cmluZyk6IHN0cmluZztcblxuICAgIHR5cGUob2JqOiBhbnkp
OiBzdHJpbmc7XG5cbiAgICB1bmlxdWUoYXJyOiBhbnlbXSk6IGFueVtdO1xuXG4gICAgLyoqXG4g
ICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4gYXJyYXkgb2YgRE9NIG5vZGVzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGRhdGEgSFRNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICogQHBh
cmFtIGNvbnRleHQgRE9NIGVsZW1lbnQgdG8gc2VydmUgYXMgdGhlIGNvbnRleHQgaW4gd2hpY2gg
dGhlIEhUTUwgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkXG4gICAgICogQHBhcmFtIGtlZXBTY3Jp
cHRzIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBzY3JpcHRzIHBhc3Nl
ZCBpbiB0aGUgSFRNTCBzdHJpbmdcbiAgICAgKi9cbiAgICBwYXJzZUhUTUwoZGF0YTogc3RyaW5n
LCBjb250ZXh0PzogSFRNTEVsZW1lbnQsIGtlZXBTY3JpcHRzPzogYm9vbGVhbik6IGFueVtdO1xu
XG4gICAgQW5pbWF0aW9uKGVsZW06IGFueSwgcHJvcGVydGllczogYW55LCBvcHRpb25zOiBhbnkp
OiBhbnk7XG5cbiAgICBlYXNpbmc6IEpRdWVyeUVhc2luZztcbn1cblxuLypcbiAgICBUaGUgalF1
ZXJ5IGluc3RhbmNlIG1lbWJlcnNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5IHtcbiAgICAvLyBBSkFY
XG4gICAgYWpheENvbXBsZXRlKGhhbmRsZXI6IGFueSk6IEpRdWVyeTtcbiAgICBhamF4RXJyb3Io
aGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlv
bjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFNlbmQoaGFuZGxlcjogKGV2ZW50OiBh
bnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgYWpheFN0YXJ0KGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBh
amF4U3RvcChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN1Y2Nlc3MoaGFu
ZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjog
YW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBsb2FkKHVybDogc3RyaW5nLCBkYXRhPzogYW55
LCBjb21wbGV0ZT86IGFueSk6IEpRdWVyeTtcblxuICAgIHNlcmlhbGl6ZSgpOiBzdHJpbmc7XG4g
ICAgc2VyaWFsaXplQXJyYXkoKTogYW55W107XG5cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgYWRk
Q2xhc3MoY2xhc3NOYW1lczogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGFkZENsYXNzKGZ1bmM6IChp
bmRleDogYW55LCBjdXJyZW50Q2xhc3M6IGFueSkgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
Ly8gaHR0cDovL2FwaS5qcXVlcnkuY29tL2FkZEJhY2svXG4gICAgYWRkQmFjayhzZWxlY3Rvcj86
IHN0cmluZyk6IEpRdWVyeTtcblxuXG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBz
dHJpbmc7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVl
cnk7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBh
dHRyOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhdHRyKG1hcDogYW55KTogSlF1ZXJ5O1xu
XG4gICAgaGFzQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gICAgaHRtbCgp
OiBzdHJpbmc7XG4gICAgaHRtbChodG1sU3RyaW5nOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRt
bChodG1sQ29udGVudDogKGluZGV4OiBudW1iZXIsIG9sZGh0bWw6IHN0cmluZykgPT4gc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIGh0bWwob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBwcm9wKHBy
b3BlcnR5TmFtZTogc3RyaW5nKTogYW55O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcs
IHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgcHJvcChtYXA6IGFueSk6IEpRdWVyeTtcbiAgICBw
cm9wKHByb3BlcnR5TmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6IGFueSwgb2xkUHJvcGVydHlW
YWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVBdHRyKGF0dHJpYnV0ZU5h
bWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUNsYXNzKGNsYXNzTmFtZT86IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICByZW1vdmVDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZVByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICB0b2dnbGVDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgc3d0Y2g/OiBi
b29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKHN3dGNoPzogYm9vbGVhbik6IEpRdWVy
eTtcbiAgICB0b2dnbGVDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnksIHN3dGNoOiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHZhbCgpOiBhbnk7XG4gICAgdmFsKHZhbHVlOiBz
dHJpbmdbXSk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB2
YWwodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB2YWwoZnVuYzogKGluZGV4OiBhbnksIHZh
bHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFs
dWUgb2Ygc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNldCBv
ZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBB
IENTUyBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBz
dHJpbmc7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZv
ciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJv
cGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFs
dWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFt
ZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBv
bmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRz
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1l
LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5Llxu
ICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9y
IHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9w
ZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1
ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1l
OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQg
b25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFt
ZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5c
biAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXJbXSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMg
Zm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBw
cm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBm
dW5jdGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBl
bGVtZW50LiBSZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhl
IHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHBy
b3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcp
ID0+IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NT
IHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFy
YW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0
aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGVs
ZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMuXG4gICAgICov
XG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBudW1iZXIsIHZh
bHVlOiBudW1iZXIpID0+IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25l
IG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFuIG9iamVjdCBvZiBwcm9wZXJ0eS12
YWx1ZSBwYWlycyB0byBzZXQuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnRpZXM6IE9iamVjdCk6
IEpRdWVyeTtcblxuICAgIGhlaWdodCgpOiBudW1iZXI7XG4gICAgaGVpZ2h0KHZhbHVlOiBudW1i
ZXIpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGVp
Z2h0KGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgaW5uZXJIZWlnaHQoKTogbnVtYmVyO1xuICAgIGlubmVySGVpZ2h0KHZhbHVlOiBudW1iZXIp
OiBKUXVlcnk7XG5cbiAgICBpbm5lcldpZHRoKCk6IG51bWJlcjtcbiAgICBpbm5lcldpZHRoKHZh
bHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXQoKTogeyBsZWZ0OiBudW1iZXI7IHRv
cDogbnVtYmVyOyB9O1xuICAgIG9mZnNldChjb29yZGluYXRlczogYW55KTogSlF1ZXJ5O1xuICAg
IG9mZnNldChmdW5jOiAoaW5kZXg6IGFueSwgY29vcmRzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAg
IG91dGVySGVpZ2h0KHZhbHVlOiBudW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1
ZXJ5O1xuXG4gICAgb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtc
biAgICBvdXRlcldpZHRoKHZhbHVlOiBudW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTog
SlF1ZXJ5O1xuXG4gICAgcG9zaXRpb24oKTogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyOyB9
O1xuXG4gICAgc2Nyb2xsTGVmdCgpOiBudW1iZXI7XG4gICAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVt
YmVyKTogSlF1ZXJ5O1xuXG4gICAgc2Nyb2xsVG9wKCk6IG51bWJlcjtcbiAgICBzY3JvbGxUb3Ao
dmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHdpZHRoKCk6IG51bWJlcjtcbiAgICB3aWR0
aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHdpZHRoKHZhbHVlOiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgd2lkdGgoZnVuYzogKGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvLyBEYXRhXG4gICAgY2xlYXJRdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICBkYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xu
ICAgIGRhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICBkYXRh
KGtleT86IHN0cmluZyk6IGFueTtcblxuICAgIGRlcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShuYW1lT3JMaXN0PzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLy8gRGVmZXJyZWRcbiAgICBwcm9taXNlKHR5cGU/OiBhbnksIHRhcmdldD86IGFueSk6IEpR
dWVyeVByb21pc2U8YW55PjtcblxuICAgIC8vIEVmZmVjdHNcbiAgICBhbmltYXRlKHByb3BlcnRp
ZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4g
ICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJp
bmcsIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVz
OiBhbnksIG9wdGlvbnM6IHsgZHVyYXRpb24/OiBhbnk7IGVhc2luZz86IHN0cmluZzsgY29tcGxl
dGU/OiBGdW5jdGlvbjsgc3RlcD86IEZ1bmN0aW9uOyBxdWV1ZT86IGJvb2xlYW47IHNwZWNpYWxF
YXNpbmc/OiBhbnk7IH0pOiBKUXVlcnk7XG5cbiAgICBkZWxheShkdXJhdGlvbjogbnVtYmVyLCBx
dWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnks
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgZWFz
aW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVPdXQoZHVy
YXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVPdXQoZHVyYXRp
b24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICBmYWRlVG8oZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVtYmVyLCBjYWxsYmFjaz86IGFueSk6
IEpRdWVyeTtcbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVtYmVyLCBlYXNp
bmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvZ2dsZShk
dXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvZ2dsZShk
dXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtc
blxuICAgIGZpbmlzaCgpOiBKUXVlcnk7XG5cbiAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBjYWxs
YmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2hvdyhkdXJhdGlvbj86IGFu
eSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgZWFz
aW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlRG93bihk
dXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVEb3duKGR1
cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
XG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzog
c3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHN0b3AoY2xlYXJRdWV1ZT86
IGJvb2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgc3RvcChxdWV1ZT86
IGFueSwgY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVlcnk7
XG5cbiAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
ICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcbiAgICB0b2dnbGUoc2hvd09ySGlkZTogYm9vbGVhbik6IEpRdWVyeTtcblxu
ICAgIC8vIEV2ZW50c1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YT86IGFu
eSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERhdGE6IGFueSwgcHJldmVu
dEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBw
cmV2ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoLi4uZXZlbnRzOiBhbnlb
XSk6IEpRdWVyeTtcblxuICAgIGJsdXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJsdXIoZXZlbnREYXRhPzogYW55LCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjaGFuZ2VcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIGNoYW5nZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiY2xpY2tcIiBldmVudCBvbiBhbiBl
bGVtZW50LlxuICAgICAqL1xuICAgIGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBj
bGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNs
aWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVh
Y2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNsaWNrKGV2ZW50
RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiZGJsY2xpY2tc
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGRibGNsaWNrKCk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgZGJsY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBkYmxjbGljayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBkZWxlZ2F0ZShzZWxlY3Rvcjog
YW55LCBldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJmb2N1c1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZm9jdXMoKTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1
c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBmb2N1cyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8g
dGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZv
Y3VzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzaW4oaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlwdCBldmVu
dFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzaW4oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291dFwi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBmb2N1c291dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGZvY3Vzb3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIHR3
byBoYW5kbGVycyB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0
aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgYW5kIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlckluIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBt
b3VzZSBwb2ludGVyIGVudGVycyB0aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlck91
dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBsZWF2ZXMgdGhl
IGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxlckluOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnksIGhhbmRsZXJPdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGEgc2lu
Z2xlIGhhbmRsZXIgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4g
dGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlckluT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4g
ICAgaG92ZXIoaGFuZGxlckluT3V0OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleWRvd25c
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleWRvd24oKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlkb3duXCIg
SmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIGtleWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUga2V5ZG93blwiXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGtleWRvd24oZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlL
ZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dl
ciB0aGUgXCJrZXlwcmVzc1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5
cHJlc3MoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86
IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5dXBcIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIGtleXVwKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5dXAoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQg
ZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChldmVudERhdGE/OiBhbnksIGhhbmRs
ZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9hZFwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJs
b2FkXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEg
QW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVu
dCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZChldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZG93blwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIg
SmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2Vkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZWRvd24oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJtb3VzZWVudGVyXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAg
ICBtb3VzZWVudGVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1v
dXNlIGVudGVycyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGV2ZW50
RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91
c2VsZWF2ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZSgp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZp
cmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4g
ZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZShldmVudERhdGE6IE9iamVjdCwg
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlbW92ZVwiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKCk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2
YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91
c2Vtb3ZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3Vz
ZW1vdmUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dl
ciB0aGUgXCJtb3VzZW91dFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91
c2VvdXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VvdmVyXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3Zl
clwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNl
dXBcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNldXAoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVw
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgbW91c2V1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwibW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3Nl
ZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNldXAoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3Zl
IGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAgb2ZmKCk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25h
bCBuYW1lc3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtl
eWRvd24ubXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0
b3IgQSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3Nl
ZCB0byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGhhbmRsZXIgZnVuY3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2
ZW50KHMpLCBvciB0aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZl
bnRzOiBzdHJpbmcsIHNlbGVjdG9yPzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92
ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3Ig
bW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMs
IG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdp
blwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBm
dW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVj
aWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50cyBBbiBvYmplY3Qgd2hlcmUgdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUg
b3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFj
ZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBoYW5kbGVyIGZ1bmN0aW9ucyBwcmV2aW91c2x5
IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2Vs
ZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQgdG8gLm9u
KCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50
czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9u
ZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBh
bmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15
UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dl
ZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBm
YWxzZS4gUmVzdCBwYXJhbWV0ZXIgYXJncyBpcyBmb3Igb3B0aW9uYWwgcGFyYW1ldGVycyBwYXNz
ZWQgdG8galF1ZXJ5LnRyaWdnZXIoKS4gTm90ZSB0aGF0IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBv
biB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBtdXN0IGJlIG1hcmtlZCBhcyBvcHRpb25hbCAo
PyBzeW50YXgpLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZv
ciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlw
ZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93
bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0
byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRy
aWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUg
ZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVs
ZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBh
cyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxz
ZS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUg
b3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5k
IG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBs
dWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0
ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIg
dGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQg
aXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQu
XG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4g
ZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBU
aGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0
aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50
czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRz
IHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMg
QW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUg
c3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQg
dGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3Ig
dGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0
byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdp
bGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwg
dGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVk
IGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhh
bmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAgICBv
bihldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IGFueSwgZGF0YT86
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4g
ZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBv
bmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlw
ZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1l
cy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJp
bmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0
aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxl
bWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJp
bmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFz
IFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICog
QHBhcmFtIGRhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG9uZShldmVudHM6IHN0cmluZywgZGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5k
bGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVk
IGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBv
ciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3Rv
ciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVu
dHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21p
dHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBz
ZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNv
IGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyBy
ZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjog
c3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBm
b3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVy
IGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9u
ZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNw
YWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICog
QHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFu
dHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRo
ZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dl
cmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0g
ZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4g
YW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBp
cyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkg
ZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxl
Y3Rvcjogc3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhh
bmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0
ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJl
c2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFs
IG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24g
dG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEg
c2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVk
IGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMg
bnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVh
Y2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJl
IHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJz
LlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxl
Y3Rvcj86IHN0cmluZywgZGF0YT86IGFueSk6IEpRdWVyeTtcblxuXG4gICAgLyoqXG4gICAgICog
U3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgRE9NIGlzIGZ1bGx5IGxvYWRl
ZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBh
ZnRlciB0aGUgRE9NIGlzIHJlYWR5LlxuICAgICAqL1xuICAgIHJlYWR5KGhhbmRsZXI6IEZ1bmN0
aW9uKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJyZXNpemVcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHJlc2l6ZSgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
cmVzaXplKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
cmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUo
ZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2Ny
b2xsXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzY3JvbGwoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHNjcm9sbChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
c2Nyb2xsKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcInNlbGVjdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2VsZWN0KCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzZWxlY3QoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBw
YXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHNlbGVjdChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJzdWJtaXRcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHN1
Ym1pdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgc3VibWl0KGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXIoZXZl
bnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55W10pOiBKUXVlcnk7XG4gICAg
dHJpZ2dlcihldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2Vy
SGFuZGxlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IE9i
amVjdDtcblxuICAgIHVuYmluZChldmVudFR5cGU/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2
ZW50VHlwZTogc3RyaW5nLCBmbHM6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2dDog
YW55KTogSlF1ZXJ5O1xuXG4gICAgdW5kZWxlZ2F0ZSgpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0
ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNl
bGVjdG9yOiBhbnksIGV2ZW50czogYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUobmFtZXNw
YWNlOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB1bmxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVubG9hZChldmVudERh
dGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAgICBjb250ZXh0OiBFbGVtZW50O1xu
ICAgIGpxdWVyeTogc3RyaW5nO1xuXG4gICAgZXJyb3IoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGVycm9yKGV2ZW50RGF0YTog
YW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHB1
c2hTdGFjayhlbGVtZW50czogYW55W10sIG5hbWU6IGFueSwgYXJndW1lbnRzOiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvLyBNYW5pcHVsYXRpb25cbiAgICBhZnRlciguLi5jb250ZW50OiBhbnlbXSk6
IEpRdWVyeTtcbiAgICBhZnRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgYXBwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFwcGVuZChmdW5j
OiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmRU
byh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIGJlZm9yZSguLi5jb250ZW50OiBhbnlbXSk6
IEpRdWVyeTtcbiAgICBiZWZvcmUoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIGNsb25lKHdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbiwgZGVlcFdpdGhEYXRhQW5k
RXZlbnRzPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIGRldGFjaChzZWxlY3Rvcj86IGFueSk6
IEpRdWVyeTtcblxuICAgIGVtcHR5KCk6IEpRdWVyeTtcblxuICAgIGluc2VydEFmdGVyKHRhcmdl
dDogYW55KTogSlF1ZXJ5O1xuICAgIGluc2VydEJlZm9yZSh0YXJnZXQ6IGFueSk6IEpRdWVyeTtc
blxuICAgIHByZXBlbmQoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgcHJlcGVuZChm
dW5jOiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVw
ZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmUoc2VsZWN0b3I/OiBhbnkp
OiBKUXVlcnk7XG5cbiAgICByZXBsYWNlQWxsKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAg
cmVwbGFjZVdpdGgoZnVuYzogYW55KTogSlF1ZXJ5O1xuXG4gICAgdGV4dCgpOiBzdHJpbmc7XG4g
ICAgdGV4dCh0ZXh0U3RyaW5nOiBhbnkpOiBKUXVlcnk7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiAo
aW5kZXg6IG51bWJlciwgdGV4dDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0
b0FycmF5KCk6IGFueVtdO1xuXG4gICAgdW53cmFwKCk6IEpRdWVyeTtcblxuICAgIHdyYXAod3Jh
cHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgd3JhcChmdW5jOiAoaW5kZXg6IGFueSkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcEFsbCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpR
dWVyeTtcblxuICAgIHdyYXBJbm5lcih3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAg
ICB3cmFwSW5uZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8v
IE1pc2NlbGxhbmVvdXNcbiAgICBlYWNoKGZ1bmM6IChpbmRleDogYW55LCBlbGVtOiBFbGVtZW50
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBnZXQoaW5kZXg/OiBudW1iZXIpOiBhbnk7XG5cbiAg
ICBpbmRleCgpOiBudW1iZXI7XG4gICAgaW5kZXgoc2VsZWN0b3I6IHN0cmluZyk6IG51bWJlcjtc
biAgICBpbmRleChlbGVtZW50OiBhbnkpOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4g
ICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgc2VsZWN0b3I6IHN0cmluZztcbiAgICBbeDogc3RyaW5n
XTogYW55O1xuICAgIFt4OiBudW1iZXJdOiBIVE1MRWxlbWVudDtcblxuICAgIC8vIFRyYXZlcnNp
bmdcbiAgICBhZGQoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAg
ICBhZGQoLi4uZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFkZChodG1sOiBzdHJpbmcp
OiBKUXVlcnk7XG4gICAgYWRkKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgY2hpbGRyZW4o
c2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcp
OiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogRWxlbWVu
dCk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIGNsb3Nl
c3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3JzOiBhbnksIGNv
bnRleHQ/OiBFbGVtZW50KTogYW55W107XG5cbiAgICBjb250ZW50cygpOiBKUXVlcnk7XG5cbiAg
ICBlbmQoKTogSlF1ZXJ5O1xuXG4gICAgZXEoaW5kZXg6IG51bWJlcik6IEpRdWVyeTtcblxuICAg
IGZpbHRlcihzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGZpbHRlcihmdW5jOiAoaW5k
ZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihlbGVtZW50OiBhbnkpOiBKUXVl
cnk7XG4gICAgZmlsdGVyKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmluZChzZWxlY3Rv
cjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGZpbmQoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAg
IGZpbmQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBmaXJzdCgpOiBKUXVlcnk7XG5cbiAg
ICBoYXMoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoYXMoY29udGFpbmVkOiBFbGVt
ZW50KTogSlF1ZXJ5O1xuXG4gICAgaXMoc2VsZWN0b3I6IHN0cmluZyk6IGJvb2xlYW47XG4gICAg
aXMoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IGJvb2xlYW47XG4gICAgaXMoZWxlbWVudDog
YW55KTogYm9vbGVhbjtcbiAgICBpcyhvYmo6IEpRdWVyeSk6IGJvb2xlYW47XG5cbiAgICBsYXN0
KCk6IEpRdWVyeTtcblxuICAgIG1hcChjYWxsYmFjazogKGluZGV4OiBhbnksIGRvbUVsZW1lbnQ6
IEVsZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG5leHQoc2VsZWN0b3I/OiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICBuZXh0QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4g
ICAgbmV4dFVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgbmV4dFVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgbmV4dFVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5
O1xuXG4gICAgbm90KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbm90KGZ1bmM6IChp
bmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgbm90KGVsZW1lbnQ6IGFueSk6IEpRdWVy
eTtcbiAgICBub3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXRQYXJlbnQoKTog
SlF1ZXJ5O1xuXG4gICAgcGFyZW50KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
cGFyZW50cyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHBhcmVudHNVbnRpbChz
ZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNV
bnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBh
cmVudHNVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IHByZXYoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2QWxsKHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldlVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBm
aWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJldlVudGlsKGVsZW1lbnQ/OiBFbGVtZW50
LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJldlVudGlsKG9iaj86IEpRdWVyeSwg
ZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2libGluZ3Moc2VsZWN0b3I/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICBzbGljZShzdGFydDogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBK
UXVlcnk7XG5cbiAgICAvLyBVdGlsaXRpZXNcblxuICAgIHF1ZXVlKHF1ZXVlTmFtZT86IHN0cmlu
Zyk6IGFueVtdO1xuICAgIHF1ZXVlKHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJh
Y2s6IGFueSk6IEpRdWVyeTtcbiAgICBxdWV1ZShuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpR
dWVyeTtcbn1cbmRlY2xhcmUgbW9kdWxlIFwianF1ZXJ5XCIge1xuICAgIGV4cG9ydCA9ICQ7XG59
XG5kZWNsYXJlIHZhciBqUXVlcnk6IEpRdWVyeVN0YXRpYztcbmRlY2xhcmUgdmFyICQ6IEpRdWVy
eVN0YXRpYztcbi8vIGxpYnMvYW5ndWxhci9hbmd1bGFyLmQudHNcbi8vIFR5cGUgZGVmaW5pdGlv
bnMgZm9yIEFuZ3VsYXIgSlMgMS4wXG4vLyBQcm9qZWN0OiBodHRwOi8vYW5ndWxhcmpzLm9yZ1xu
Ly8gRGVmaW5pdGlvbnMgYnk6IERpZWdvIFZpbGFyIDxodHRwOi8vZ2l0aHViLmNvbS9kaWVnb3Zp
bGFyPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZp
bml0ZWx5VHlwZWRcblxuXG5cbmRlY2xhcmUgdmFyIGFuZ3VsYXI6IG5nLklBbmd1bGFyU3RhdGlj
O1xuXG4vLyBTdXBwb3J0IGZvciBwYWlubGVzcyBkZXBlbmRlbmN5IGluamVjdGlvblxuaW50ZXJm
YWNlIEZ1bmN0aW9uIHtcbiAgICAkaW5qZWN0OnN0cmluZ1tdO1xufVxuXG4vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4vLyBuZyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG5kZWNsYXJlIG1vZHVsZSBuZyB7XG5cbiAgICAvLyBBbGwgc2VydmljZSBwcm92aWRlcnMg
ZXh0ZW5kIHRoaXMgaW50ZXJmYWNlXG4gICAgaW50ZXJmYWNlIElTZXJ2aWNlUHJvdmlkZXIge1xu
ICAgICAgICAkZ2V0OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gQW5ndWxhclN0YXRpY1xuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5ndWxhclN0YXRpYyB7
XG4gICAgICAgIGJpbmQoY29udGV4dDogYW55LCBmbjogRnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtd
KTogRnVuY3Rpb247XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBzdHJpbmcsIG1vZHVsZXM/
OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1l
bnQ6IEpRdWVyeSwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAg
ICAgICBib290c3RyYXAoZWxlbWVudDogRWxlbWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5J
SW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogRG9jdW1lbnQsIG1v
ZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgY29weShzb3Vy
Y2U6IGFueSwgZGVzdGluYXRpb24/OiBhbnkpOiBhbnk7XG4gICAgICAgIGVsZW1lbnQ6IElBdWdt
ZW50ZWRKUXVlcnlTdGF0aWM7XG4gICAgICAgIGVxdWFscyh2YWx1ZTE6IGFueSwgdmFsdWUyOiBh
bnkpOiBib29sZWFuO1xuICAgICAgICBleHRlbmQoZGVzdGluYXRpb246IGFueSwgLi4uc291cmNl
czogYW55W10pOiBhbnk7XG4gICAgICAgIGZvckVhY2gob2JqOiBhbnksIGl0ZXJhdG9yOiAodmFs
dWU6IGFueSwga2V5OiBhbnkpID0+IGFueSwgY29udGV4dD86IGFueSk6IGFueTtcbiAgICAgICAg
ZnJvbUpzb24oanNvbjogc3RyaW5nKTogYW55O1xuICAgICAgICBpZGVudGl0eShhcmc/OiBhbnkp
OiBhbnk7XG4gICAgICAgIGluamVjdG9yKG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9y
U2VydmljZTtcbiAgICAgICAgaXNBcnJheSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAg
aXNEYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0RlZmluZWQodmFsdWU6IGFu
eSk6IGJvb2xlYW47XG4gICAgICAgIGlzRWxlbWVudCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAg
ICAgICAgaXNGdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNOdW1iZXIo
dmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29s
ZWFuO1xuICAgICAgICBpc1N0cmluZyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNV
bmRlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGxvd2VyY2FzZShzdHI6IHN0
cmluZyk6IHN0cmluZztcbiAgICAgICAgLyoqIGNvbnN0cnVjdCB5b3VyIGFuZ3VsYXIgYXBwbGlj
YXRpb25cblx0XHRvZmZpY2lhbCBkb2NzOiBJbnRlcmZhY2UgZm9yIGNvbmZpZ3VyaW5nIGFuZ3Vs
YXIgbW9kdWxlcy5cblx0XHRzZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3Vs
YXIuTW9kdWxlXG5cdFx0Ki9cbiAgICAgICAgbW9kdWxlKFxuICAgICAgICAgICAgLyoqIG5hbWUg
b2YgeW91ciBtb2R1bGUgeW91IHdhbnQgdG8gY3JlYXRlICovXG4gICAgICAgICAgICBuYW1lOiBz
dHJpbmcsXG4gICAgICAgICAgICAvKiogbmFtZSBvZiBtb2R1bGVzIHlvdXJzIGRlcGVuZHMgb24g
Ki9cbiAgICAgICAgICAgIHJlcXVpcmVzPzogc3RyaW5nW10sXG4gICAgICAgICAgICBjb25maWdG
dW5jdGlvbj86IGFueSk6IElNb2R1bGU7XG4gICAgICAgIG5vb3AoLi4uYXJnczogYW55W10pOiB2
b2lkO1xuICAgICAgICB0b0pzb24ob2JqOiBhbnksIHByZXR0eT86IGJvb2xlYW4pOiBzdHJpbmc7
XG4gICAgICAgIHVwcGVyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgdmVyc2lv
bjoge1xuICAgICAgICAgICAgZnVsbDogc3RyaW5nO1xuICAgICAgICAgICAgbWFqb3I6IG51bWJl
cjtcbiAgICAgICAgICAgIG1pbm9yOiBudW1iZXI7XG4gICAgICAgICAgICBkb3Q6IG51bWJlcjtc
biAgICAgICAgICAgIGNvZGVuYW1lOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTW9kdWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElNb2R1bGUge1xuICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5n
LCBhbmltYXRpb25GYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlv
bihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIGFuaW1hdGlvbihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIC8q
KiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJl
Z2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5n
XG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhjb25maWdGbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xu
ICAgICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1l
dGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1
bGUgbG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWcoaW5saW5lQW5ub3RhZGVkRnVuY3Rp
b246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1
ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgY29uc3RhbnQob2JqZWN0OiBPYmplY3QpOiBJTW9k
dWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVj
dG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5n
LCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBj
b250cm9sbGVyKG9iamVjdCA6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShu
YW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAg
ICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtd
KTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtc
biAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1
bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlubGluZUFu
bm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGZhY3Rvcnkob2JqZWN0
OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJG
YWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6
IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAg
ICAgZmlsdGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFt
ZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxl
O1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVj
dG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG9iamVjdDogT2JqZWN0KTog
SU1vZHVsZTtcbiAgICAgICAgcnVuKGluaXRpYWxpemF0aW9uRnVuY3Rpb246IEZ1bmN0aW9uKTog
SU1vZHVsZTtcbiAgICAgICAgcnVuKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElN
b2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBzZXJ2aWNlQ29uc3RydWN0b3I6
IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGlubGlu
ZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2Uo
b2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZh
bHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICB2YWx1ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1
bGU7XG5cbiAgICAgICAgLy8gUHJvcGVydGllc1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAg
ICAgIHJlcXVpcmVzOiBzdHJpbmdbXTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBBdHRyaWJ1dGVzXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElBdHRyaWJ1dGVzIHtcblx0Ly8gdGhpcyBpcyBuZWNlc3Nhcnkg
dG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHNjb3BlZCBhdHRyaWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5
IGVsZWdhbnRcblx0Ly8gYmVjYXVzZSB5b3UgaGF2ZSB0byB1c2UgYXR0cnNbJ2ZvbyddIGluc3Rl
YWQgb2YgYXR0cnMuZm9vIGJ1dCBJIGRvbid0IGtub3cgb2YgYSBiZXR0ZXIgd2F5XG5cdC8vIHRo
aXMgc2hvdWxkIHJlYWxseSBiZSBsaW1pdGVkIHRvIHJldHVybiBzdHJpbmcgYnV0IGl0IGNyZWF0
ZXMgdGhpcyBwcm9ibGVtOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xNzIwMTg1NC8xNjU2
NTZcblx0W25hbWU6IHN0cmluZ106IGFueTtcblxuICAgICAgICAvLyBBZGRzIHRoZSBDU1MgY2xh
c3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgdG8gdGhlXG4gICAg
ICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRp
b24gd2lsbCBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gZm9yIHRoZSBjbGFzcyBhZGRpdGlvbi5c
biAgICAgICAgJGFkZENsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8v
IFJlbW92ZXMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBh
cmFtZXRlciBmcm9tIHRoZVxuICAgICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBl
bmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIGZvclxuICAgICAgICAv
LyB0aGUgY2xhc3MgcmVtb3ZhbC5cbiAgICAgICAgJHJlbW92ZUNsYXNzKGNsYXNzVmFsOiBzdHJp
bmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFNldCBET00gZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWUu
XG4gICAgICAgICRzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAg
IC8vIE9ic2VydmVzIGFuIGludGVycG9sYXRlZCBhdHRyaWJ1dGUuXG4gICAgICAgIC8vIFRoZSBv
YnNlcnZlciBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25jZSBkdXJpbmcgdGhlIG5leHQgJGRp
Z2VzdFxuICAgICAgICAvLyBmb2xsb3dpbmcgY29tcGlsYXRpb24uIFRoZSBvYnNlcnZlciBpcyB0
aGVuIGludm9rZWQgd2hlbmV2ZXIgdGhlXG4gICAgICAgIC8vIGludGVycG9sYXRlZCB2YWx1ZSBj
aGFuZ2VzLlxuICAgICAgICAkb2JzZXJ2ZShuYW1lOiBzdHJpbmcsIGZuOih2YWx1ZT86YW55KT0+
YW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgLy8gQSBtYXAgb2YgRE9NIGVsZW1lbnQgYXR0cmli
dXRlIG5hbWVzIHRvIHRoZSBub3JtYWxpemVkIG5hbWUuIFRoaXMgaXMgbmVlZGVkXG4gICAgICAg
IC8vIHRvIGRvIHJldmVyc2UgbG9va3VwIGZyb20gbm9ybWFsaXplZCBuYW1lIGJhY2sgdG8gYWN0
dWFsIG5hbWUuXG4gICAgICAgICRhdHRyOiBPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gRm9ybUNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOmZvcm0uRm9ybUNvbnRyb2xsZXJcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZvcm1Db250cm9sbGVyIHtcbiAgICAg
ICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAg
ICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRl
cnJvcjogYW55O1xuICAgICAgICAkYWRkQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRy
b2xsZXIpOiB2b2lkO1xuICAgICAgICAkcmVtb3ZlQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2Rl
bENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAkc2V0RGlydHkoKTogdm9pZDtcbiAgICAgICAg
JHNldFByaXN0aW5lKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuZGlyZWN0aXZlOm5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU5nTW9kZWxDb250cm9sbGVyIHtcbiAgICAg
ICAgJHJlbmRlcigpOiB2b2lkO1xuICAgICAgICAkc2V0VmFsaWRpdHkodmFsaWRhdGlvbkVycm9y
S2V5OiBzdHJpbmcsIGlzVmFsaWQ6IGJvb2xlYW4pOiB2b2lkO1xuICAgICAgICAvLyBEb2N1bWVu
dGF0aW9uIHN0YXRlcyB2aWV3VmFsdWUgYW5kIG1vZGVsVmFsdWUgdG8gYmUgYSBzdHJpbmcgYnV0
IG90aGVyXG4gICAgICAgIC8vIHR5cGVzIGRvIHdvcmsgYW5kIGl0J3MgY29tbW9uIHRvIHVzZSB0
aGVtLlxuICAgICAgICAkc2V0Vmlld1ZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgICAgICAk
dmlld1ZhbHVlOiBhbnk7XG5cbiAgICAgICAgJG1vZGVsVmFsdWU6IGFueTtcblxuICAgICAgICAk
cGFyc2VyczogSU1vZGVsUGFyc2VyW107XG4gICAgICAgICRmb3JtYXR0ZXJzOiBJTW9kZWxGb3Jt
YXR0ZXJbXTtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVh
bjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4g
ICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxQ
YXJzZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZh
Y2UgSU1vZGVsRm9ybWF0dGVyIHtcbiAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU2NvcGVcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29wZS5TY29wZVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU2NvcGUge1xuICAgICAgICAkYXBwbHkoKTogYW55
O1xuICAgICAgICAkYXBwbHkoZXhwOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6
IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBhbnk7XG5cbiAgICAgICAgJGJyb2FkY2FzdChuYW1l
OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJFdmVudDtcbiAgICAgICAgJGRlc3Ry
b3koKTogdm9pZDtcbiAgICAgICAgJGRpZ2VzdCgpOiB2b2lkO1xuICAgICAgICAkZW1pdChuYW1l
OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJFdmVudDtcblxuICAgICAgICAvLyBE
b2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGltcGxlbWVudGF0
b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246IHN0cmluZywgYXJncz86
IE9iamVjdCk6IGFueTtcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUp
ID0+IGFueSwgYXJncz86IE9iamVjdCk6IGFueTtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9u
IHNheXMgZXhwIGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9u
IGl0XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjogc3RyaW5nKTogdm9pZDtcbiAgICAg
ICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogdm9pZDtc
blxuICAgICAgICAvLyBEZWZhdWx0cyB0byBmYWxzZSBieSB0aGUgaW1wbGVtZW50YXRpb24gY2hl
Y2tpbmcgc3RyYXRlZ3lcbiAgICAgICAgJG5ldyhpc29sYXRlPzogYm9vbGVhbik6IElTY29wZTtc
blxuICAgICAgICAkb24obmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBJQW5ndWxhckV2
ZW50LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNo
KHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxp
dHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246
IHN0cmluZywgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6
IElTY29wZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAg
ICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlz
dGVuZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAg
ICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0
ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBh
bnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRj
aENvbGxlY3Rpb24od2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyOiAobmV3VmFsdWU6
IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG4g
ICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkg
PT4gYW55LCBsaXN0ZW5lcjogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJ
U2NvcGUpID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgICRwYXJlbnQ6IElTY29wZTtcblxu
ICAgICAgICAkaWQ6IG51bWJlcjtcblxuICAgICAgICAvLyBIaWRkZW4gbWVtYmVyc1xuICAgICAg
ICAkJGlzb2xhdGVCaW5kaW5nczogYW55O1xuICAgICAgICAkJHBoYXNlOiBhbnk7XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElBbmd1bGFyRXZlbnQge1xuICAgICAgICB0YXJnZXRTY29wZTogSVNj
b3BlO1xuICAgICAgICBjdXJyZW50U2NvcGU6IElTY29wZTtcbiAgICAgICAgbmFtZTogc3RyaW5n
O1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogRnVuY3Rpb247XG4gICAgICAgIGRlZmF1bHRQcmV2
ZW50ZWQ6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gQXZhaWxhYmxlIG9ubHkgZXZlbnRzIHRoYXQg
d2VyZSAkZW1pdC10ZWRcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uPzogRnVuY3Rpb247XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gV2luZG93U2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kd2luZG93XG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElXaW5kb3dTZXJ2aWNlIGV4dGVuZHMgV2luZG93
IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBCcm93c2VyU2VydmljZVxuICAg
IC8vIFRPRE8gdW5kb2N1bWVudGVkLCBzbyB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRoZSBzb3Vy
Y2UgY29kZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQnJvd3NlclNl
cnZpY2Uge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFRpbWVvdXRTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0aW1lb3V0XG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElUaW1lb3V0U2VydmljZSB7XG4g
ICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9v
bGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxh
bnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJ
bnRlcnZhbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJGludGVydmFsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElJbnRl
cnZhbFNlcnZpY2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5OiBudW1iZXIsIGNv
dW50PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAg
ICAgICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRmlsdGVyU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmlsdGVyXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJQcm92aWRlclxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRmlsdGVyU2VydmljZSB7XG4gICAgICAgIChuYW1l
OiBzdHJpbmcpOiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUZpbHRlclByb3Zp
ZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0
cmluZywgZmlsdGVyRmFjdG9yeTogRnVuY3Rpb24pOiBJU2VydmljZVByb3ZpZGVyO1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvY2FsZVNlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2FsZVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9jYWxlU2VydmljZSB7XG4gICAgICAgIGlkOiBz
dHJpbmc7XG5cbiAgICAgICAgLy8gVGhlc2UgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIC8v
IENoZWNrIGFuZ3VsYXIncyBpMThuIGZpbGVzIGZvciBleGVtcGxlc1xuICAgICAgICBOVU1CRVJf
Rk9STUFUUzogSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIERBVEVUSU1F
X0ZPUk1BVFM6IElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIHBsdXJh
bENhdDogKG51bTogYW55KSA9PiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2Nh
bGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgREVDSU1BTF9TRVA6IHN0cmluZztc
biAgICAgICAgR1JPVVBfU0VQOiBzdHJpbmc7XG4gICAgICAgIFBBVFRFUk5TOiBJTG9jYWxlTnVt
YmVyUGF0dGVybkRlc2NyaXB0b3JbXTtcbiAgICAgICAgQ1VSUkVOQ1lfU1lNOiBzdHJpbmc7XG4g
ICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvciB7XG4g
ICAgICAgIG1pbkludDogbnVtYmVyO1xuICAgICAgICBtaW5GcmFjOiBudW1iZXI7XG4gICAgICAg
IG1heEZyYWM6IG51bWJlcjtcbiAgICAgICAgcG9zUHJlOiBzdHJpbmc7XG4gICAgICAgIHBvc1N1
Zjogc3RyaW5nO1xuICAgICAgICBuZWdQcmU6IHN0cmluZztcbiAgICAgICAgbmVnU3VmOiBzdHJp
bmc7XG4gICAgICAgIGdTaXplOiBudW1iZXI7XG4gICAgICAgIGxnU2l6ZTogbnVtYmVyO1xuICAg
IH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yIHtcbiAg
ICAgICAgTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBTSE9SVE1PTlRIOiBzdHJpbmdbXTtcbiAg
ICAgICAgREFZOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlREQVk6IHN0cmluZ1tdO1xuICAgICAg
ICBBTVBNUzogc3RyaW5nW107XG4gICAgICAgIG1lZGl1bTogc3RyaW5nO1xuICAgICAgICBzaG9y
dDogc3RyaW5nO1xuICAgICAgICBmdWxsRGF0ZTogc3RyaW5nO1xuICAgICAgICBsb25nRGF0ZTog
c3RyaW5nO1xuICAgICAgICBtZWRpdW1EYXRlOiBzdHJpbmc7XG4gICAgICAgIHNob3J0RGF0ZTog
c3RyaW5nO1xuICAgICAgICBtZWRpdW1UaW1lOiBzdHJpbmc7XG4gICAgICAgIHNob3J0VGltZTog
c3RyaW5nO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvZ1NlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvZ1xuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9nU2VydmljZSB7XG4gICAgICAg
IGRlYnVnOiBJTG9nQ2FsbDtcbiAgICAgICAgZXJyb3I6IElMb2dDYWxsO1xuICAgICAgICBpbmZv
OiBJTG9nQ2FsbDtcbiAgICAgICAgbG9nOiBJTG9nQ2FsbDtcbiAgICAgICAgd2FybjogSUxvZ0Nh
bGw7XG4gICAgfVxuXG4gICAgLy8gV2UgZGVmaW5lIHRoaXMgYXMgc2VwYXJldGUgaW50ZXJmYWNl
IHNvIHdlIGNhbiByZW9wZW4gaXQgbGF0ZXIgZm9yXG4gICAgLy8gdGhlIG5nTW9jayBtb2R1bGUu
XG4gICAgaW50ZXJmYWNlIElMb2dDYWxsIHtcbiAgICAgICAgKC4uLmFyZ3M6IGFueVtdKTogdm9p
ZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBQYXJzZVNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHBhcnNlXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElQYXJzZVNlcnZpY2Uge1xuICAgICAg
ICAoZXhwcmVzc2lvbjogc3RyaW5nKTogSUNvbXBpbGVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAg
ICBpbnRlcmZhY2UgSUNvbXBpbGVkRXhwcmVzc2lvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnks
IGxvY2Fscz86IGFueSk6IGFueTtcblxuICAgICAgICAvLyBJZiB2YWx1ZSBpcyBub3QgcHJvdmlk
ZWQsIHVuZGVmaW5lZCBpcyBnb25uYSBiZSB1c2VkIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvblxu
ICAgICAgICAvLyBkb2VzIG5vdCBjaGVjayB0aGUgcGFyYW1ldGVyLiBMZXQncyBmb3JjZSBhIHZh
bHVlIGZvciBjb25zaXN0ZW5jeS4gSWYgY29uc3VtZXJcbiAgICAgICAgLy8gd2hhbnRzIHRvIHVu
ZGVmaW5lIGl0LCBwYXNzIHRoZSB1bmRlZmluZWQgdmFsdWUgZXhwbGljaXRseS5cbiAgICAgICAg
YXNzaWduKGNvbnRleHQ6IGFueSwgdmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhdGlvblNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9uXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblByb3ZpZGVyXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGV2X2d1aWRlLnNlcnZpY2VzLiRsb2NhdGlv
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9jYXRpb25TZXJ2aWNl
IHtcbiAgICAgICAgYWJzVXJsKCk6IHN0cmluZztcbiAgICAgICAgaGFzaCgpOiBzdHJpbmc7XG4g
ICAgICAgIGhhc2gobmV3SGFzaDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAg
aG9zdCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKG5l
d1BhdGg6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHBvcnQoKTogbnVtYmVy
O1xuICAgICAgICBwcm90b2NvbCgpOiBzdHJpbmc7XG4gICAgICAgIHJlcGxhY2UoKTogSUxvY2F0
aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKCk6IGFueTtcbiAgICAgICAgc2VhcmNoKHBhcmFt
ZXRlcnNNYXA6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0
ZXI6IHN0cmluZywgcGFyYW1ldGVyVmFsdWU6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAg
ICAgIHVybCgpOiBzdHJpbmc7XG4gICAgICAgIHVybCh1cmw6IHN0cmluZyk6IElMb2NhdGlvblNl
cnZpY2U7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblByb3ZpZGVyIGV4dGVuZHMg
SVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGhhc2hQcmVmaXgoKTogc3RyaW5nO1xuICAgICAg
ICBoYXNoUHJlZml4KHByZWZpeDogc3RyaW5nKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgICAg
IGh0bWw1TW9kZSgpOiBib29sZWFuO1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVz
IHRoYXQgcGFyYW1ldGVyIGlzIHN0cmluZywgYnV0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9u
IHRlc3RzIGl0IGFzIGJvb2xlYW4sIHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2VcbiAgICAgICAgLy8g
c2luY2UgdGhpcyBpcyBhIHRvZ2dsZXJcbiAgICAgICAgaHRtbDVNb2RlKGFjdGl2ZTogYm9vbGVh
bik6IElMb2NhdGlvblByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIERvY3VtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kZG9jdW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSURvY3VtZW50U2VydmljZSBleHRlbmRzIERvY3VtZW50IHt9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBFeGNlcHRpb25IYW5kbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZXhjZXB0aW9uSGFuZGxlclxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRXhjZXB0aW9uSGFuZGxlclNlcnZpY2Uge1xu
ICAgICAgICAoZXhjZXB0aW9uOiBFcnJvciwgY2F1c2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJvb3RFbGVtZW50U2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdEVsZW1lbnRcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVJvb3RFbGVtZW50U2VydmljZSBl
eHRlbmRzIEpRdWVyeSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUVNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHFcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVFTZXJ2aWNlIHtcbiAgICAgICAgYWxs
KHByb21pc2VzOiBJUHJvbWlzZTxhbnk+W10pOiBJUHJvbWlzZTxhbnlbXT47XG4gICAgICAgIGRl
ZmVyPFQ+KCk6IElEZWZlcnJlZDxUPjtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IElQ
cm9taXNlPHZvaWQ+O1xuICAgICAgICB3aGVuPFQ+KHZhbHVlOiBUKTogSVByb21pc2U8VD47XG4g
ICAgfVxuXG4gICAgaW50ZXJmYWNlIElQcm9taXNlPFQ+IHtcbiAgICAgICAgdGhlbjxUUmVzdWx0
PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IElIdHRwUHJvbWlzZTxUUmVz
dWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxsYmFj
az86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhl
bjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IElQcm9taXNl
PFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNh
bGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAg
ICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gVFJl
c3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCwgbm90aWZ5Q2Fs
bGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG5cblxuICAg
ICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElIdHRwUHJv
bWlzZTxUUmVzdWx0Pik6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0
PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElQcm9taXNlPFRSZXN1bHQ+KTogSVByb21p
c2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246
IGFueSkgPT4gVFJlc3VsdCk6IElQcm9taXNlPFRSZXN1bHQ+O1xuXG4gICAgICAgIGZpbmFsbHk8
VFJlc3VsdD4oZmluYWxseUNhbGxiYWNrOiAoKT0+YW55KTpJUHJvbWlzZTxUUmVzdWx0PjtcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSURlZmVycmVkPFQ+IHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1
ZT86IFQpOiB2b2lkO1xuICAgICAgICByZWplY3QocmVhc29uPzogYW55KTogdm9pZDtcbiAgICAg
ICAgbm90aWZ5KHN0YXRlPzphbnkpOiB2b2lkO1xuICAgICAgICBwcm9taXNlOiBJUHJvbWlzZTxU
PjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmNob3JTY3JvbGxT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRhbmNo
b3JTY3JvbGxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNj
cm9sbFNlcnZpY2Uge1xuICAgICAgICAoKTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SUFuY2hvclNjcm9sbFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
IGRpc2FibGVBdXRvU2Nyb2xsaW5nKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gQ2FjaGVGYWN0b3J5U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY2FjaGVGYWN0b3J5XG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElDYWNoZUZhY3RvcnlTZXJ2aWNlIHtcbiAgICAgICAgLy8gTGV0
cyBub3QgZm9jZSB0aGUgb3B0aW9uc01hcCB0byBoYXZlIHRoZSBjYXBhY2l0eSBtZW1iZXIuIEV2
ZW4gdGhvdWdoXG4gICAgICAgIC8vIGl0J3MgdGhlIE9OTFkgb3B0aW9uIGNvbnNpZGVyZWQgYnkg
dGhlIGltcGxlbWVudGF0aW9uIHRvZGF5LCBhIGNvbnN1bWVyXG4gICAgICAgIC8vIG1pZ2h0IGZp
bmQgaXQgdXNlZnVsIHRvIGFzc29jaWF0ZSBzb21lIG90aGVyIG9wdGlvbnMgdG8gdGhlIGNhY2hl
IG9iamVjdC5cbiAgICAgICAgLy8oY2FjaGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBh
Y2l0eTogbnVtYmVyOyB9KTogQ2FjaGVPYmplY3Q7XG4gICAgICAgIChjYWNoZUlkOiBzdHJpbmcs
IG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0pOiBJQ2FjaGVPYmplY3Q7XG5cbiAg
ICAgICAgLy8gTWV0aG9kcyBiZWxsb3cgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIGluZm8o
KTogYW55O1xuICAgICAgICBnZXQgKGNhY2hlSWQ6IHN0cmluZyk6IElDYWNoZU9iamVjdDtcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSUNhY2hlT2JqZWN0IHtcbiAgICAgICAgaW5mbygpOiB7XG4g
ICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuXG4gICAg
ICAgICAgICAvLyBOb3QgZ2FyYW50ZWVkIHRvIGhhdmUsIHNpbmNlIGl0J3MgYSBub24tbWFuZGF0
b3J5IG9wdGlvblxuICAgICAgICAgICAgLy9jYXBhY2l0eTogbnVtYmVyO1xuICAgICAgICB9O1xu
ICAgICAgICBwdXQoa2V5OiBzdHJpbmcsIHZhbHVlPzogYW55KTogdm9pZDtcbiAgICAgICAgZ2V0
IChrZXk6IHN0cmluZyk6IGFueTtcbiAgICAgICAgcmVtb3ZlKGtleTogc3RyaW5nKTogdm9pZDtc
biAgICAgICAgcmVtb3ZlQWxsKCk6IHZvaWQ7XG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcbiAg
ICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb21waWxlU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb21waWxlU2VydmljZSB7XG4g
ICAgICAgIChlbGVtZW50OiBzdHJpbmcsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVu
Y3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xu
ICAgICAgICAoZWxlbWVudDogRWxlbWVudCwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdG
dW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247
XG4gICAgICAgIChlbGVtZW50OiBKUXVlcnksIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5n
RnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9u
O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZp
Y2VQcm92aWRlciB7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZh
Y3Rvcnk6IEZ1bmN0aW9uKTogSUNvbXBpbGVQcm92aWRlcjtcblxuICAgICAgICAvLyBVbmRvY3Vt
ZW50ZWQsIGJ1dCBpdCBpcyB0aGVyZS4uLlxuICAgICAgICBkaXJlY3RpdmUoZGlyZWN0aXZlc01h
cDogYW55KTogSUNvbXBpbGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVRlbXBs
YXRlTGlua2luZ0Z1bmN0aW9uIHtcbiAgICAgICAgLy8gTGV0J3MgaGludCBidXQgbm90IGZvcmNl
IGNsb25lQXR0YWNoRm4ncyBzaWduYXR1cmVcbiAgICAgICAgKHNjb3BlOiBJU2NvcGUsIGNsb25l
QXR0YWNoRm4/OiAoY2xvbmVkRWxlbWVudD86IEpRdWVyeSwgc2NvcGU/OiBJU2NvcGUpID0+IGFu
eSk6IEpRdWVyeTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb250
cm9sbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kY29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kY29udHJvbGxlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElDb250cm9sbGVyU2VydmljZSB7XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSBkb2N1bWVu
dGF0aW9uIGRvZXNuJ3Qgc3RhdGUgdGhpcywgbG9jYWxzIGFyZSBvcHRpb25hbFxuICAgICAgICAo
Y29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAg
ICAgICAoY29udHJvbGxlck5hbWU6IHN0cmluZywgbG9jYWxzPzogYW55KTogYW55O1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJQ29udHJvbGxlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92
aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVj
dG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZGVw
ZW5kZW5jeUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSUh0dHBTZXJ2aWNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgbW9ldGhv
ZCBhbmQgdXJsIG11c3QgYmUgcHJvdmlkZWQuLi5cbiAgICAgICAgKGNvbmZpZzogSVJlcXVlc3RD
b25maWcpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZ2V0ICh1cmw6IHN0cmluZywgUmVx
dWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBkZWxldGUgKHVy
bDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAg
ICAgIGhlYWQodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8
YW55PjtcbiAgICAgICAganNvbnAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJ
SHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBS
ZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHB1dCh1cmw6
IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFu
eT47XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVzdENvbmZpZztcblxuICAgICAgICAvLyBGb3Ig
ZGVidWdnaW5nLCBCVVQgaXQgaXMgZG9jdW1lbnRlZCBhcyBwdWJsaWMsIHNvLi4uXG4gICAgICAg
IHBlbmRpbmdSZXF1ZXN0czogYW55W107XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBqdXN0IGZv
ciBoaW50aW5nLlxuICAgIC8vIFNvbWUgb3BldGlvbnMgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBk
ZXBlbmRpbmcgb24gdGhlIHJlcXVlc3QuXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRodHRwI1VzYWdlIGZvciBvcHRpb25zIGV4cGxhbmF0aW9uc1xuICAgIGlu
dGVyZmFjZSBJUmVxdWVzdENvbmZpZyB7XG4gICAgICAgIG1ldGhvZDogc3RyaW5nO1xuICAgICAg
ICB1cmw6IHN0cmluZztcbiAgICAgICAgcGFyYW1zPzogYW55O1xuXG4gICAgICAgIC8vIFhYWCBp
dCBoYXMgaXQncyBvd24gc3RydWN0dXJlLi4uICBwZXJoYXBzIHdlIHNob3VsZCBkZWZpbmUgaXQg
aW4gdGhlIGZ1dHVyZVxuICAgICAgICBoZWFkZXJzPzogYW55O1xuXG4gICAgICAgIGNhY2hlPzog
YW55O1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuXG4gICAgICAgIC8vIFRo
ZXNlIGFjY2VwdCBtdWx0aXBsZSB0eXBlcywgc28gbGV0J3MgZGVmaW5lIHRoZW0gYXMgYW55XG4g
ICAgICAgIGRhdGE/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q/OiBhbnk7XG4gICAg
ICAgIHRyYW5zZm9ybVJlc3BvbnNlPzogYW55O1xuICAgICAgICB0aW1lb3V0PzogYW55OyAvLyBu
dW1iZXIgfCBwcm9taXNlXG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxi
YWNrPFQ+IHtcbiAgICAgICAgKGRhdGE6IFQsIHN0YXR1czogbnVtYmVyLCBoZWFkZXJzOiAoaGVh
ZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmcsIGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiB2b2lk
O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPiB7XG4g
ICAgICAgIGRhdGE/OiBUO1xuICAgICAgICBzdGF0dXM/OiBudW1iZXI7XG4gICAgICAgIGhlYWRl
cnM/OiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZz86IElS
ZXF1ZXN0Q29uZmlnO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2U8VD4gZXh0
ZW5kcyBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHN1Y2Nlc3MoY2FsbGJhY2s6IElIdHRwUHJvbWlz
ZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAgICBlcnJvcihjYWxsYmFjazog
SUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIHRoZW48
VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNr
QXJnPFQ+KSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21p
c2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRo
ZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxi
YWNrQXJnPFQ+KSA9PiBJUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25z
ZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+
O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQ
cm92aWRlciB7XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVzdENvbmZpZztcbiAgICAgICAgaW50
ZXJjZXB0b3JzOiBhbnlbXTtcbiAgICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvcnM6IGFueVtdO1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEh0dHBCYWNrZW5kU2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cEJhY2tl
bmRcbiAgICAvLyBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gdXNlIHRoaXMgc2VydmljZSBkaXJl
Y3RseS5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBCYWNrZW5k
U2VydmljZSB7XG4gICAgICAgIC8vIFhYWCBQZXJoYXBzIGRlZmluZSBjYWxsYmFjayBzaWduYXR1
cmUgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBw
b3N0PzogYW55LCBjYWxsYmFjaz86IEZ1bmN0aW9uLCBoZWFkZXJzPzogYW55LCB0aW1lb3V0Pzog
bnVtYmVyLCB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnBvbGF0ZVNlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVNlcnZpY2Ug
e1xuICAgICAgICAodGV4dDogc3RyaW5nLCBtdXN0SGF2ZUV4cHJlc3Npb24/OiBib29sZWFuKTog
SUludGVycG9sYXRpb25GdW5jdGlvbjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAg
ICAgICAgc3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50
ZXJwb2xhdGlvbkZ1bmN0aW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSk6IHN0cmluZztcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2Vydmlj
ZVByb3ZpZGVyIHtcbiAgICAgICAgc3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFy
dFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgICAgIGVu
ZFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIGVuZFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUlu
dGVycG9sYXRlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gVGVtcGxhdGVDYWNoZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJHRlbXBsYXRlQ2FjaGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlIGV4dGVuZHMgSUNhY2hlT2JqZWN0IHt9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290U2NvcGVTZXJ2aWNlXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGVcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVJvb3RTY29wZVNlcnZpY2UgZXh0ZW5kcyBJ
U2NvcGUge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVNlcnZpY2VcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuXHRpbnRlcmZhY2UgSVNDRVNlcnZpY2Uge1xuXHRcdGdldFRydXN0ZWQo
dHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkQ3Nz
KHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEh0bWwodmFsdWU6IGFueSk6IGFueTtc
blx0XHRnZXRUcnVzdGVkSnModmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkUmVzb3Vy
Y2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkVXJsKHZhbHVlOiBhbnkpOiBh
bnk7XG5cdFx0cGFyc2UodHlwZTogc3RyaW5nLCBleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4
dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNDc3MoZXhwcmVzc2lvbjog
c3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFz
SHRtbChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4g
YW55O1xuXHRcdHBhcnNlQXNKcyhleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBs
b2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNSZXNvdXJjZVVybChleHByZXNzaW9uOiBz
dHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNV
cmwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFu
eTtcblx0XHR0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVz
dEFzSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNKcyh2YWx1ZTogYW55KTogYW55
O1xuXHRcdHRydXN0QXNSZXNvdXJjZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNV
cmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRpc0VuYWJsZWQoKTogYm9vbGVhbjtcblx0fVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJv
dmlkZXIge1xuICAgICAgICBlbmFibGVkKHZhbHVlOiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0ZVNlcnZpY2Uge1xu
ICAgICAgICBnZXRUcnVzdGVkKHR5cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7
XG4gICAgICAgIHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAg
ICB2YWx1ZU9mKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0ZVByb3ZpZGVyIGV4dGVuZHMgSVNl
cnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlc291cmNlVXJsQmxhY2tsaXN0KGJsYWNrbGlzdDog
YW55W10pOiB2b2lkO1xuICAgICAgICByZXNvdXJjZVVybFdoaXRlbGlzdCh3aGl0ZWxpc3Q6IGFu
eVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEaXJl
Y3RpdmVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBp
bGVQcm92aWRlciNkaXJlY3RpdmVcbiAgICAvLyBhbmQgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9ndWlkZS9kaXJlY3RpdmVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGludGVyZmFj
ZSBJRGlyZWN0aXZle1xuICAgICAgICBjb21waWxlPzpcbiAgICAgICAgICAgICh0ZW1wbGF0ZUVs
ZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIHRlbXBsYXRlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMs
XG4gICAgICAgICAgICB0cmFuc2NsdWRlOiAoc2NvcGU6IElTY29wZSwgY2xvbmVMaW5raW5nRm46
IEZ1bmN0aW9uKSA9PiB2b2lkXG4gICAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgY29udHJv
bGxlcj86IGFueTtcbiAgICAgICAgY29udHJvbGxlckFzPzogc3RyaW5nO1xuICAgICAgICBsaW5r
PzpcbiAgICAgICAgICAgIChzY29wZTogSVNjb3BlLFxuICAgICAgICAgICAgaW5zdGFuY2VFbGVt
ZW50OiBhbnksXG4gICAgICAgICAgICBpbnN0YW5jZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxu
ICAgICAgICAgICAgY29udHJvbGxlcjogYW55XG4gICAgICAgICAgICApID0+IHZvaWQ7XG4gICAg
ICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHByaW9yaXR5PzogbnVtYmVyO1xuICAgICAgICBy
ZXBsYWNlPzogYm9vbGVhbjtcbiAgICAgICAgcmVxdWlyZT86IGFueTtcbiAgICAgICAgcmVzdHJp
Y3Q/OiBzdHJpbmc7XG4gICAgICAgIHNjb3BlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZT86IGFu
eTtcbiAgICAgICAgdGVtcGxhdGVVcmw/OiBhbnk7XG4gICAgICAgIHRlcm1pbmFsPzogYm9vbGVh
bjtcbiAgICAgICAgdHJhbnNjbHVkZT86IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBhbmd1bGFyLmVsZW1lbnRcbiAgICAvLyB3aGVuIGNhbGxpbmcgYW5ndWxh
ci5lbGVtZW50LCBhbmd1bGFyIHJldHVybnMgYSBqUXVlcnkgb2JqZWN0LFxuICAgIC8vIGF1Z21l
bnRlZCB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBsaWtlIGUuZy4gc2NvcGUuXG4gICAgLy8gc2Vl
OiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLmVsZW1lbnRcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeVN0YXRpYyBleHRl
bmRzIEpRdWVyeVN0YXRpYyB7XG4gICAgICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0Pzog
YW55KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBJQXVn
bWVudGVkSlF1ZXJ5O1xuICAgICAgICAob2JqZWN0OiB7fSk6IElBdWdtZW50ZWRKUXVlcnk7XG4g
ICAgICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAg
ICAgIChvYmplY3Q6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChmdW5jOiBG
dW5jdGlvbik6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChhcnJheTogYW55W10pOiBJQXVn
bWVudGVkSlF1ZXJ5O1xuICAgICAgICAoKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICB9XG5cbiAg
ICBpbnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeSBleHRlbmRzIEpRdWVyeSB7XG4gICAgICAgIC8v
IFRPRE86IGV2ZW50cywgaG93IHRvIGRlZmluZT9cbiAgICAgICAgLy8kZGVzdHJveVxuXG4gICAg
ICAgIGZpbmQoc2VsZWN0b3I6IHN0cmluZyk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZp
bmQoZWxlbWVudDogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChvYmo6IEpR
dWVyeSk6IElBdWdtZW50ZWRKUXVlcnk7XG5cbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJp
bmcpOiBhbnk7XG4gICAgICAgIGluamVjdG9yKCk6IGFueTtcbiAgICAgICAgc2NvcGUoKTogSVNj
b3BlO1xuXG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBK
UXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsg
fSk6IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5c
blxuICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQVVUTyBtb2R1bGUg
KGFuZ3VsYXIuanMpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgZXhwb3J0IG1vZHVsZSBh
dXRvIHtcblxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAvLyBJbmplY3RvclNlcnZp
Y2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJGlu
amVjdG9yXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJSW5qZWN0
b3JTZXJ2aWNlIHtcbiAgICAgICAgICAgIGFubm90YXRlKGZuOiBGdW5jdGlvbik6IHN0cmluZ1td
O1xuICAgICAgICAgICAgYW5ub3RhdGUoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTog
c3RyaW5nW107XG4gICAgICAgICAgICBnZXQgKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAg
ICAgIGluc3RhbnRpYXRlKHR5cGVDb25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6
IGFueTtcbiAgICAgICAgICAgIGludm9rZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10p
OiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoZnVuYzogRnVuY3Rpb24sIGNvbnRleHQ/OiBhbnks
IGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgICAgIC8vIFByb3ZpZGVTZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9BVVRPLiRwcm92aWRlXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgICAgIGludGVyZmFjZSBJUHJvdmlkZVNlcnZpY2Uge1xuICAgICAgICAgICAgLy8gRG9jdW1l
bnRhdGlvbiBzYXlzIGl0IHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgaW5zdGFuY2UsIGJ1dCBhY3R1
YWxcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHJldHVybiBhbnl0aGlu
Zy5cbiAgICAgICAgICAgIC8vIGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFu
eTtcbiAgICAgICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7
XG5cbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcjogRnVuY3Rp
b24pOiB2b2lkO1xuICAgICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9y
SW5saW5lOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywg
c2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xu
ICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9u
OiBhbnlbXSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1l
OiBzdHJpbmcsIHByb3ZpZGVyOiBuZy5JU2VydmljZVByb3ZpZGVyKTogbmcuSVNlcnZpY2VQcm92
aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVy
Q29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAg
IHNlcnZpY2UobmFtZTogc3RyaW5nLCBjb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2Vydmlj
ZVByb3ZpZGVyO1xuICAgICAgICAgICAgdmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTog
bmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuLy8gbW9kZWxzL1Rv
ZG9JdGVtLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZXhw
b3J0IGNsYXNzIFRvZG9JdGVtIHtcbiAgICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICBw
dWJsaWMgdGl0bGU6IHN0cmluZyxcbiAgICAgICAgICAgIHB1YmxpYyBjb21wbGV0ZWQ6IGJvb2xl
YW5cbiAgICAgICAgICAgICkgeyB9XG4gICAgfVxufVxuLy8gaW50ZXJmYWNlcy9JVG9kb1Njb3Bl
LnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TY29wZSBleHRl
bmRzIG5nLklTY29wZSB7XG5cdFx0dG9kb3M6IFRvZG9JdGVtW107XG5cdFx0bmV3VG9kbzogc3Ry
aW5nO1xuXHRcdGVkaXRlZFRvZG86IFRvZG9JdGVtO1xuXHRcdG9yaWdpbmFsVG9kbzogVG9kb0l0
ZW07XG5cdFx0cmVtYWluaW5nQ291bnQ6IG51bWJlcjtcblx0XHRkb25lQ291bnQ6IG51bWJlcjtc
blx0XHRhbGxDaGVja2VkOiBib29sZWFuO1xuXHRcdHJldmVydGVkOiBib29sZWFuO1xuXHRcdHN0
YXR1c0ZpbHRlcjogeyBjb21wbGV0ZWQ/OiBib29sZWFuIH07XG5cdFx0bG9jYXRpb246IG5nLklM
b2NhdGlvblNlcnZpY2U7XG5cdFx0dm06IFRvZG9DdHJsO1xuXHR9XG59XG4vLyBpbnRlcmZhY2Vz
L0lUb2RvU3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElU
b2RvU3RvcmFnZSB7XG5cdFx0Z2V0ICgpOiBUb2RvSXRlbVtdO1xuXHRcdHB1dCh0b2RvczogVG9k
b0l0ZW1bXSk7XG5cdH1cbn0vLyBkaXJlY3RpdmVzL1RvZG9Gb2N1cy50c1xuXG5tb2R1bGUgdG9k
b3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IHBsYWNl
cyBmb2N1cyBvbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIHdoZW4gdGhlIGV4cHJlc3Np
b24gaXQgYmluZHMgdG8gZXZhbHVhdGVzIHRvIHRydWUuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rp
b24gdG9kb0ZvY3VzKCR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZl
IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50
OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHQkc2NvcGUuJHdhdGNoKGF0
dHJpYnV0ZXMudG9kb0ZvY3VzLCBuZXd2YWwgPT4ge1xuXHRcdFx0XHRcdGlmIChuZXd2YWwpIHtc
blx0XHRcdFx0XHRcdCR0aW1lb3V0KCgpID0+IGVsZW1lbnRbMF0uZm9jdXMoKSwgMCwgZmFsc2Up
O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHRv
ZG9Gb2N1cy4kaW5qZWN0ID0gWyckdGltZW91dCddO1xuXG59Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1
ci50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAg
ICAqIERpcmVjdGl2ZSB0aGF0IGV4ZWN1dGVzIGFuIGV4cHJlc3Npb24gd2hlbiB0aGUgZWxlbWVu
dCBpdCBpcyBhcHBsaWVkIHRvIGxvc2VzIGZvY3VzLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5j
dGlvbiB0b2RvQmx1cigpOiBuZy5JRGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAg
ICAgICAgIGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1
dGVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmJpbmQoJ2JsdXInLCAoKSA9
PiB7ICRzY29wZS4kYXBwbHkoYXR0cmlidXRlcy50b2RvQmx1cik7IH0pO1xuICAgICAgICAgICAg
ICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgnYmx1cicp
OyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyBkaXJlY3RpdmVz
L1RvZG9Fc2NhcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGNv
bnN0IEVTQ0FQRV9LRVkgPSAyNztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgY2FuY2Vs
cyBlZGl0aW5nIGEgdG9kbyBpZiB0aGUgdXNlciBwcmVzc2VzIHRoZSBFc2Mga2V5LlxuXHQgKi9c
blx0ZXhwb3J0IGZ1bmN0aW9uIHRvZG9Fc2NhcGUoKTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0
dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBh
dHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5iaW5kKCdrZXlkb3duJywgKGV2
ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtc
blx0XHRcdFx0XHRcdCRzY29wZS4kYXBwbHkoYXR0cmlidXRlcy50b2RvRXNjYXBlKTtcblx0XHRc
dFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdCRzY29wZS4kb24oJyRkZXN0cm95JywgKCkg
PT4geyBlbGVtZW50LnVuYmluZCgna2V5ZG93bicpOyB9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9
XG59XG4vLyBzZXJ2aWNlcy9Ub2RvU3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1
c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIFNlcnZpY2VzIHRoYXQgcGVyc2lzdHMgYW5k
IHJldHJpZXZlcyBUT0RPcyBmcm9tIGxvY2FsU3RvcmFnZS5cbiAgICAgKi9cbiAgICBleHBvcnQg
Y2xhc3MgVG9kb1N0b3JhZ2UgaW1wbGVtZW50cyBJVG9kb1N0b3JhZ2Uge1xuXG4gICAgICAgIFNU
T1JBR0VfSUQgPSAndG9kb3MtYW5ndWxhcmpzLXR5cGVzY3JpcHQnO1xuXG4gICAgICAgIGdldCAo
KTogVG9kb0l0ZW1bXSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3Jh
Z2UuZ2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQpIHx8ICdbXScpO1xuICAgICAgICB9XG5cbiAgICAg
ICAgcHV0KHRvZG9zOiBUb2RvSXRlbVtdKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0
SXRlbSh0aGlzLlNUT1JBR0VfSUQsIEpTT04uc3RyaW5naWZ5KHRvZG9zKSk7XG4gICAgICAgIH1c
biAgICB9XG59Ly8gY29udHJvbGxlcnMvVG9kb0N0cmwudHNcblxubW9kdWxlIHRvZG9zIHtcblx0
J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBUaGUgbWFpbiBjb250cm9sbGVyIGZvciB0aGUg
YXBwLiBUaGUgY29udHJvbGxlcjpcblx0ICogLSByZXRyaWV2ZXMgYW5kIHBlcnNpc3RzIHRoZSBt
b2RlbCB2aWEgdGhlIHRvZG9TdG9yYWdlIHNlcnZpY2Vcblx0ICogLSBleHBvc2VzIHRoZSBtb2Rl
bCB0byB0aGUgdGVtcGxhdGUgYW5kIHByb3ZpZGVzIGV2ZW50IGhhbmRsZXJzXG5cdCAqL1xuXHRl
eHBvcnQgY2xhc3MgVG9kb0N0cmwge1xuXG5cdFx0cHJpdmF0ZSB0b2RvczogVG9kb0l0ZW1bXTtc
blxuXHRcdC8vICRpbmplY3QgYW5ub3RhdGlvbi5cblx0XHQvLyBJdCBwcm92aWRlcyAkaW5qZWN0
b3Igd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNpZXMgdG8gYmUgaW5qZWN0ZWQgaW50
byBjb25zdHJ1Y3RvclxuXHRcdC8vIGl0IGlzIGJldHRlciB0byBoYXZlIGl0IGNsb3NlIHRvIHRo
ZSBjb25zdHJ1Y3RvciwgYmVjYXVzZSB0aGUgcGFyYW1ldGVycyBtdXN0IG1hdGNoIGluIGNvdW50
IGFuZCB0eXBlLlxuXHRcdC8vIFNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2Rp
XG5cdFx0cHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xuXHRcdFx0JyRzY29wZScsXG5cdFx0XHQn
JGxvY2F0aW9uJyxcblx0XHRcdCd0b2RvU3RvcmFnZScsXG5cdFx0XHQnZmlsdGVyRmlsdGVyJ1xu
XHRcdF07XG5cblx0XHQvLyBkZXBlbmRlbmNpZXMgYXJlIGluamVjdGVkIHZpYSBBbmd1bGFySlMg
JGluamVjdG9yXG5cdFx0Ly8gY29udHJvbGxlcidzIG5hbWUgaXMgcmVnaXN0ZXJlZCBpbiBBcHBs
aWNhdGlvbi50cyBhbmQgc3BlY2lmaWVkIGZyb20gbmctY29udHJvbGxlciBhdHRyaWJ1dGUgaW4g
aW5kZXguaHRtbFxuXHRcdGNvbnN0cnVjdG9yKFxuXHRcdFx0cHJpdmF0ZSAkc2NvcGU6IElUb2Rv
U2NvcGUsXG5cdFx0XHRwcml2YXRlICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcblx0
XHRcdHByaXZhdGUgdG9kb1N0b3JhZ2U6IElUb2RvU3RvcmFnZSxcblx0XHRcdHByaXZhdGUgZmls
dGVyRmlsdGVyXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnRvZG9zID0gJHNjb3BlLnRvZG9zID0gdG9k
b1N0b3JhZ2UuZ2V0KCk7XG5cblx0XHRcdCRzY29wZS5uZXdUb2RvID0gJyc7XG5cdFx0XHQkc2Nv
cGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cblx0XHRcdC8vICd2bScgc3RhbmRzIGZvciAndmlldyBt
b2RlbCcuIFdlJ3JlIGFkZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbGxlciB0byB0aGUg
c2NvcGVcblx0XHRcdC8vIGZvciBpdHMgbWV0aG9kcyB0byBiZSBhY2Nlc3NpYmxlIGZyb20gdmll
dyAvIEhUTUxcblx0XHRcdCRzY29wZS52bSA9IHRoaXM7XG5cblx0XHRcdC8vIHdhdGNoaW5nIGZv
ciBldmVudHMvY2hhbmdlcyBpbiBzY29wZSwgd2hpY2ggYXJlIGNhdXNlZCBieSB2aWV3L3VzZXIg
aW5wdXRcblx0XHRcdC8vIGlmIHlvdSBzdWJzY3JpYmUgdG8gc2NvcGUgb3IgZXZlbnQgd2l0aCBs
aWZldGltZSBsb25nZXIgdGhhbiB0aGlzIGNvbnRyb2xsZXIsIG1ha2Ugc3VyZSB5b3UgdW5zdWJz
Y3JpYmUuXG5cdFx0XHQkc2NvcGUuJHdhdGNoKCd0b2RvcycsICgpID0+IHRoaXMub25Ub2Rvcygp
LCB0cnVlKTtcblx0XHRcdCRzY29wZS4kd2F0Y2goJ2xvY2F0aW9uLnBhdGgoKScsIHBhdGggPT4g
dGhpcy5vblBhdGgocGF0aCkpXG5cblx0XHRcdGlmICgkbG9jYXRpb24ucGF0aCgpID09PSAnJykg
JGxvY2F0aW9uLnBhdGgoJy8nKTtcblx0XHRcdCRzY29wZS5sb2NhdGlvbiA9ICRsb2NhdGlvbjtc
blx0XHR9XG5cblx0XHRvblBhdGgocGF0aDogc3RyaW5nKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5z
dGF0dXNGaWx0ZXIgPSAocGF0aCA9PT0gJy9hY3RpdmUnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVk
OiBmYWxzZSB9IDogKHBhdGggPT09ICcvY29tcGxldGVkJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRl
ZDogdHJ1ZSB9IDoge307XG5cdFx0fVxuXG5cdFx0b25Ub2RvcygpIHtcblx0XHRcdHRoaXMuJHNj
b3BlLnJlbWFpbmluZ0NvdW50ID0gdGhpcy5maWx0ZXJGaWx0ZXIodGhpcy50b2RvcywgeyBjb21w
bGV0ZWQ6IGZhbHNlIH0pLmxlbmd0aDtcblx0XHRcdHRoaXMuJHNjb3BlLmRvbmVDb3VudCA9IHRo
aXMudG9kb3MubGVuZ3RoIC0gdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnQ7XG5cdFx0XHR0aGlz
LiRzY29wZS5hbGxDaGVja2VkID0gIXRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50XG5cdFx0XHR0
aGlzLnRvZG9TdG9yYWdlLnB1dCh0aGlzLnRvZG9zKTtcblx0XHR9XG5cblx0XHRhZGRUb2RvKCkg
e1xuXHRcdFx0dmFyIG5ld1RvZG8gOiBzdHJpbmcgPSB0aGlzLiRzY29wZS5uZXdUb2RvLnRyaW0o
KTtcblx0XHRcdGlmICghbmV3VG9kby5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0
fVxuXG5cdFx0XHR0aGlzLnRvZG9zLnB1c2gobmV3IFRvZG9JdGVtKG5ld1RvZG8sIGZhbHNlKSk7
XG5cdFx0XHR0aGlzLiRzY29wZS5uZXdUb2RvID0gJyc7XG5cdFx0fVxuXG5cdFx0ZWRpdFRvZG8o
dG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gdG9k
b0l0ZW07XG5cblx0XHRcdC8vIENsb25lIHRoZSBvcmlnaW5hbCB0b2RvIGluIGNhc2UgZWRpdGlu
ZyBpcyBjYW5jZWxsZWQuXG5cdFx0XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBhbmd1bGFy
LmV4dGVuZCh7fSwgdG9kb0l0ZW0pO1xuXHRcdH1cblxuXHRcdHJldmVydEVkaXRzKHRvZG9JdGVt
OiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvc1t0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0
ZW0pXSA9IHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbztcblx0XHRcdHRoaXMuJHNjb3BlLnJldmVy
dGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRkb25lRWRpdGluZyh0b2RvSXRlbTogVG9kb0l0ZW0p
IHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSBudWxsO1xuXHRcdFx0dGhpcy4kc2Nv
cGUub3JpZ2luYWxUb2RvID0gbnVsbDtcblx0XHRcdGlmICh0aGlzLiRzY29wZS5yZXZlcnRlZCkg
e1xuXHRcdFx0XHQvLyBUb2RvIGVkaXRzIHdlcmUgcmV2ZXJ0ZWQsIGRvbid0IHNhdmUuXG5cdFx0
XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0
fVxuXHRcdFx0dG9kb0l0ZW0udGl0bGUgPSB0b2RvSXRlbS50aXRsZS50cmltKCk7XG5cdFx0XHRp
ZiAoIXRvZG9JdGVtLnRpdGxlKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlVG9kbyh0b2RvSXRlbSk7
XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVtb3ZlVG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtc
blx0XHRcdHRoaXMudG9kb3Muc3BsaWNlKHRoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSksIDEp
O1xuXHRcdH1cblxuXHRcdGNsZWFyRG9uZVRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUudG9k
b3MgPSB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5maWx0ZXIodG9kb0l0ZW0gPT4gIXRvZG9JdGVt
LmNvbXBsZXRlZCk7XG5cdFx0fVxuXG5cdFx0bWFya0FsbChjb21wbGV0ZWQ6IGJvb2xlYW4pIHtc
blx0XHRcdHRoaXMudG9kb3MuZm9yRWFjaCh0b2RvSXRlbSA9PiB7IHRvZG9JdGVtLmNvbXBsZXRl
ZCA9IGNvbXBsZXRlZDsgfSk7XG5cdFx0fVxuXHR9XG5cbn1cbi8vIEFwcGxpY2F0aW9uLnRzXG5c
bi8qKlxuICogVGhlIG1haW4gVG9kb01WQyBhcHAgbW9kdWxlLlxuICpcbiAqIEB0eXBlIHthbmd1
bGFyLk1vZHVsZX1cbiAqL1xubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAg
ICB2YXIgdG9kb212YyA9IGFuZ3VsYXIubW9kdWxlKCd0b2RvbXZjJywgW10pXG4gICAgICAgICAg
ICAuY29udHJvbGxlcigndG9kb0N0cmwnLCBUb2RvQ3RybClcbiAgICAgICAgICAgIC5kaXJlY3Rp
dmUoJ3RvZG9CbHVyJywgdG9kb0JsdXIpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRm9j
dXMnLCB0b2RvRm9jdXMpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRXNjYXBlJywgdG9k
b0VzY2FwZSlcbiAgICAgICAgICAgIC5zZXJ2aWNlKCd0b2RvU3RvcmFnZScsIFRvZG9TdG9yYWdl
KTtcbn1cbiIKK21vZHVsZS5leHBvcnRzID0gIi8vIGxpYnMvanF1ZXJ5L2pxdWVyeS5kLnRzXG4v
KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFp
biBhIGNvcHkgb2YgdGhlXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl
cy9MSUNFTlNFLTIuMFxuXG5USElTIENPREUgSVMgUFJPVklERUQgKkFTIElTKiBCQVNJUywgV0lU
SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVT
UyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5X
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLFxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRo
ZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiAqL1xuXG4vLyBUeXBpbmcgZm9yIHRoZSBqUXVlcnkgbGlicmFyeSwg
dmVyc2lvbiAxLjEwLnggLyAyLjAueFxuLy8gUHJvamVjdDogaHR0cDovL2pxdWVyeS5jb20vXG4v
LyBEZWZpbml0aW9ucyBieTogQm9yaXMgWWFua292IDxodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5
YW5rb3YvPiwgQ2hyaXN0aWFuIEhvZmZtZWlzdGVyIDxodHRwczovL2dpdGh1Yi5jb20vY2hvZmZt
ZWlzdGVyPiwgU3RldmUgRmVudG9uLCBEaXVsbGVpIEdvbWVzIDxodHRwczovL2dpdGh1Yi5jb20v
RGl1bGxlaT4sIFRhc3MgSWxpb3BvdWxvcyA8aHR0cHM6Ly9naXRodWIuY29tL3Rhc29pbGk+LCBK
YXNvbiBTd2VhcmluZ2VuLCBTZWFuIEhpbGwgPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWFuc2tpPiwg
R3V1cyBHb29zc2VucyA8aHR0cHM6Ly9naXRodWIuY29tL0d1dXo+LCBLZWxseSBTdW1tZXJsaW4g
PGh0dHBzOi8vZ2l0aHViLmNvbS9rc3VtbWVybGluPiwgQmFzYXJhdCBBbGkgU3llZCA8aHR0cHM6
Ly9naXRodWIuY29tL2Jhc2FyYXQ+LCBOaWNob2xhcyBXb2x2ZXJzb24gPGh0dHBzOi8vZ2l0aHVi
LmNvbS9ud29sdmVyc29uPiwgRGVyZWsgQ2ljZXJvbmUgPGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJl
a2NpY2Vyb25lPiwgQW5kcmV3IEdhc3BhciA8aHR0cHM6Ly9naXRodWIuY29tL0FuZHJld0dhc3Bh
cj4sIEphbWVzIEhhcnJpc29uIEZpc2hlciA8aHR0cHM6Ly9naXRodWIuY29tL2phbWVzaGZpc2hl
cj4sIFNlaWtpY2hpIEtvbmRvIDxodHRwczovL2dpdGh1Yi5jb20vc2Vpa2ljaGk+LCBCZW5qYW1p
biBKYWNrbWFuIDxodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5qYWNrbWFuPiwgUG91bCBTb3Jl
bnNlbiA8aHR0cHM6Ly9naXRodWIuY29tL3MwOTMyOTQ+LCBKb3NoIFN0cm9ibCA8aHR0cHM6Ly9n
aXRodWIuY29tL0pvc2hTdHJvYmw+LCBKb2huIFJlaWxseSA8aHR0cHM6Ly9naXRodWIuY29tL2pv
aG5ueXJlaWxseS8+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFu
a292L0RlZmluaXRlbHlUeXBlZFxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEFKQVggc2V0
dGluZyB0aGF0IHdpbGwgY29uZmlndXJlIHRoZSBBSkFYIHJlcXVlc3RcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5QWpheFNldHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNl
bnQgaW4gdGhlIHJlcXVlc3QgaGVhZGVyIHRoYXQgdGVsbHMgdGhlIHNlcnZlciB3aGF0IGtpbmQg
b2YgcmVzcG9uc2UgaXQgd2lsbCBhY2NlcHQgaW4gcmV0dXJuLiBJZiB0aGUgYWNjZXB0cyBzZXR0
aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBp
biB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuXG4gICAgICovXG4gICAgYWNjZXB0cz86IGFueTtc
biAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBhbGwgcmVxdWVzdHMgYXJlIHNlbnQgYXN5bmNo
cm9ub3VzbHkgKGkuZS4gdGhpcyBpcyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0KS4gSWYgeW91IG5l
ZWQgc3luY2hyb25vdXMgcmVxdWVzdHMsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS4gQ3Jvc3Mt
ZG9tYWluIHJlcXVlc3RzIGFuZCBkYXRhVHlwZTogXCJqc29ucFwiIHJlcXVlc3RzIGRvIG5vdCBz
dXBwb3J0IHN5bmNocm9ub3VzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHN5bmNocm9ub3VzIHJlcXVl
c3RzIG1heSB0ZW1wb3JhcmlseSBsb2NrIHRoZSBicm93c2VyLCBkaXNhYmxpbmcgYW55IGFjdGlv
bnMgd2hpbGUgdGhlIHJlcXVlc3QgaXMgYWN0aXZlLiBBcyBvZiBqUXVlcnkgMS44LCB0aGUgdXNl
IG9mIGFzeW5jOiBmYWxzZSB3aXRoIGpxWEhSICgkLkRlZmVycmVkKSBpcyBkZXByZWNhdGVkOyB5
b3UgbXVzdCB1c2UgdGhlIHN1Y2Nlc3MvZXJyb3IvY29tcGxldGUgY2FsbGJhY2sgb3B0aW9ucyBp
bnN0ZWFkIG9mIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgb2YgdGhlIGpxWEhSIG9iamVjdCBz
dWNoIGFzIGpxWEhSLmRvbmUoKSBvciB0aGUgZGVwcmVjYXRlZCBqcVhIUi5zdWNjZXNzKCkuXG4g
ICAgICovXG4gICAgYXN5bmM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgcHJlLXJlcXVl
c3QgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIGpxWEhS
IChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3QgYmVmb3JlIGl0IGlzIHNl
bnQuIFVzZSB0aGlzIHRvIHNldCBjdXN0b20gaGVhZGVycywgZXRjLiBUaGUganFYSFIgYW5kIHNl
dHRpbmdzIG9iamVjdHMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMgYW4gQWpheCBF
dmVudC4gUmV0dXJuaW5nIGZhbHNlIGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uIHdpbGwgY2Fu
Y2VsIHRoZSByZXF1ZXN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgYmVmb3JlU2VuZCBvcHRpb24g
d2lsbCBiZSBjYWxsZWQgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiByZXF1ZXN0LlxuICAgICAq
L1xuICAgIGJlZm9yZVNlbmQ/IChqcVhIUjogSlF1ZXJ5WEhSLCBzZXR0aW5nczogSlF1ZXJ5QWph
eFNldHRpbmdzKTogYW55O1xuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBmYWxzZSwgaXQgd2ls
bCBmb3JjZSByZXF1ZXN0ZWQgcGFnZXMgbm90IHRvIGJlIGNhY2hlZCBieSB0aGUgYnJvd3Nlci4g
Tm90ZTogU2V0dGluZyBjYWNoZSB0byBmYWxzZSB3aWxsIG9ubHkgd29yayBjb3JyZWN0bHkgd2l0
aCBIRUFEIGFuZCBHRVQgcmVxdWVzdHMuIEl0IHdvcmtzIGJ5IGFwcGVuZGluZyBcIl89e3RpbWVz
dGFtcH1cIiB0byB0aGUgR0VUIHBhcmFtZXRlcnMuIFRoZSBwYXJhbWV0ZXIgaXMgbm90IG5lZWRl
ZCBmb3Igb3RoZXIgdHlwZXMgb2YgcmVxdWVzdHMsIGV4Y2VwdCBpbiBJRTggd2hlbiBhIFBPU1Qg
aXMgbWFkZSB0byBhIFVSTCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGJ5IGEgR0VU
LlxuICAgICAqL1xuICAgIGNhY2hlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzIChhZnRlciBzdWNjZXNz
IGFuZCBlcnJvciBjYWxsYmFja3MgYXJlIGV4ZWN1dGVkKS4gVGhlIGZ1bmN0aW9uIGdldHMgcGFz
c2VkIHR3byBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVx
dWVzdCkgb2JqZWN0IGFuZCBhIHN0cmluZyBjYXRlZ29yaXppbmcgdGhlIHN0YXR1cyBvZiB0aGUg
cmVxdWVzdCAoXCJzdWNjZXNzXCIsIFwibm90bW9kaWZpZWRcIiwgXCJlcnJvclwiLCBcInRpbWVv
dXRcIiwgXCJhYm9ydFwiLCBvciBcInBhcnNlcmVycm9yXCIpLiBBcyBvZiBqUXVlcnkgMS41LCB0
aGUgY29tcGxldGUgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFj
aCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQu
XG4gICAgICovXG4gICAgY29tcGxldGU/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBz
dHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIHN0cmluZy9yZWd1bGFy
LWV4cHJlc3Npb24gcGFpcnMgdGhhdCBkZXRlcm1pbmUgaG93IGpRdWVyeSB3aWxsIHBhcnNlIHRo
ZSByZXNwb25zZSwgZ2l2ZW4gaXRzIGNvbnRlbnQgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlc
biAgICAgKi9cbiAgICBjb250ZW50cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8v
QWNjb3JkaW5nIHRvIGpRdWVyeS5hamF4IHNvdXJjZSBjb2RlLCBhamF4J3Mgb3B0aW9uIGFjdHVh
bGx5IGFsbG93cyBjb250ZW50VHlwZSB0byBzZXQgdG8gXCJmYWxzZVwiXG4gICAgLy8gaHR0cHM6
Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvNzQyXG4gICAg
LyoqXG4gICAgICogV2hlbiBzZW5kaW5nIGRhdGEgdG8gdGhlIHNlcnZlciwgdXNlIHRoaXMgY29u
dGVudCB0eXBlLiBEZWZhdWx0IGlzIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVk
OyBjaGFyc2V0PVVURi04XCIsIHdoaWNoIGlzIGZpbmUgZm9yIG1vc3QgY2FzZXMuIElmIHlvdSBl
eHBsaWNpdGx5IHBhc3MgaW4gYSBjb250ZW50LXR5cGUgdG8gJC5hamF4KCksIHRoZW4gaXQgaXMg
YWx3YXlzIHNlbnQgdG8gdGhlIHNlcnZlciAoZXZlbiBpZiBubyBkYXRhIGlzIHNlbnQpLiBUaGUg
VzNDIFhNTEh0dHBSZXF1ZXN0IHNwZWNpZmljYXRpb24gZGljdGF0ZXMgdGhhdCB0aGUgY2hhcnNl
dCBpcyBhbHdheXMgVVRGLTg7IHNwZWNpZnlpbmcgYW5vdGhlciBjaGFyc2V0IHdpbGwgbm90IGZv
cmNlIHRoZSBicm93c2VyIHRvIGNoYW5nZSB0aGUgZW5jb2RpbmcuXG4gICAgICovXG4gICAgY29u
dGVudFR5cGU/OiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhpcyBvYmplY3Qgd2lsbCBiZSBtYWRl
IHRoZSBjb250ZXh0IG9mIGFsbCBBamF4LXJlbGF0ZWQgY2FsbGJhY2tzLiBCeSBkZWZhdWx0LCB0
aGUgY29udGV4dCBpcyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBhamF4IHNldHRpbmdz
IHVzZWQgaW4gdGhlIGNhbGwgKCQuYWpheFNldHRpbmdzIG1lcmdlZCB3aXRoIHRoZSBzZXR0aW5n
cyBwYXNzZWQgdG8gJC5hamF4KS5cbiAgICAgKi9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8q
KlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGFUeXBlLXRvLWRhdGFUeXBlIGNvbnZl
cnRlcnMuIEVhY2ggY29udmVydGVyJ3MgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMg
dGhlIHRyYW5zZm9ybWVkIHZhbHVlIG9mIHRoZSByZXNwb25zZS4gKHZlcnNpb24gYWRkZWQ6IDEu
NSlcbiAgICAgKi9cbiAgICBjb252ZXJ0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4g
ICAgLyoqXG4gICAgICogSWYgeW91IHdpc2ggdG8gZm9yY2UgYSBjcm9zc0RvbWFpbiByZXF1ZXN0
IChzdWNoIGFzIEpTT05QKSBvbiB0aGUgc2FtZSBkb21haW4sIHNldCB0aGUgdmFsdWUgb2YgY3Jv
c3NEb21haW4gdG8gdHJ1ZS4gVGhpcyBhbGxvd3MsIGZvciBleGFtcGxlLCBzZXJ2ZXItc2lkZSBy
ZWRpcmVjdGlvbiB0byBhbm90aGVyIGRvbWFpbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAg
Ki9cbiAgICBjcm9zc0RvbWFpbj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRGF0YSB0byBi
ZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIEl0IGlzIGNvbnZlcnRlZCB0byBhIHF1ZXJ5IHN0cmluZywg
aWYgbm90IGFscmVhZHkgYSBzdHJpbmcuIEl0J3MgYXBwZW5kZWQgdG8gdGhlIHVybCBmb3IgR0VU
LXJlcXVlc3RzLiBTZWUgcHJvY2Vzc0RhdGEgb3B0aW9uIHRvIHByZXZlbnQgdGhpcyBhdXRvbWF0
aWMgcHJvY2Vzc2luZy4gT2JqZWN0IG11c3QgYmUgS2V5L1ZhbHVlIHBhaXJzLiBJZiB2YWx1ZSBp
cyBhbiBBcnJheSwgalF1ZXJ5IHNlcmlhbGl6ZXMgbXVsdGlwbGUgdmFsdWVzIHdpdGggc2FtZSBr
ZXkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSB0cmFkaXRpb25hbCBzZXR0aW5nIChkZXNjcmli
ZWQgYmVsb3cpLlxuICAgICAqL1xuICAgIGRhdGE/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBm
dW5jdGlvbiB0byBiZSB1c2VkIHRvIGhhbmRsZSB0aGUgcmF3IHJlc3BvbnNlIGRhdGEgb2YgWE1M
SHR0cFJlcXVlc3QuVGhpcyBpcyBhIHByZS1maWx0ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUg
dGhlIHJlc3BvbnNlLiBZb3Ugc2hvdWxkIHJldHVybiB0aGUgc2FuaXRpemVkIGRhdGEuIFRoZSBm
dW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1bWVudHM6IFRoZSByYXcgZGF0YSByZXR1cm5lZCBmcm9t
IHRoZSBzZXJ2ZXIgYW5kIHRoZSAnZGF0YVR5cGUnIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBk
YXRhRmlsdGVyPyAoZGF0YTogYW55LCB0eTogYW55KTogYW55O1xuICAgIC8qKlxuICAgICAqIFRo
ZSB0eXBlIG9mIGRhdGEgdGhhdCB5b3UncmUgZXhwZWN0aW5nIGJhY2sgZnJvbSB0aGUgc2VydmVy
LiBJZiBub25lIGlzIHNwZWNpZmllZCwgalF1ZXJ5IHdpbGwgdHJ5IHRvIGluZmVyIGl0IGJhc2Vk
IG9uIHRoZSBNSU1FIHR5cGUgb2YgdGhlIHJlc3BvbnNlIChhbiBYTUwgTUlNRSB0eXBlIHdpbGwg
eWllbGQgWE1MLCBpbiAxLjQgSlNPTiB3aWxsIHlpZWxkIGEgSmF2YVNjcmlwdCBvYmplY3QsIGlu
IDEuNCBzY3JpcHQgd2lsbCBleGVjdXRlIHRoZSBzY3JpcHQsIGFuZCBhbnl0aGluZyBlbHNlIHdp
bGwgYmUgcmV0dXJuZWQgYXMgYSBzdHJpbmcpLlxuICAgICAqL1xuICAgIGRhdGFUeXBlPzogc3Ry
aW5nO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1
ZXN0IGZhaWxzLiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgdGhyZWUgYXJndW1lbnRzOiBUaGUganFY
SFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdCwgYSBzdHJpbmcgZGVz
Y3JpYmluZyB0aGUgdHlwZSBvZiBlcnJvciB0aGF0IG9jY3VycmVkIGFuZCBhbiBvcHRpb25hbCBl
eGNlcHRpb24gb2JqZWN0LCBpZiBvbmUgb2NjdXJyZWQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhl
IHNlY29uZCBhcmd1bWVudCAoYmVzaWRlcyBudWxsKSBhcmUgXCJ0aW1lb3V0XCIsIFwiZXJyb3Jc
IiwgXCJhYm9ydFwiLCBhbmQgXCJwYXJzZXJlcnJvclwiLiBXaGVuIGFuIEhUVFAgZXJyb3Igb2Nj
dXJzLCBlcnJvclRocm93biByZWNlaXZlcyB0aGUgdGV4dHVhbCBwb3J0aW9uIG9mIHRoZSBIVFRQ
IHN0YXR1cywgc3VjaCBhcyBcIk5vdCBGb3VuZFwiIG9yIFwiSW50ZXJuYWwgU2VydmVyIEVycm9y
LlwiIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBlcnJvciBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJy
YXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIE5v
dGU6IFRoaXMgaGFuZGxlciBpcyBub3QgY2FsbGVkIGZvciBjcm9zcy1kb21haW4gc2NyaXB0IGFu
ZCBjcm9zcy1kb21haW4gSlNPTlAgcmVxdWVzdHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAg
ICAgKi9cbiAgICBlcnJvcj8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZywg
ZXJyb3JUaHJvdzogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdHJp
Z2dlciBnbG9iYWwgQWpheCBldmVudCBoYW5kbGVycyBmb3IgdGhpcyByZXF1ZXN0LiBUaGUgZGVm
YXVsdCBpcyB0cnVlLiBTZXQgdG8gZmFsc2UgdG8gcHJldmVudCB0aGUgZ2xvYmFsIGhhbmRsZXJz
IGxpa2UgYWpheFN0YXJ0IG9yIGFqYXhTdG9wIGZyb20gYmVpbmcgdHJpZ2dlcmVkLiBUaGlzIGNh
biBiZSB1c2VkIHRvIGNvbnRyb2wgdmFyaW91cyBBamF4IEV2ZW50cy5cbiAgICAgKi9cbiAgICBn
bG9iYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFs
IGhlYWRlciBrZXkvdmFsdWUgcGFpcnMgdG8gc2VuZCBhbG9uZyB3aXRoIHJlcXVlc3RzIHVzaW5n
IHRoZSBYTUxIdHRwUmVxdWVzdCB0cmFuc3BvcnQuIFRoZSBoZWFkZXIgWC1SZXF1ZXN0ZWQtV2l0
aDogWE1MSHR0cFJlcXVlc3QgaXMgYWx3YXlzIGFkZGVkLCBidXQgaXRzIGRlZmF1bHQgWE1MSHR0
cFJlcXVlc3QgdmFsdWUgY2FuIGJlIGNoYW5nZWQgaGVyZS4gVmFsdWVzIGluIHRoZSBoZWFkZXJz
IHNldHRpbmcgY2FuIGFsc28gYmUgb3ZlcndyaXR0ZW4gZnJvbSB3aXRoaW4gdGhlIGJlZm9yZVNl
bmQgZnVuY3Rpb24uICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgaGVhZGVycz86
IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSByZXF1
ZXN0IHRvIGJlIHN1Y2Nlc3NmdWwgb25seSBpZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQgc2lu
Y2UgdGhlIGxhc3QgcmVxdWVzdC4gVGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSBMYXN0LU1v
ZGlmaWVkIGhlYWRlci4gRGVmYXVsdCB2YWx1ZSBpcyBmYWxzZSwgaWdub3JpbmcgdGhlIGhlYWRl
ci4gSW4galF1ZXJ5IDEuNCB0aGlzIHRlY2huaXF1ZSBhbHNvIGNoZWNrcyB0aGUgJ2V0YWcnIHNw
ZWNpZmllZCBieSB0aGUgc2VydmVyIHRvIGNhdGNoIHVubW9kaWZpZWQgZGF0YS5cbiAgICAgKi9c
biAgICBpZk1vZGlmaWVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgY3Vy
cmVudCBlbnZpcm9ubWVudCB0byBiZSByZWNvZ25pemVkIGFzIFwibG9jYWwsXCIgKGUuZy4gdGhl
IGZpbGVzeXN0ZW0pLCBldmVuIGlmIGpRdWVyeSBkb2VzIG5vdCByZWNvZ25pemUgaXQgYXMgc3Vj
aCBieSBkZWZhdWx0LiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgY3VycmVudGx5IHJlY29n
bml6ZWQgYXMgbG9jYWw6IGZpbGUsICotZXh0ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJZiB0aGUgaXNM
b2NhbCBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8g
c28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuICh2ZXJzaW9uIGFkZGVkOiAxLjUu
MSlcbiAgICAgKi9cbiAgICBpc0xvY2FsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPdmVy
cmlkZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBpbiBhIGpzb25wIHJlcXVlc3QuIFRoaXMg
dmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgJ2NhbGxiYWNrJyBpbiB0aGUgJ2NhbGxiYWNr
PT8nIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBpbiB0aGUgdXJsLiBTbyB7anNvbnA6J29uSlNP
TlBMb2FkJ30gd291bGQgcmVzdWx0IGluICdvbkpTT05QTG9hZD0/JyBwYXNzZWQgdG8gdGhlIHNl
cnZlci4gQXMgb2YgalF1ZXJ5IDEuNSwgc2V0dGluZyB0aGUganNvbnAgb3B0aW9uIHRvIGZhbHNl
IHByZXZlbnRzIGpRdWVyeSBmcm9tIGFkZGluZyB0aGUgXCI/Y2FsbGJhY2tcIiBzdHJpbmcgdG8g
dGhlIFVSTCBvciBhdHRlbXB0aW5nIHRvIHVzZSBcIj0/XCIgZm9yIHRyYW5zZm9ybWF0aW9uLiBJ
biB0aGlzIGNhc2UsIHlvdSBzaG91bGQgYWxzbyBleHBsaWNpdGx5IHNldCB0aGUganNvbnBDYWxs
YmFjayBzZXR0aW5nLiBGb3IgZXhhbXBsZSwgeyBqc29ucDogZmFsc2UsIGpzb25wQ2FsbGJhY2s6
IFwiY2FsbGJhY2tOYW1lXCIgfVxuICAgICAqL1xuICAgIGpzb25wPzogc3RyaW5nO1xuICAgIC8q
KlxuICAgICAqIFNwZWNpZnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgZm9yIGEgSlNPTlAg
cmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgcmFuZG9tIG5h
bWUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgalF1ZXJ5LiBJdCBpcyBwcmVmZXJhYmxlIHRv
IGxldCBqUXVlcnkgZ2VuZXJhdGUgYSB1bmlxdWUgbmFtZSBhcyBpdCdsbCBtYWtlIGl0IGVhc2ll
ciB0byBtYW5hZ2UgdGhlIHJlcXVlc3RzIGFuZCBwcm92aWRlIGNhbGxiYWNrcyBhbmQgZXJyb3Ig
aGFuZGxpbmcuIFlvdSBtYXkgd2FudCB0byBzcGVjaWZ5IHRoZSBjYWxsYmFjayB3aGVuIHlvdSB3
YW50IHRvIGVuYWJsZSBiZXR0ZXIgYnJvd3NlciBjYWNoaW5nIG9mIEdFVCByZXF1ZXN0cy4gQXMg
b2YgalF1ZXJ5IDEuNSwgeW91IGNhbiBhbHNvIHVzZSBhIGZ1bmN0aW9uIGZvciB0aGlzIHNldHRp
bmcsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIG9mIGpzb25wQ2FsbGJhY2sgaXMgc2V0IHRvIHRo
ZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBqc29ucENhbGxi
YWNrPzogYW55O1xuICAgIC8qKlxuICAgICAqIEEgbWltZSB0eXBlIHRvIG92ZXJyaWRlIHRoZSBY
SFIgbWltZSB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgbWltZVR5
cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBwYXNzd29yZCB0byBiZSB1c2VkIHdpdGgg
WE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRp
b24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAg
ICAgKiBCeSBkZWZhdWx0LCBkYXRhIHBhc3NlZCBpbiB0byB0aGUgZGF0YSBvcHRpb24gYXMgYW4g
b2JqZWN0ICh0ZWNobmljYWxseSwgYW55dGhpbmcgb3RoZXIgdGhhbiBhIHN0cmluZykgd2lsbCBi
ZSBwcm9jZXNzZWQgYW5kIHRyYW5zZm9ybWVkIGludG8gYSBxdWVyeSBzdHJpbmcsIGZpdHRpbmcg
dG8gdGhlIGRlZmF1bHQgY29udGVudC10eXBlIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxl
bmNvZGVkXCIuIElmIHlvdSB3YW50IHRvIHNlbmQgYSBET01Eb2N1bWVudCwgb3Igb3RoZXIgbm9u
LXByb2Nlc3NlZCBkYXRhLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2UuXG4gICAgICovXG4gICAg
cHJvY2Vzc0RhdGE/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwbGllcyB3aGVu
IHRoZSBcInNjcmlwdFwiIHRyYW5zcG9ydCBpcyB1c2VkIChlLmcuLCBjcm9zcy1kb21haW4gcmVx
dWVzdHMgd2l0aCBcImpzb25wXCIgb3IgXCJzY3JpcHRcIiBkYXRhVHlwZSBhbmQgXCJHRVRcIiB0
eXBlKS4gU2V0cyB0aGUgY2hhcnNldCBhdHRyaWJ1dGUgb24gdGhlIHNjcmlwdCB0YWcgdXNlZCBp
biB0aGUgcmVxdWVzdC4gVXNlZCB3aGVuIHRoZSBjaGFyYWN0ZXIgc2V0IG9uIHRoZSBsb2NhbCBw
YWdlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgb25lIG9uIHRoZSByZW1vdGUgc2NyaXB0LlxuICAg
ICAqL1xuICAgIHNjcmlwdENoYXJzZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQW4gb2Jq
ZWN0IG9mIG51bWVyaWMgSFRUUCBjb2RlcyBhbmQgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVu
IHRoZSByZXNwb25zZSBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgY29kZS4gZiB0aGUgcmVxdWVzdCBp
cyBzdWNjZXNzZnVsLCB0aGUgc3RhdHVzIGNvZGUgZnVuY3Rpb25zIHRha2UgdGhlIHNhbWUgcGFy
YW1ldGVycyBhcyB0aGUgc3VjY2VzcyBjYWxsYmFjazsgaWYgaXQgcmVzdWx0cyBpbiBhbiBlcnJv
ciAoaW5jbHVkaW5nIDN4eCByZWRpcmVjdCksIHRoZXkgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJz
IGFzIHRoZSBlcnJvciBjYWxsYmFjay4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAg
ICBzdGF0dXNDb2RlPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICog
QSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFRoZSBmdW5j
dGlvbiBnZXRzIHBhc3NlZCB0aHJlZSBhcmd1bWVudHM6IFRoZSBkYXRhIHJldHVybmVkIGZyb20g
dGhlIHNlcnZlciwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgZGF0YVR5cGUgcGFyYW1ldGVy
OyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBzdGF0dXM7IGFuZCB0aGUganFYSFIgKGluIGpRdWVy
eSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIHN1
Y2Nlc3Mgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5j
dGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAg
ICovXG4gICAgc3VjY2Vzcz8gKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjog
SlF1ZXJ5WEhSKTogYW55O1xuICAgIC8qKlxuICAgICAqIFNldCBhIHRpbWVvdXQgKGluIG1pbGxp
c2Vjb25kcykgZm9yIHRoZSByZXF1ZXN0LiBUaGlzIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCB0
aW1lb3V0IHNldCB3aXRoICQuYWpheFNldHVwKCkuIFRoZSB0aW1lb3V0IHBlcmlvZCBzdGFydHMg
YXQgdGhlIHBvaW50IHRoZSAkLmFqYXggY2FsbCBpcyBtYWRlOyBpZiBzZXZlcmFsIG90aGVyIHJl
cXVlc3RzIGFyZSBpbiBwcm9ncmVzcyBhbmQgdGhlIGJyb3dzZXIgaGFzIG5vIGNvbm5lY3Rpb25z
IGF2YWlsYWJsZSwgaXQgaXMgcG9zc2libGUgZm9yIGEgcmVxdWVzdCB0byB0aW1lIG91dCBiZWZv
cmUgaXQgY2FuIGJlIHNlbnQuIEluIGpRdWVyeSAxLjQueCBhbmQgYmVsb3csIHRoZSBYTUxIdHRw
UmVxdWVzdCBvYmplY3Qgd2lsbCBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIHRoZSByZXF1ZXN0
IHRpbWVzIG91dDsgYWNjZXNzaW5nIGFueSBvYmplY3QgbWVtYmVycyBtYXkgdGhyb3cgYW4gZXhj
ZXB0aW9uLiBJbiBGaXJlZm94IDMuMCsgb25seSwgc2NyaXB0IGFuZCBKU09OUCByZXF1ZXN0cyBj
YW5ub3QgYmUgY2FuY2VsbGVkIGJ5IGEgdGltZW91dDsgdGhlIHNjcmlwdCB3aWxsIHJ1biBldmVu
IGlmIGl0IGFycml2ZXMgYWZ0ZXIgdGhlIHRpbWVvdXQgcGVyaW9kLlxuICAgICAqL1xuICAgIHRp
bWVvdXQ/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ug
d2lzaCB0byB1c2UgdGhlIHRyYWRpdGlvbmFsIHN0eWxlIG9mIHBhcmFtIHNlcmlhbGl6YXRpb24u
XG4gICAgICovXG4gICAgdHJhZGl0aW9uYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRo
ZSB0eXBlIG9mIHJlcXVlc3QgdG8gbWFrZSAoXCJQT1NUXCIgb3IgXCJHRVRcIiksIGRlZmF1bHQg
aXMgXCJHRVRcIi4gTm90ZTogT3RoZXIgSFRUUCByZXF1ZXN0IG1ldGhvZHMsIHN1Y2ggYXMgUFVU
IGFuZCBERUxFVEUsIGNhbiBhbHNvIGJlIHVzZWQgaGVyZSwgYnV0IHRoZXkgYXJlIG5vdCBzdXBw
b3J0ZWQgYnkgYWxsIGJyb3dzZXJzLlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAg
LyoqXG4gICAgICogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICovXG4gICAgdXJsPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAq
IEEgdXNlcm5hbWUgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRv
IGFuIEhUVFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgdXNl
cm5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgZm9yIGNyZWF0aW5nIHRo
ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QuIERlZmF1bHRzIHRvIHRoZSBBY3RpdmVYT2JqZWN0IHdo
ZW4gYXZhaWxhYmxlIChJRSksIHRoZSBYTUxIdHRwUmVxdWVzdCBvdGhlcndpc2UuIE92ZXJyaWRl
IHRvIHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb24gZm9yIFhNTEh0dHBSZXF1ZXN0IG9y
IGVuaGFuY2VtZW50cyB0byB0aGUgZmFjdG9yeS5cbiAgICAgKi9cbiAgICB4aHI/OiBhbnk7XG4g
ICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGZpZWxkTmFtZS1maWVsZFZhbHVlIHBhaXJzIHRv
IHNldCBvbiB0aGUgbmF0aXZlIFhIUiBvYmplY3QuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBp
dCB0byBzZXQgd2l0aENyZWRlbnRpYWxzIHRvIHRydWUgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0
cyBpZiBuZWVkZWQuIEluIGpRdWVyeSAxLjUsIHRoZSB3aXRoQ3JlZGVudGlhbHMgcHJvcGVydHkg
d2FzIG5vdCBwcm9wYWdhdGVkIHRvIHRoZSBuYXRpdmUgWEhSIGFuZCB0aHVzIENPUlMgcmVxdWVz
dHMgcmVxdWlyaW5nIGl0IHdvdWxkIGlnbm9yZSB0aGlzIGZsYWcuIEZvciB0aGlzIHJlYXNvbiwg
d2UgcmVjb21tZW5kIHVzaW5nIGpRdWVyeSAxLjUuMSsgc2hvdWxkIHlvdSByZXF1aXJlIHRoZSB1
c2Ugb2YgaXQuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICB4aHJGaWVsZHM/
OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRo
ZSBqcVhIUiBvYmplY3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5WEhSIGV4dGVuZHMgWE1MSHR0cFJl
cXVlc3QsIEpRdWVyeVByb21pc2U8YW55PiB7XG4gICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lVHlw
ZTogc3RyaW5nKTogYW55O1xuICAgIGFib3J0KHN0YXR1c1RleHQ/OiBzdHJpbmcpOiB2b2lkO1xu
fVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBjYWxsYmFja1xuKi9cbmludGVy
ZmFjZSBKUXVlcnlDYWxsYmFjayB7XG4gICAgYWRkKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7
XG4gICAgZGlzYWJsZSgpOiBhbnk7XG4gICAgZW1wdHkoKTogYW55O1xuICAgIGZpcmUoLi4uYXJn
dW1lbnRzOiBhbnlbXSk6IGFueTtcbiAgICBmaXJlZCgpOiBib29sZWFuO1xuICAgIGZpcmVXaXRo
KGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAgaGFzKGNhbGxiYWNrOiBh
bnkpOiBib29sZWFuO1xuICAgIGxvY2soKTogYW55O1xuICAgIGxvY2tlZCgpOiBib29sZWFuO1xu
ICAgIHJlbW92ZSguLi5jYWxsYmFja3M6IGFueVtdKTogYW55O1xufVxuXG4vKlxuICAgIEFsbG93
cyBqUXVlcnkgUHJvbWlzZXMgdG8gaW50ZXJvcCB3aXRoIG5vbi1qUXVlcnkgcHJvbWlzZXNcbiov
XG5pbnRlcmZhY2UgSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD4ge1xuICAgIHRoZW48VT4ob25GdWxm
aWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1
ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkg
PT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBV
KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1
ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9t
aXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6
ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNv
bjogYW55KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBwcm9taXNlLCBwYXJ0
IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBH
ZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFj
a3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBU
W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTog
SlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFu
eVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTog
SlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55
W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgLy8gRGVwcmVjYXRlZCAtIGdpdmVuIG5vIHR5
cGluZ3NcbiAgICBwaXBlKGRvbmVGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIGZhaWxGaWx0ZXI/
OiAoeDogYW55KSA9PiBhbnksIHByb2dyZXNzRmlsdGVyPzogKHg6IGFueSkgPT4gYW55KTogSlF1
ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4g
VSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4u
cHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJl
amVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+
IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVh
c29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4u
LnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcblxuICAgIC8v
IEJlY2F1c2UgSlF1ZXJ5IFByb21pc2VzIFN1Y2tcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4u
LnZhbHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBV
LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJv
bWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4g
VSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVBy
b21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBV
LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8
VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQ
cm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4g
SlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9
PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjog
YW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNl
IGZvciB0aGUgSlF1ZXJ5IGRlZmVycmVkLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFj
ZSBKUXVlcnlEZWZlcnJlZDxUPiBleHRlbmRzIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdl
bmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNr
czogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBU
W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6
IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBU
W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6
IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBh
bnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55
W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNr
czogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIG5vdGlmeSguLi5hcmdzOiBhbnlb
XSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIG5vdGlmeVdpdGgoY29udGV4dDogYW55LCAuLi5h
cmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVqZWN0KC4uLmFyZ3M6IGFu
eVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVqZWN0V2l0aChjb250ZXh0OiBhbnksIC4u
LmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZXNvbHZlKHZhbDogVCk6
IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlc29sdmUoLi4uYXJnczogYW55W10pOiBKUXVlcnlE
ZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtd
KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgc3RhdGUoKTogc3RyaW5nO1xuXG4gICAgcHJvbWlz
ZSh0YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9taXNlPFQ+O1xufVxuXG4vKlxuICAgIEludGVyZmFj
ZSBvZiB0aGUgSlF1ZXJ5IGV4dGVuc2lvbiBvZiB0aGUgVzNDIGV2ZW50IG9iamVjdFxuKi9cblxu
aW50ZXJmYWNlIEJhc2VKUXVlcnlFdmVudE9iamVjdCBleHRlbmRzIEV2ZW50IHtcbiAgICBkYXRh
OiBhbnk7XG4gICAgZGVsZWdhdGVUYXJnZXQ6IEVsZW1lbnQ7XG4gICAgaXNEZWZhdWx0UHJldmVu
dGVkKCk6IGJvb2xlYW47XG4gICAgaXNJbW1lZGlhdGVQcm9wb2dhdGlvblN0b3BwZWQoKTogYm9v
bGVhbjtcbiAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIG5hbWVzcGFj
ZTogc3RyaW5nO1xuICAgIHByZXZlbnREZWZhdWx0KCk6IGFueTtcbiAgICByZWxhdGVkVGFyZ2V0
OiBFbGVtZW50O1xuICAgIHJlc3VsdDogYW55O1xuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlv
bigpOiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHBhZ2VYOiBudW1i
ZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICB3aGljaDogbnVtYmVyO1xuICAgIG1ldGFLZXk6
IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IGV4dGVuZHMg
QmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBhbHRLZXk6IGJvb2xlYW47XG4gICAgY3RybEtl
eTogYm9vbGVhbjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5OiBib29sZWFu
O1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlu
cHV0RXZlbnRPYmplY3Qge1xuICAgIGJ1dHRvbjogbnVtYmVyO1xuICAgIGNsaWVudFg6IG51bWJl
cjtcbiAgICBjbGllbnRZOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNl
dFk6IG51bWJlcjtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAg
c2NyZWVuWDogbnVtYmVyO1xuICAgIHNjcmVlblk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpR
dWVyeUtleUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAg
Y2hhcjogYW55O1xuICAgIGNoYXJDb2RlOiBudW1iZXI7XG4gICAga2V5OiBhbnk7XG4gICAga2V5
Q29kZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCBl
eHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgb3JpZ2luYWxFdmVudDogUG9wU3Rh
dGVFdmVudDtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpR
dWVyeUV2ZW50T2JqZWN0LCBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0LCBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0LCBKUXVlcnlLZXlFdmVudE9iamVjdCwgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCB7
XG59XG5cbi8qXG4gICAgQ29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IGJy
b3dzZXJcbiovXG5cbmludGVyZmFjZSBKUXVlcnlTdXBwb3J0IHtcbiAgICBhamF4PzogYm9vbGVh
bjtcbiAgICBib3hNb2RlbD86IGJvb2xlYW47XG4gICAgY2hhbmdlQnViYmxlcz86IGJvb2xlYW47
XG4gICAgY2hlY2tDbG9uZT86IGJvb2xlYW47XG4gICAgY2hlY2tPbj86IGJvb2xlYW47XG4gICAg
Y29ycz86IGJvb2xlYW47XG4gICAgY3NzRmxvYXQ/OiBib29sZWFuO1xuICAgIGhyZWZOb3JtYWxp
emVkPzogYm9vbGVhbjtcbiAgICBodG1sU2VyaWFsaXplPzogYm9vbGVhbjtcbiAgICBsZWFkaW5n
V2hpdGVzcGFjZT86IGJvb2xlYW47XG4gICAgbm9DbG9uZUNoZWNrZWQ/OiBib29sZWFuO1xuICAg
IG5vQ2xvbmVFdmVudD86IGJvb2xlYW47XG4gICAgb3BhY2l0eT86IGJvb2xlYW47XG4gICAgb3B0
RGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIG9wdFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBzY3Jp
cHRFdmFsPyAoKTogYm9vbGVhbjtcbiAgICBzdHlsZT86IGJvb2xlYW47XG4gICAgc3VibWl0QnVi
Ymxlcz86IGJvb2xlYW47XG4gICAgdGJvZHk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1
ZXJ5UGFyYW0ge1xuICAgIChvYmo6IGFueSk6IHN0cmluZztcbiAgICAob2JqOiBhbnksIHRyYWRp
dGlvbmFsOiBib29sZWFuKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNl
ZCB0byBjb25zdHJ1Y3QgalF1ZXJ5IGV2ZW50cyAod2l0aCAkLkV2ZW50KS4gSXQgaXNcbiAqIGRl
ZmluZWQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGlubGluZSBpbiBKUXVlcnlTdGF0aWMgdG8gYWxs
b3dcbiAqIG92ZXJyaWRpbmcgdGhlIGNvbnN0cnVjdGlvbiBmdW5jdGlvbiB3aXRoIHNwZWNpZmlj
IHN0cmluZ3NcbiAqIHJldHVybmluZyBzcGVjaWZpYyBldmVudCBvYmplY3RzLlxuICovXG5pbnRl
cmZhY2UgSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvciB7XG4gICAgKG5hbWU6IHN0cmluZywgZXZlbnRQ
cm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG4gICAgbmV3IChuYW1lOiBzdHJp
bmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xufVxuXG4vKipc
biAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBzcGVjaWZ5IGVhc2luZyBmdW5jdGlvbnMuXG4gKi9c
bmludGVyZmFjZSBKUXVlcnlFYXNpbmcge1xuICAgIGxpbmVhcihwOiBudW1iZXIpOiBudW1iZXI7
XG4gICAgc3dpbmcocDogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vKlxuICAgIFN0YXRpYyBtZW1i
ZXJzIG9mIGpRdWVyeSAodGhvc2Ugb24gJCBhbmQgalF1ZXJ5IHRoZW1zZWx2ZXMpXG4qL1xuaW50
ZXJmYWNlIEpRdWVyeVN0YXRpYyB7XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5j
aHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRp
bmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1
ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3Ig
YW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4gICAgICovXG4gICAgYWpheChzZXR0aW5n
czogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIFBlcmZv
cm0gYW4gYXN5bmNocm9ub3VzIEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVz
dCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFp
cnMgdGhhdCBjb25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRp
b25hbC4gQSBkZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1
cCgpLlxuICAgICAqL1xuICAgIGFqYXgodXJsOiBzdHJpbmcsIHNldHRpbmdzPzogSlF1ZXJ5QWph
eFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBB
amF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVz
dCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGRhdGFUeXBlcyBBbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmlu
ZyBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZGF0YVR5cGVzXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVx
dWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihkYXRhVHlwZXM6IHN0cmluZywgaGFu
ZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhS
OiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3Rv
bSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVx
dWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZh
bHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRl
cihoYW5kbGVyOiAob3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywg
anFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogdm9pZDtcblxuICAgIGFqYXhTZXR0aW5nczogSlF1
ZXJ5QWpheFNldHRpbmdzO1xuXG4gICAgIC8qKlxuICAgICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMg
Zm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLiBJdHMgdXNlIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAg
ICAgICpcbiAgICAgICogQHBhcmFtIG9wdGlvbnMgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRo
YXQgY29uZmlndXJlIHRoZSBkZWZhdWx0IEFqYXggcmVxdWVzdC4gQWxsIG9wdGlvbnMgYXJlIG9w
dGlvbmFsLlxuICAgICAgKi9cbiAgICBhamF4U2V0dXAob3B0aW9uczogSlF1ZXJ5QWpheFNldHRp
bmdzKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIg
dXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0
cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAg
ICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQg
aWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBl
IG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBH
dWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6
IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6
IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAv
KipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVx
dWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUg
VVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBw
bGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhl
IHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0
IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRh
VHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDog
SW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9c
biAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/
OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhl
IHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
dXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBz
ZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlz
IHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNj
ZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBz
dWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3Rl
ZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24s
IHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzog
c3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjog
SlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8q
KlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEg
R0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29u
dGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBh
cmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIHN1Y2Nl
c3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+
IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRh
IGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVx
dWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmlu
ZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBw
YXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUg
cmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRh
PzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhI
UjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBK
U09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwg
dG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWlu
IG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVx
dWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMg
ZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1
cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0
dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8q
KlxuICAgICAqIExvYWQgYSBKYXZhU2NyaXB0IGZpbGUgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEg
R0VUIEhUVFAgcmVxdWVzdCwgdGhlbiBleGVjdXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFt
IHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMg
c2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMg
ZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0U2NyaXB0
KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKHNjcmlwdDogc3RyaW5nLCB0ZXh0U3RhdHVzOiBzdHJp
bmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcblxuICAgIHBhcmFtOiBK
UXVlcnlQYXJhbTtcblxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIg
dXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBz
dHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4g
ICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVk
IGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRl
ZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUg
VGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVs
bGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4g
ICAgcG9zdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0
cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVy
eVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEg
SFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNl
cnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sg
ZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWly
ZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2Uu
XG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0
aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQs
IHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmpl
Y3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVl
cnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4g
ICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwg
dG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWlu
IG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVx
dWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMg
ZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlz
IHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBk
YXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVs
dDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAg
ICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogQSBtdWx0aS1w
dXJwb3NlIGNhbGxiYWNrcyBsaXN0IG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgcG93ZXJmdWwgd2F5
IHRvIG1hbmFnZSBjYWxsYmFjayBsaXN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbGFncyBB
biBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBmbGFncyB0aGF0IGNoYW5nZSBob3cg
dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcy5cbiAgICAgKi9cbiAgICBDYWxsYmFja3MoZmxhZ3M/
OiBzdHJpbmcpOiBKUXVlcnlDYWxsYmFjaztcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIG9yIHJl
bGVhc2VzIHRoZSBleGVjdXRpb24gb2YgalF1ZXJ5J3MgcmVhZHkgZXZlbnQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gaG9sZCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVhZHkgaG9sZCBpcyBiZWlu
ZyByZXF1ZXN0ZWQgb3IgcmVsZWFzZWRcbiAgICAgKi9cbiAgICBob2xkUmVhZHkoaG9sZDogYm9v
bGVhbik6IHZvaWQ7XG5cbiAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpR
dWVyeTtcbiAgICAoZWxlbWVudDogRWxlbWVudCk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiB7fSk6
IEpRdWVyeTtcbiAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBKUXVlcnk7XG4gICAgKG9i
amVjdDogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIChmdW5jOiBGdW5jdGlvbik6IEpRdWVyeTtcbiAg
ICAoYXJyYXk6IGFueVtdKTogSlF1ZXJ5O1xuICAgICgpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBSZWxpbnF1aXNoIGpRdWVyeSdzIGNvbnRyb2wgb2YgdGhlICQgdmFyaWFibGUuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcmVtb3ZlQWxsIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIg
dG8gcmVtb3ZlIGFsbCBqUXVlcnkgdmFyaWFibGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZSAoaW5j
bHVkaW5nIGpRdWVyeSBpdHNlbGYpLlxuICAgICAqL1xuICAgIG5vQ29uZmxpY3QocmVtb3ZlQWxs
PzogYm9vbGVhbik6IE9iamVjdDtcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRv
IGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMs
IHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZl
bnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJl
ZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hl
bjxUPiguLi5kZWZlcnJlZHM6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+W10pOiBKUXVlcnlQcm9t
aXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJh
Y2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJy
ZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBw
bGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJl
ZHM6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3
YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2Jq
ZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91
cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERl
ZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAg
ICB3aGVuPFQ+KC4uLmRlZmVycmVkczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAg
Y3NzSG9va3M6IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIGNzc051bWJlcjogYW55O1xu
XG4gICAgLyoqXG4gICAgICogU3RvcmUgYXJiaXRyYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBzcGVjaWZpZWQgZWxlbWVudC4gUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3
aXRoIHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVj
ZSBvZiBkYXRhIHRvIHNldC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyBkYXRhIHZhbHVl
LlxuICAgICAqL1xuICAgIGRhdGE8VD4oZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZh
bHVlOiBUKTogVDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEg
c3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFt
ZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0
aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ug
b2YgZGF0YSB0byBzZXQuXG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50LCBrZXk6
IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRh
dGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwg
bmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUg
d2l0aCB0aGUgZGF0YS5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnk7
XG5cbiAgICBkZXF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFu
eTtcblxuICAgIGhhc0RhdGEoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBxdWV1
ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1
ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNr
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWU/
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIERlZmVycmVkPFQ+KGJl
Zm9yZVN0YXJ0PzogKGRlZmVycmVkOiBKUXVlcnlEZWZlcnJlZDxUPikgPT4gYW55KTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgZng6IHsgdGljazogKCkgPT4gdm9p
ZDsgaW50ZXJ2YWw6IG51bWJlcjsgc3RvcDogKCkgPT4gdm9pZDsgc3BlZWRzOiB7IHNsb3c6IG51
bWJlcjsgZmFzdDogbnVtYmVyOyB9OyBvZmY6IGJvb2xlYW47IHN0ZXA6IGFueTsgfTtcblxuICAg
IC8vIEV2ZW50c1xuICAgIHByb3h5KGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSwgY29udGV4
dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBwcm94eShjb250ZXh0OiBhbnksIG5h
bWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBhbnk7XG5cbiAgICBFdmVudDogSlF1ZXJ5RXZl
bnRDb25zdHJ1Y3RvcjtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGVycm9yKG1lc3NhZ2U6IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBleHByOiBhbnk7XG4gICAg
Zm46IGFueTsgIC8vVE9ETzogRGVjaWRlIGhvdyB3ZSB3YW50IHRvIHR5cGUgdGhpc1xuICAgIGlz
UmVhZHk6IGJvb2xlYW47XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgc3VwcG9ydDogSlF1ZXJ5
U3VwcG9ydDtcblxuICAgIC8vIFV0aWxpdGllc1xuICAgIGNvbnRhaW5zKGNvbnRhaW5lcjogRWxl
bWVudCwgY29udGFpbmVkOiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIGVhY2goY29sbGVjdGlv
bjogYW55LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogYW55LCB2YWx1ZU9mRWxlbWVudDogYW55
KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFjaChjb2xsZWN0aW9uOiBKUXVlcnksIGNhbGxiYWNrOiAo
aW5kZXhJbkFycmF5OiBudW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYW55
KTogYW55O1xuICAgIGVhY2g8VD4oY29sbGVjdGlvbjogVFtdLCBjYWxsYmFjazogKGluZGV4SW5B
cnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDogVCkgPT4gYW55KTogYW55O1xuXG4gICAgZXh0
ZW5kKHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcbiAgICBleHRlbmQoZGVlcDog
Ym9vbGVhbiwgdGFyZ2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuXG4gICAgZ2xvYmFs
RXZhbChjb2RlOiBzdHJpbmcpOiBhbnk7XG5cbiAgICBncmVwPFQ+KGFycmF5OiBUW10sIGZ1bmM6
IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IGJvb2xlYW4sIGlu
dmVydD86IGJvb2xlYW4pOiBUW107XG5cbiAgICBpbkFycmF5PFQ+KHZhbHVlOiBULCBhcnJheTog
VFtdLCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXI7XG5cbiAgICBpc0FycmF5KG9iajogYW55
KTogYm9vbGVhbjtcbiAgICBpc0VtcHR5T2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBp
c0Z1bmN0aW9uKG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc051bWVyaWModmFsdWU6IGFueSk6
IGJvb2xlYW47XG4gICAgaXNQbGFpbk9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNX
aW5kb3cob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzWE1MRG9jKG5vZGU6IE5vZGUpOiBib29s
ZWFuO1xuXG4gICAgbWFrZUFycmF5KG9iajogYW55KTogYW55W107XG5cbiAgICBtYXA8VCwgVT4o
YXJyYXk6IFRbXSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBu
dW1iZXIpID0+IFUpOiBVW107XG4gICAgbWFwKGFycmF5OiBhbnksIGNhbGxiYWNrOiAoZWxlbWVu
dE9mQXJyYXk6IGFueSwgaW5kZXhJbkFycmF5OiBhbnkpID0+IGFueSk6IGFueTtcblxuICAgIG1l
cmdlPFQ+KGZpcnN0OiBUW10sIHNlY29uZDogVFtdKTogVFtdO1xuICAgIG1lcmdlPFQsVT4oZmly
c3Q6IFRbXSwgc2Vjb25kOiBVW10pOiBhbnlbXTtcblxuICAgIG5vb3AoKTogYW55O1xuXG4gICAg
bm93KCk6IG51bWJlcjtcblxuICAgIHBhcnNlSlNPTihqc29uOiBzdHJpbmcpOiBhbnk7XG5cbiAg
ICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBYTUwgZG9jdW1lbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZGF0YWEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZyB0byBiZSBwYXJz
ZWRcbiAgICAgKi9cbiAgICBwYXJzZVhNTChkYXRhOiBzdHJpbmcpOiBYTUxEb2N1bWVudDtcblxu
ICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZTog
YW55W10pOiBKUXVlcnk7XG5cbiAgICB0cmltKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAg
dHlwZShvYmo6IGFueSk6IHN0cmluZztcblxuICAgIHVuaXF1ZShhcnI6IGFueVtdKTogYW55W107
XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBET00g
bm9kZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSBIVE1MIHN0cmluZyB0byBiZSBwYXJz
ZWRcbiAgICAgKiBAcGFyYW0gY29udGV4dCBET00gZWxlbWVudCB0byBzZXJ2ZSBhcyB0aGUgY29u
dGV4dCBpbiB3aGljaCB0aGUgSFRNTCBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBA
cGFyYW0ga2VlcFNjcmlwdHMgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRl
IHNjcmlwdHMgcGFzc2VkIGluIHRoZSBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlSFRN
TChkYXRhOiBzdHJpbmcsIGNvbnRleHQ/OiBIVE1MRWxlbWVudCwga2VlcFNjcmlwdHM/OiBib29s
ZWFuKTogYW55W107XG5cbiAgICBBbmltYXRpb24oZWxlbTogYW55LCBwcm9wZXJ0aWVzOiBhbnks
IG9wdGlvbnM6IGFueSk6IGFueTtcblxuICAgIGVhc2luZzogSlF1ZXJ5RWFzaW5nO1xufVxuXG4v
KlxuICAgIFRoZSBqUXVlcnkgaW5zdGFuY2UgbWVtYmVyc1xuKi9cbmludGVyZmFjZSBKUXVlcnkg
e1xuICAgIC8vIEFKQVhcbiAgICBhamF4Q29tcGxldGUoaGFuZGxlcjogYW55KTogSlF1ZXJ5O1xu
ICAgIGFqYXhFcnJvcihoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6
IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U2VuZChoYW5k
bGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RhcnQoaGFuZGxlcjogKCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIGFqYXhTdG9wKGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBh
amF4U3VjY2VzcyhoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFu
eSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGxvYWQodXJsOiBzdHJp
bmcsIGRhdGE/OiBhbnksIGNvbXBsZXRlPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2VyaWFsaXpl
KCk6IHN0cmluZztcbiAgICBzZXJpYWxpemVBcnJheSgpOiBhbnlbXTtcblxuICAgIC8vIEF0dHJp
YnV0ZXNcbiAgICBhZGRDbGFzcyhjbGFzc05hbWVzOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRk
Q2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGN1cnJlbnRDbGFzczogYW55KSA9PiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICAvLyBodHRwOi8vYXBpLmpxdWVyeS5jb20vYWRkQmFjay9cbiAgICBhZGRC
YWNrKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG5cbiAgICBhdHRyKGF0dHJpYnV0ZU5h
bWU6IHN0cmluZyk6IHN0cmluZztcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFs
dWU6IGFueSk6IEpRdWVyeTtcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgZnVuYzog
KGluZGV4OiBhbnksIGF0dHI6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIobWFwOiBh
bnkpOiBKUXVlcnk7XG5cbiAgICBoYXNDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW47
XG5cbiAgICBodG1sKCk6IHN0cmluZztcbiAgICBodG1sKGh0bWxTdHJpbmc6IHN0cmluZyk6IEpR
dWVyeTtcbiAgICBodG1sKGh0bWxDb250ZW50OiAoaW5kZXg6IG51bWJlciwgb2xkaHRtbDogc3Ry
aW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbChvYmo6IEpRdWVyeSk6IEpRdWVyeTtc
blxuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgcHJvcChwcm9wZXJ0
eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKG1hcDogYW55KTog
SlF1ZXJ5O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55
LCBvbGRQcm9wZXJ0eVZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUF0
dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQ2xhc3MoY2xh
c3NOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHJlbW92ZUNsYXNzKGZ1bmM6IChpbmRleDog
YW55LCBjbHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlUHJvcChwcm9wZXJ0
eU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZTogc3Ry
aW5nLCBzd3RjaD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Moc3d0Y2g/OiBi
b29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6
IGFueSwgc3d0Y2g6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdmFsKCk6IGFueTtcbiAg
ICB2YWwodmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHZhbChmdW5jOiAo
aW5kZXg6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAg
ICogR2V0IHRoZSB2YWx1ZSBvZiBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZWxlbWVu
dCBpbiB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
cHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5h
bWU6IHN0cmluZyk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NT
IHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFy
YW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBj
c3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1h
dGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NT
IHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0
aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1
ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1Mg
cHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJh
bSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNz
cyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBt
YXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENT
UyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3Ig
dGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFs
dWU6IG51bWJlcltdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBD
U1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBw
YXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlz
IHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUg
ZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAg
Ki9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwg
dmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBv
bmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRz
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1l
LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8g
c2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3Np
dGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3Vt
ZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5k
ZXg6IG51bWJlciwgdmFsdWU6IG51bWJlcikgPT4gbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRj
aGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0
IG9mIHByb3BlcnR5LXZhbHVlIHBhaXJzIHRvIHNldC5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVy
dGllczogT2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAgaGVpZ2h0KCk6IG51bWJlcjtcbiAgICBoZWln
aHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICBoZWlnaHQodmFsdWU6IHN0cmluZyk6IEpR
dWVyeTtcbiAgICBoZWlnaHQoZnVuYzogKGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBpbm5lckhlaWdodCgpOiBudW1iZXI7XG4gICAgaW5uZXJIZWlnaHQo
dmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGlubmVyV2lkdGgoKTogbnVtYmVyO1xuICAg
IGlubmVyV2lkdGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIG9mZnNldCgpOiB7IGxl
ZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IH07XG4gICAgb2Zmc2V0KGNvb3JkaW5hdGVzOiBhbnkp
OiBKUXVlcnk7XG4gICAgb2Zmc2V0KGZ1bmM6IChpbmRleDogYW55LCBjb29yZHM6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4p
OiBudW1iZXI7XG4gICAgb3V0ZXJIZWlnaHQodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86
IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBvdXRlcldpZHRoKGluY2x1ZGVNYXJnaW4/OiBib29s
ZWFuKTogbnVtYmVyO1xuICAgIG91dGVyV2lkdGgodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdp
bj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBwb3NpdGlvbigpOiB7IHRvcDogbnVtYmVyOyBs
ZWZ0OiBudW1iZXI7IH07XG5cbiAgICBzY3JvbGxMZWZ0KCk6IG51bWJlcjtcbiAgICBzY3JvbGxM
ZWZ0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBzY3JvbGxUb3AoKTogbnVtYmVyO1xu
ICAgIHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgd2lkdGgoKTogbnVt
YmVyO1xuICAgIHdpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgd2lkdGgodmFsdWU6
IHN0cmluZyk6IEpRdWVyeTtcbiAgICB3aWR0aChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIERhdGFcbiAgICBjbGVhclF1ZXVlKHF1ZXVl
TmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBh
bnkpOiBKUXVlcnk7XG4gICAgZGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1
ZXJ5O1xuICAgIGRhdGEoa2V5Pzogc3RyaW5nKTogYW55O1xuXG4gICAgZGVxdWV1ZShxdWV1ZU5h
bWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKG5hbWVPckxpc3Q/OiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIHByb21pc2UodHlwZT86IGFueSwgdGFy
Z2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGFu
aW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgY29tcGxldGU/OiBGdW5jdGlv
bik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnks
IGVhc2luZz86IHN0cmluZywgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmlt
YXRlKHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczogeyBkdXJhdGlvbj86IGFueTsgZWFzaW5nPzog
c3RyaW5nOyBjb21wbGV0ZT86IEZ1bmN0aW9uOyBzdGVwPzogRnVuY3Rpb247IHF1ZXVlPzogYm9v
bGVhbjsgc3BlY2lhbEVhc2luZz86IGFueTsgfSk6IEpRdWVyeTtcblxuICAgIGRlbGF5KGR1cmF0
aW9uOiBudW1iZXIsIHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGZhZGVJbihk
dXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZUluKGR1cmF0
aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAg
ZmFkZU91dChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6
IEpRdWVyeTtcblxuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5
OiBudW1iZXIsIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAg
ICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzog
YW55KTogSlF1ZXJ5O1xuXG4gICAgZmluaXNoKCk6IEpRdWVyeTtcblxuICAgIGhpZGUoZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGhpZGUoZHVyYXRpb24/OiBh
bnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzaG93
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzaG93KGR1cmF0
aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAg
ICBzbGlkZURvd24oZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86
IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVVwKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZVVwKGR1cmF0aW9uPzog
YW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc3Rv
cChjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcbiAg
ICBzdG9wKHF1ZXVlPzogYW55LCBjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9v
bGVhbik6IEpRdWVyeTtcblxuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcs
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShzaG93T3JIaWRlOiBib29sZWFu
KTogSlF1ZXJ5O1xuXG4gICAgLy8gRXZlbnRzXG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywg
ZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0
YTogYW55LCBwcmV2ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRU
eXBlOiBzdHJpbmcsIHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZCgu
Li5ldmVudHM6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgYmx1cihoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmx1cihldmVudERh
dGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNoYW5nZVwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgY2hhbmdlKCk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNo
YW5nZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNo
YW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEg
QW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVu
dCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjbGlja1wi
IGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgY2xpY2soKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqL1xuICAgIGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3Nl
ZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0
aGUgXCJkYmxjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZGJsY2xp
Y2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIGRibGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGRlbGVn
YXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBUcmlnZ2VyIHRoZSBcImZvY3VzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAg
ICBmb2N1cygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgZm9jdXMoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihldmVudERhdGE6
IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgZm9jdXNvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxu
ICAgICAqIEJpbmQgdHdvIGhhbmRsZXJzIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBl
eGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBhbmQgbGVhdmVzIHRoZSBlbGVt
ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW4gQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIHRoZSBlbGVtZW50LlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2lu
dGVyIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW46IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSwgaGFuZGxlck91dDogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYSBzaW5nbGUgaGFuZGxlciB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUg
ZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVt
ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW5PdXQgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW5PdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwia2V5ZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5ZG93
bigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImtleWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAga2V5ZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtl
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBrZXlkb3duXCJcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAga2V5ZG93bihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXByZXNzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAg
ICAgKi9cbiAgICBrZXlwcmVzcygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoZXZlbnREYXRhPzog
YW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXl1cFwiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5dXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQg
ZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cCho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVw
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50RGF0
YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgbG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBs
b2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwi
bW91c2Vkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24o
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBtb3VzZWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlZG93bihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZW50ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4g
ZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRl
cihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmly
ZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3Nl
ZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlZW50ZXIoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJtb3VzZWxlYXZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAg
ICBtb3VzZWxlYXZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1v
dXNlIGxlYXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGV2ZW50
RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91
c2Vtb3ZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoKTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJt
b3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBtb3VzZW1vdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIG1vdXNlbW92ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3V0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAg
ICAgKi9cbiAgICBtb3VzZW91dCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNj
cmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoZXZlbnREYXRhOiBPYmplY3Qs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW92ZXJcIiBldmVu
dCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcigpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEph
dmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlb3ZlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91
c2VvdmVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1v
dXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwibW91c2V1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91
c2V1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0
IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgbW91c2V1cChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBvZmYoKTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlw
ZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBc
ImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAq
IEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9y
aWdpbmFsbHkgcGFzc2VkIHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFj
aGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAq
L1xuICAgIG9mZihldmVudHM6IHN0cmluZywgc2VsZWN0b3I/OiBzdHJpbmcsIGhhbmRsZXI/OiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9u
YWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJr
ZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChz
KSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czog
c3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCB3aGVyZSB0aGUgc3RyaW5nIGtleXMg
cmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0
aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGhhbmRsZXIgZnVuY3Rp
b25zIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0g
c2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5
IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKi9c
biAgICBvZmYoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBm
dW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVk
IGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBv
ciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2Ug
aXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5
IGRvZXMgcmV0dXJuIGZhbHNlLiBSZXN0IHBhcmFtZXRlciBhcmdzIGlzIGZvciBvcHRpb25hbCBw
YXJhbWV0ZXJzIHBhc3NlZCB0byBqUXVlcnkudHJpZ2dlcigpLiBOb3RlIHRoYXQgdGhlIGFjdHVh
bCBwYXJhbWV0ZXJzIG9uIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIG11c3QgYmUgbWFya2Vk
IGFzIG9wdGlvbmFsICg/IHN5bnRheCkuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QsIC4uLmFyZ3M6IGFueVtd
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRs
ZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVu
dHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFy
YXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNr
XCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2Vs
ZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVs
ZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9y
IG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0
aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMg
YWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRv
ZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rv
cjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVu
Y3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBl
dmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3Ig
XCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Ig
c3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRz
IHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0
ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2Vs
ZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0
aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhh
bmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICov
XG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUg
b3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2Vu
dCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5h
bWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8g
YmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2Vs
ZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVs
ZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVs
bCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hl
cyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBh
c3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxu
ICAgICAqL1xuICAgIG9uKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9y
PzogYW55LCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEg
aGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVj
dXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNj
cmlwdCBldmVudCB0eXBlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3Vz
dG9tIGV2ZW50IG5hbWVzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9u
ZShldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8g
YW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9z
dCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQg
dHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBu
YW1lcy5cbiAgICAgKiBAcGFyYW0gZGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVt
ZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBl
ciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBz
cGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2gg
YXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxl
Y3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBz
ZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3Ig
aXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0
IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVl
IGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0
IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJp
bmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVy
IHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0
IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBv
cHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVn
aW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVy
IHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRo
ZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlz
IGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50Llxu
ICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2
ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhl
IHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlv
biB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRz
OiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAg
ICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFu
ZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3Ry
aW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBl
cyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFu
ZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFy
YW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBv
ZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRo
ZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxs
ZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBk
YXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBh
biBldmVudCBvY2N1cnMuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogeyBba2V5OiBzdHJpbmdd
OiBhbnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nLCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG5cbiAg
ICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBET00g
aXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGFmdGVyIHRoZSBET00gaXMgcmVhZHkuXG4gICAgICovXG4gICAgcmVhZHko
aGFuZGxlcjogRnVuY3Rpb24pOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcInJlc2l6ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgcmVzaXplKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
cmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICByZXNpemUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBw
YXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHJlc2l6ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJzY3JvbGxcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNj
cm9sbCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzY3JvbGwoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwic2VsZWN0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBzZWxlY3QoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInN1Ym1pdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgc3VibWl0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgdHJpZ2dlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6
IEpRdWVyeTtcbiAgICB0cmlnZ2VyKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCk6IEpRdWVyeTtc
blxuICAgIHRyaWdnZXJIYW5kbGVyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRl
cnM6IGFueVtdKTogT2JqZWN0O1xuXG4gICAgdW5iaW5kKGV2ZW50VHlwZT86IHN0cmluZywgaGFu
ZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICB1bmJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGZsczogYm9vbGVhbik6IEpRdWVyeTtcbiAg
ICB1bmJpbmQoZXZ0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB1bmRlbGVnYXRlKCk6IEpRdWVyeTtc
biAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRzOiBhbnkpOiBKUXVlcnk7XG4gICAgdW5k
ZWxlZ2F0ZShuYW1lc3BhY2U6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHVubG9hZChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
dW5sb2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGNvbnRl
eHQ6IEVsZW1lbnQ7XG4gICAganF1ZXJ5OiBzdHJpbmc7XG5cbiAgICBlcnJvcihoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZXJy
b3IoZXZlbnREYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10pOiBK
UXVlcnk7XG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSwgbmFtZTogYW55LCBhcmd1bWVu
dHM6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1hbmlwdWxhdGlvblxuICAgIGFmdGVyKC4uLmNv
bnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFmdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmQoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4g
ICAgYXBwZW5kKGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIGFwcGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgYmVmb3JlKC4uLmNv
bnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGJlZm9yZShmdW5jOiAoaW5kZXg6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvbmUod2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuLCBk
ZWVwV2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgZGV0YWNoKHNl
bGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZW1wdHkoKTogSlF1ZXJ5O1xuXG4gICAgaW5z
ZXJ0QWZ0ZXIodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG4gICAgaW5zZXJ0QmVmb3JlKHRhcmdldDog
YW55KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtc
biAgICBwcmVwZW5kKGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIHByZXBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZShz
ZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIHJlcGxhY2VBbGwodGFyZ2V0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICByZXBsYWNlV2l0aChmdW5jOiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0ZXh0
KCk6IHN0cmluZztcbiAgICB0ZXh0KHRleHRTdHJpbmc6IGFueSk6IEpRdWVyeTtcbiAgICB0ZXh0
KHRleHRTdHJpbmc6IChpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHRvQXJyYXkoKTogYW55W107XG5cbiAgICB1bndyYXAoKTogSlF1ZXJ5O1xu
XG4gICAgd3JhcCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwKGZ1bmM6
IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwQWxsKHdyYXBwaW5nRWxl
bWVudDogYW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcElubmVyKHdyYXBwaW5nRWxlbWVudDogYW55
KTogSlF1ZXJ5O1xuICAgIHdyYXBJbm5lcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGVhY2goZnVuYzogKGluZGV4OiBhbnks
IGVsZW06IEVsZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGdldChpbmRleD86IG51bWJl
cik6IGFueTtcblxuICAgIGluZGV4KCk6IG51bWJlcjtcbiAgICBpbmRleChzZWxlY3Rvcjogc3Ry
aW5nKTogbnVtYmVyO1xuICAgIGluZGV4KGVsZW1lbnQ6IGFueSk6IG51bWJlcjtcblxuICAgIC8v
IFByb3BlcnRpZXNcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xu
ICAgIFt4OiBzdHJpbmddOiBhbnk7XG4gICAgW3g6IG51bWJlcl06IEhUTUxFbGVtZW50O1xuXG4g
ICAgLy8gVHJhdmVyc2luZ1xuICAgIGFkZChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55
KTogSlF1ZXJ5O1xuICAgIGFkZCguLi5lbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgYWRk
KGh0bWw6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5c
biAgICBjaGlsZHJlbihzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb3Nlc3Qoc2Vs
ZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcsIGNv
bnRleHQ/OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qob2JqOiBKUXVlcnkpOiBKUXVl
cnk7XG4gICAgY2xvc2VzdChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxl
Y3RvcnM6IGFueSwgY29udGV4dD86IEVsZW1lbnQpOiBhbnlbXTtcblxuICAgIGNvbnRlbnRzKCk6
IEpRdWVyeTtcblxuICAgIGVuZCgpOiBKUXVlcnk7XG5cbiAgICBlcShpbmRleDogbnVtYmVyKTog
SlF1ZXJ5O1xuXG4gICAgZmlsdGVyKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmls
dGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGVsZW1l
bnQ6IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAg
ICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmluZChlbGVtZW50OiBhbnkp
OiBKUXVlcnk7XG4gICAgZmluZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpcnN0KCk6
IEpRdWVyeTtcblxuICAgIGhhcyhzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhhcyhj
b250YWluZWQ6IEVsZW1lbnQpOiBKUXVlcnk7XG5cbiAgICBpcyhzZWxlY3Rvcjogc3RyaW5nKTog
Ym9vbGVhbjtcbiAgICBpcyhmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogYm9vbGVhbjtcbiAg
ICBpcyhlbGVtZW50OiBhbnkpOiBib29sZWFuO1xuICAgIGlzKG9iajogSlF1ZXJ5KTogYm9vbGVh
bjtcblxuICAgIGxhc3QoKTogSlF1ZXJ5O1xuXG4gICAgbWFwKGNhbGxiYWNrOiAoaW5kZXg6IGFu
eSwgZG9tRWxlbWVudDogRWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbmV4dChzZWxl
Y3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5leHRBbGwoc2VsZWN0b3I/OiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICBuZXh0VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBz
dHJpbmcpOiBKUXVlcnk7XG5cbiAgICBub3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBub3QoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBub3QoZWxlbWVu
dDogYW55KTogSlF1ZXJ5O1xuICAgIG5vdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIG9m
ZnNldFBhcmVudCgpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnQoc2VsZWN0b3I/OiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICBwYXJlbnRzKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
cGFyZW50c1VudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgcGFyZW50c1VudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgcGFyZW50c1VudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgcHJldihzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHBy
ZXZBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2VW50aWwoc2VsZWN0
b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwoZWxl
bWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwo
b2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzaWJsaW5ncyhz
ZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVu
ZD86IG51bWJlcik6IEpRdWVyeTtcblxuICAgIC8vIFV0aWxpdGllc1xuXG4gICAgcXVldWUocXVl
dWVOYW1lPzogc3RyaW5nKTogYW55W107XG4gICAgcXVldWUocXVldWVOYW1lOiBzdHJpbmcsIG5l
d1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1ZXVlT3JDYWxs
YmFjazogYW55KTogSlF1ZXJ5O1xufVxuZGVjbGFyZSBtb2R1bGUgXCJqcXVlcnlcIiB7XG4gICAg
ZXhwb3J0ID0gJDtcbn1cbmRlY2xhcmUgdmFyIGpRdWVyeTogSlF1ZXJ5U3RhdGljO1xuZGVjbGFy
ZSB2YXIgJDogSlF1ZXJ5U3RhdGljO1xuLy8gbGlicy9hbmd1bGFyL2FuZ3VsYXIuZC50c1xuLy8g
VHlwZSBkZWZpbml0aW9ucyBmb3IgQW5ndWxhciBKUyAxLjBcbi8vIFByb2plY3Q6IGh0dHA6Ly9h
bmd1bGFyanMub3JnXG4vLyBEZWZpbml0aW9ucyBieTogRGllZ28gVmlsYXIgPGh0dHA6Ly9naXRo
dWIuY29tL2RpZWdvdmlsYXI+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2Jv
cmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG5cblxuZGVjbGFyZSB2YXIgYW5ndWxhcjogbmcu
SUFuZ3VsYXJTdGF0aWM7XG5cbi8vIFN1cHBvcnQgZm9yIHBhaW5sZXNzIGRlcGVuZGVuY3kgaW5q
ZWN0aW9uXG5pbnRlcmZhY2UgRnVuY3Rpb24ge1xuICAgICRpbmplY3Q6c3RyaW5nW107XG59XG5c
bi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG5nIG1vZHVsZSAoYW5ndWxhci5qcylcbi8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbmRlY2xhcmUgbW9kdWxlIG5nIHtcblxuICAgIC8vIEFsbCBzZXJ2
aWNlIHByb3ZpZGVycyBleHRlbmQgdGhpcyBpbnRlcmZhY2VcbiAgICBpbnRlcmZhY2UgSVNlcnZp
Y2VQcm92aWRlciB7XG4gICAgICAgICRnZXQ6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBBbmd1bGFyU3RhdGljXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElB
bmd1bGFyU3RhdGljIHtcbiAgICAgICAgYmluZChjb250ZXh0OiBhbnksIGZuOiBGdW5jdGlvbiwg
Li4uYXJnczogYW55W10pOiBGdW5jdGlvbjtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IHN0
cmluZywgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBi
b290c3RyYXAoZWxlbWVudDogSlF1ZXJ5LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3Rv
clNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBFbGVtZW50LCBtb2R1bGVzPzog
YW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50
OiBEb2N1bWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAg
ICAgICBjb3B5KHNvdXJjZTogYW55LCBkZXN0aW5hdGlvbj86IGFueSk6IGFueTtcbiAgICAgICAg
ZWxlbWVudDogSUF1Z21lbnRlZEpRdWVyeVN0YXRpYztcbiAgICAgICAgZXF1YWxzKHZhbHVlMTog
YW55LCB2YWx1ZTI6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGV4dGVuZChkZXN0aW5hdGlvbjog
YW55LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueTtcbiAgICAgICAgZm9yRWFjaChvYmo6IGFueSwg
aXRlcmF0b3I6ICh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4gYW55LCBjb250ZXh0PzogYW55KTog
YW55O1xuICAgICAgICBmcm9tSnNvbihqc29uOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlkZW50
aXR5KGFyZz86IGFueSk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IobW9kdWxlcz86IGFueVtdKTog
YXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29s
ZWFuO1xuICAgICAgICBpc0RhdGUodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGVm
aW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNFbGVtZW50KHZhbHVlOiBhbnkp
OiBib29sZWFuO1xuICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAg
ICAgICBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNPYmplY3QodmFs
dWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFu
O1xuICAgICAgICBpc1VuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgbG93
ZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICAvKiogY29uc3RydWN0IHlvdXIg
YW5ndWxhciBhcHBsaWNhdGlvblxuXHRcdG9mZmljaWFsIGRvY3M6IEludGVyZmFjZSBmb3IgY29u
ZmlndXJpbmcgYW5ndWxhciBtb2R1bGVzLlxuXHRcdHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcblx0XHQqL1xuICAgICAgICBtb2R1bGUoXG4gICAgICAg
ICAgICAvKiogbmFtZSBvZiB5b3VyIG1vZHVsZSB5b3Ugd2FudCB0byBjcmVhdGUgKi9cbiAgICAg
ICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgIC8qKiBuYW1lIG9mIG1vZHVsZXMgeW91
cnMgZGVwZW5kcyBvbiAqL1xuICAgICAgICAgICAgcmVxdWlyZXM/OiBzdHJpbmdbXSxcbiAgICAg
ICAgICAgIGNvbmZpZ0Z1bmN0aW9uPzogYW55KTogSU1vZHVsZTtcbiAgICAgICAgbm9vcCguLi5h
cmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHRvSnNvbihvYmo6IGFueSwgcHJldHR5PzogYm9v
bGVhbik6IHN0cmluZztcbiAgICAgICAgdXBwZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xu
ICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAg
ICBtYWpvcjogbnVtYmVyO1xuICAgICAgICAgICAgbWlub3I6IG51bWJlcjtcbiAgICAgICAgICAg
IGRvdDogbnVtYmVyO1xuICAgICAgICAgICAgY29kZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBNb2R1bGVcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU1vZHVsZSB7XG4gICAgICAgIGFuaW1hdGlv
bihuYW1lOiBzdHJpbmcsIGFuaW1hdGlvbkZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAg
ICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFu
eVtdKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG9iamVjdDogT2JqZWN0KTogSU1vZHVs
ZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhp
cyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24g
bW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGNvbmZpZ0ZuOiBGdW5jdGlv
bik6IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5c
dFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVy
Zm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhpbmxpbmVB
bm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChuYW1l
OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChvYmplY3Q6
IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBjb250
cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxl
cihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1
bGU7XG4gICAgICAgIGNvbnRyb2xsZXIob2JqZWN0IDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAg
ICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJ
TW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRG
dW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUob2JqZWN0OiBPYmpl
Y3QpOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3Rv
cnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0
cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAg
ZmFjdG9yeShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBz
dHJpbmcsIGZpbHRlckZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAg
ICBmaWx0ZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJ
TW9kdWxlO1xuICAgICAgICBmaWx0ZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAg
ICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5j
dGlvbik6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5u
b3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIob2Jq
ZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5pdGlhbGl6YXRpb25GdW5jdGlv
bjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5saW5lQW5ub3RhZGVkRnVuY3Rp
b246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIHNlcnZp
Y2VDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6
IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAg
ICAgICAgc2VydmljZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG5h
bWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG9iamVjdDog
T2JqZWN0KTogSU1vZHVsZTtcblxuICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIG5hbWU6
IHN0cmluZztcbiAgICAgICAgcmVxdWlyZXM6IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXNcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF0dHJpYnV0ZXMge1xuXHQvLyB0aGlz
IGlzIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgc2NvcGVkIGF0dHJpYnV0ZXMu
IGl0J3Mgbm90IHZlcnkgZWxlZ2FudFxuXHQvLyBiZWNhdXNlIHlvdSBoYXZlIHRvIHVzZSBhdHRy
c1snZm9vJ10gaW5zdGVhZCBvZiBhdHRycy5mb28gYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGJldHRl
ciB3YXlcblx0Ly8gdGhpcyBzaG91bGQgcmVhbGx5IGJlIGxpbWl0ZWQgdG8gcmV0dXJuIHN0cmlu
ZyBidXQgaXQgY3JlYXRlcyB0aGlzIHByb2JsZW06IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9x
LzE3MjAxODU0LzE2NTY1NlxuXHRbbmFtZTogc3RyaW5nXTogYW55O1xuXG4gICAgICAgIC8vIEFk
ZHMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRl
ciB0byB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0
aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZFxuICAgICAgICAvLyBmb3IgdGhlIGNs
YXNzIGFkZGl0aW9uLlxuICAgICAgICAkYWRkQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7
XG5cbiAgICAgICAgLy8gUmVtb3ZlcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0
aGUgY2xhc3NWYWwgcGFyYW1ldGVyIGZyb20gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFu
aW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQg
Zm9yXG4gICAgICAgIC8vIHRoZSBjbGFzcyByZW1vdmFsLlxuICAgICAgICAkcmVtb3ZlQ2xhc3Mo
Y2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gU2V0IERPTSBlbGVtZW50IGF0
dHJpYnV0ZSB2YWx1ZS5cbiAgICAgICAgJHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZv
aWQ7XG5cbiAgICAgICAgLy8gT2JzZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAg
ICAgICAgLy8gVGhlIG9ic2VydmVyIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGR1cmlu
ZyB0aGUgbmV4dCAkZGlnZXN0XG4gICAgICAgIC8vIGZvbGxvd2luZyBjb21waWxhdGlvbi4gVGhl
IG9ic2VydmVyIGlzIHRoZW4gaW52b2tlZCB3aGVuZXZlciB0aGVcbiAgICAgICAgLy8gaW50ZXJw
b2xhdGVkIHZhbHVlIGNoYW5nZXMuXG4gICAgICAgICRvYnNlcnZlKG5hbWU6IHN0cmluZywgZm46
KHZhbHVlPzphbnkpPT5hbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAvLyBBIG1hcCBvZiBET00g
ZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpcyBu
ZWVkZWRcbiAgICAgICAgLy8gdG8gZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5h
bWUgYmFjayB0byBhY3R1YWwgbmFtZS5cbiAgICAgICAgJGF0dHI6IE9iamVjdDtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGb3JtQ29udHJvbGxlclxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6Zm9ybS5Gb3JtQ29u
dHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRm9ybUNvbnRy
b2xsZXIge1xuICAgICAgICAkcHJpc3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9v
bGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVh
bjtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAgICAgICRhZGRDb250cm9sKGNvbnRyb2w6IG5n
LklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRyZW1vdmVDb250cm9sKGNvbnRy
b2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRzZXREaXJ0eSgpOiB2
b2lkO1xuICAgICAgICAkc2V0UHJpc3RpbmUoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBOZ01vZGVsQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJv
bGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTmdNb2RlbENvbnRy
b2xsZXIge1xuICAgICAgICAkcmVuZGVyKCk6IHZvaWQ7XG4gICAgICAgICRzZXRWYWxpZGl0eSh2
YWxpZGF0aW9uRXJyb3JLZXk6IHN0cmluZywgaXNWYWxpZDogYm9vbGVhbik6IHZvaWQ7XG4gICAg
ICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHZpZXdWYWx1ZSBhbmQgbW9kZWxWYWx1ZSB0byBi
ZSBhIHN0cmluZyBidXQgb3RoZXJcbiAgICAgICAgLy8gdHlwZXMgZG8gd29yayBhbmQgaXQncyBj
b21tb24gdG8gdXNlIHRoZW0uXG4gICAgICAgICRzZXRWaWV3VmFsdWUodmFsdWU6IGFueSk6IHZv
aWQ7XG4gICAgICAgICR2aWV3VmFsdWU6IGFueTtcblxuICAgICAgICAkbW9kZWxWYWx1ZTogYW55
O1xuXG4gICAgICAgICRwYXJzZXJzOiBJTW9kZWxQYXJzZXJbXTtcbiAgICAgICAgJGZvcm1hdHRl
cnM6IElNb2RlbEZvcm1hdHRlcltdO1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJHBy
aXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxp
ZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElNb2RlbFBhcnNlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJTW9kZWxGb3JtYXR0ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6
IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTY29wZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlLlNjb3Bl
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTY29wZSB7XG4gICAgICAg
ICRhcHBseSgpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IHN0cmluZyk6IGFueTtcbiAgICAg
ICAgJGFwcGx5KGV4cDogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IGFueTtcblxuICAgICAgICAk
YnJvYWRjYXN0KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xu
ICAgICAgICAkZGVzdHJveSgpOiB2b2lkO1xuICAgICAgICAkZGlnZXN0KCk6IHZvaWQ7XG4gICAg
ICAgICRlbWl0KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xu
XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1
YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjog
c3RyaW5nLCBhcmdzPzogT2JqZWN0KTogYW55O1xuICAgICAgICAkZXZhbChleHByZXNzaW9uOiAo
c2NvcGU6IElTY29wZSkgPT4gYW55LCBhcmdzPzogT2JqZWN0KTogYW55O1xuXG4gICAgICAgIC8v
IERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50
YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiBzdHJpbmcp
OiB2b2lkO1xuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9
PiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlIGJ5IHRoZSBpbXBs
ZW1lbnRhdGlvbiBjaGVja2luZyBzdHJhdGVneVxuICAgICAgICAkbmV3KGlzb2xhdGU/OiBib29s
ZWFuKTogSVNjb3BlO1xuXG4gICAgICAgICRvbihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZl
bnQ6IElBbmd1bGFyRXZlbnQsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxu
ICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogc3RyaW5n
LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdh
dGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1
ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6
IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29w
ZSkgPT4gYW55LCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTog
RnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3Bl
KSA9PiBhbnksIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3Bl
OiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG5c
biAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVu
ZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkp
OiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IChz
Y29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6
IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHBhcmVu
dDogSVNjb3BlO1xuXG4gICAgICAgICRpZDogbnVtYmVyO1xuXG4gICAgICAgIC8vIEhpZGRlbiBt
ZW1iZXJzXG4gICAgICAgICQkaXNvbGF0ZUJpbmRpbmdzOiBhbnk7XG4gICAgICAgICQkcGhhc2U6
IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJFdmVudCB7XG4gICAgICAgIHRh
cmdldFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIGN1cnJlbnRTY29wZTogSVNjb3BlO1xuICAgICAg
ICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiBGdW5jdGlvbjtcbiAgICAg
ICAgZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgICAgICAvLyBBdmFpbGFibGUgb25s
eSBldmVudHMgdGhhdCB3ZXJlICRlbWl0LXRlZFxuICAgICAgICBzdG9wUHJvcGFnYXRpb24/OiBG
dW5jdGlvbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBXaW5kb3dT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR3aW5k
b3dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVdpbmRvd1NlcnZpY2Ug
ZXh0ZW5kcyBXaW5kb3cge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEJyb3dz
ZXJTZXJ2aWNlXG4gICAgLy8gVE9ETyB1bmRvY3VtZW50ZWQsIHNvIHdlIG5lZWQgdG8gZ2V0IGl0
IGZyb20gdGhlIHNvdXJjZSBjb2RlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElCcm93c2VyU2VydmljZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
VGltZW91dFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJHRpbWVvdXRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRpbWVv
dXRTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheT86IG51bWJlciwgaW52
b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21p
c2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIEludGVydmFsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kaW50ZXJ2YWxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUludGVydmFsU2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVs
YXk6IG51bWJlciwgY291bnQ/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9t
aXNlPGFueT47XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVh
bjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaWx0ZXJTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclByb3ZpZGVy
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJTZXJ2aWNlIHtc
biAgICAgICAgKG5hbWU6IHN0cmluZyk6IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJRmlsdGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVn
aXN0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5OiBGdW5jdGlvbik6IElTZXJ2aWNlUHJv
dmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYWxlU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYWxl
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhbGVTZXJ2aWNlIHtc
biAgICAgICAgaWQ6IHN0cmluZztcblxuICAgICAgICAvLyBUaGVzZSBhcmUgbm90IGRvY3VtZW50
ZWRcbiAgICAgICAgLy8gQ2hlY2sgYW5ndWxhcidzIGkxOG4gZmlsZXMgZm9yIGV4ZW1wbGVzXG4g
ICAgICAgIE5VTUJFUl9GT1JNQVRTOiBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvcjtcbiAg
ICAgICAgREFURVRJTUVfRk9STUFUUzogSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvcjtc
biAgICAgICAgcGx1cmFsQ2F0OiAobnVtOiBhbnkpID0+IHN0cmluZztcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBERUNJTUFM
X1NFUDogc3RyaW5nO1xuICAgICAgICBHUk9VUF9TRVA6IHN0cmluZztcbiAgICAgICAgUEFUVEVS
TlM6IElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvcltdO1xuICAgICAgICBDVVJSRU5DWV9T
WU06IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlclBhdHRlcm5E
ZXNjcmlwdG9yIHtcbiAgICAgICAgbWluSW50OiBudW1iZXI7XG4gICAgICAgIG1pbkZyYWM6IG51
bWJlcjtcbiAgICAgICAgbWF4RnJhYzogbnVtYmVyO1xuICAgICAgICBwb3NQcmU6IHN0cmluZztc
biAgICAgICAgcG9zU3VmOiBzdHJpbmc7XG4gICAgICAgIG5lZ1ByZTogc3RyaW5nO1xuICAgICAg
ICBuZWdTdWY6IHN0cmluZztcbiAgICAgICAgZ1NpemU6IG51bWJlcjtcbiAgICAgICAgbGdTaXpl
OiBudW1iZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVEYXRlVGltZUZvcm1hdERl
c2NyaXB0b3Ige1xuICAgICAgICBNT05USDogc3RyaW5nW107XG4gICAgICAgIFNIT1JUTU9OVEg6
IHN0cmluZ1tdO1xuICAgICAgICBEQVk6IHN0cmluZ1tdO1xuICAgICAgICBTSE9SVERBWTogc3Ry
aW5nW107XG4gICAgICAgIEFNUE1TOiBzdHJpbmdbXTtcbiAgICAgICAgbWVkaXVtOiBzdHJpbmc7
XG4gICAgICAgIHNob3J0OiBzdHJpbmc7XG4gICAgICAgIGZ1bGxEYXRlOiBzdHJpbmc7XG4gICAg
ICAgIGxvbmdEYXRlOiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bURhdGU6IHN0cmluZztcbiAgICAg
ICAgc2hvcnREYXRlOiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bVRpbWU6IHN0cmluZztcbiAgICAg
ICAgc2hvcnRUaW1lOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gTG9nU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kbG9nXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2dTZXJ2
aWNlIHtcbiAgICAgICAgZGVidWc6IElMb2dDYWxsO1xuICAgICAgICBlcnJvcjogSUxvZ0NhbGw7
XG4gICAgICAgIGluZm86IElMb2dDYWxsO1xuICAgICAgICBsb2c6IElMb2dDYWxsO1xuICAgICAg
ICB3YXJuOiBJTG9nQ2FsbDtcbiAgICB9XG5cbiAgICAvLyBXZSBkZWZpbmUgdGhpcyBhcyBzZXBh
cmV0ZSBpbnRlcmZhY2Ugc28gd2UgY2FuIHJlb3BlbiBpdCBsYXRlciBmb3JcbiAgICAvLyB0aGUg
bmdNb2NrIG1vZHVsZS5cbiAgICBpbnRlcmZhY2UgSUxvZ0NhbGwge1xuICAgICAgICAoLi4uYXJn
czogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IFBhcnNlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kcGFyc2VcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVBhcnNlU2Vy
dmljZSB7XG4gICAgICAgIChleHByZXNzaW9uOiBzdHJpbmcpOiBJQ29tcGlsZWRFeHByZXNzaW9u
O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZWRFeHByZXNzaW9uIHtcbiAgICAgICAg
KGNvbnRleHQ6IGFueSwgbG9jYWxzPzogYW55KTogYW55O1xuXG4gICAgICAgIC8vIElmIHZhbHVl
IGlzIG5vdCBwcm92aWRlZCwgdW5kZWZpbmVkIGlzIGdvbm5hIGJlIHVzZWQgc2luY2UgdGhlIGlt
cGxlbWVudGF0aW9uXG4gICAgICAgIC8vIGRvZXMgbm90IGNoZWNrIHRoZSBwYXJhbWV0ZXIuIExl
dCdzIGZvcmNlIGEgdmFsdWUgZm9yIGNvbnNpc3RlbmN5LiBJZiBjb25zdW1lclxuICAgICAgICAv
LyB3aGFudHMgdG8gdW5kZWZpbmUgaXQsIHBhc3MgdGhlIHVuZGVmaW5lZCB2YWx1ZSBleHBsaWNp
dGx5LlxuICAgICAgICBhc3NpZ24oY29udGV4dDogYW55LCB2YWx1ZTogYW55KTogYW55O1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvY2F0aW9uU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25cbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9uUHJvdmlkZXJc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kZXZfZ3VpZGUuc2Vy
dmljZXMuJGxvY2F0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElM
b2NhdGlvblNlcnZpY2Uge1xuICAgICAgICBhYnNVcmwoKTogc3RyaW5nO1xuICAgICAgICBoYXNo
KCk6IHN0cmluZztcbiAgICAgICAgaGFzaChuZXdIYXNoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2
aWNlO1xuICAgICAgICBob3N0KCk6IHN0cmluZztcbiAgICAgICAgcGF0aCgpOiBzdHJpbmc7XG4g
ICAgICAgIHBhdGgobmV3UGF0aDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAg
cG9ydCgpOiBudW1iZXI7XG4gICAgICAgIHByb3RvY29sKCk6IHN0cmluZztcbiAgICAgICAgcmVw
bGFjZSgpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2goKTogYW55O1xuICAgICAg
ICBzZWFyY2gocGFyYW1ldGVyc01hcDogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAg
c2VhcmNoKHBhcmFtZXRlcjogc3RyaW5nLCBwYXJhbWV0ZXJWYWx1ZTogYW55KTogSUxvY2F0aW9u
U2VydmljZTtcbiAgICAgICAgdXJsKCk6IHN0cmluZztcbiAgICAgICAgdXJsKHVybDogc3RyaW5n
KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uUHJv
dmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgaGFzaFByZWZpeCgpOiBz
dHJpbmc7XG4gICAgICAgIGhhc2hQcmVmaXgocHJlZml4OiBzdHJpbmcpOiBJTG9jYXRpb25Qcm92
aWRlcjtcbiAgICAgICAgaHRtbDVNb2RlKCk6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gRG9jdW1l
bnRhdGlvbiBzdGF0ZXMgdGhhdCBwYXJhbWV0ZXIgaXMgc3RyaW5nLCBidXRcbiAgICAgICAgLy8g
aW1wbGVtZW50YXRpb24gdGVzdHMgaXQgYXMgYm9vbGVhbiwgd2hpY2ggbWFrZXMgbW9yZSBzZW5z
ZVxuICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIGEgdG9nZ2xlclxuICAgICAgICBodG1sNU1vZGUo
YWN0aXZlOiBib29sZWFuKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gRG9jdW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRkb2N1bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJRG9jdW1lbnRTZXJ2aWNlIGV4dGVuZHMgRG9jdW1lbnQge31cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRleGNlcHRpb25IYW5k
bGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElFeGNlcHRpb25IYW5k
bGVyU2VydmljZSB7XG4gICAgICAgIChleGNlcHRpb246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6
IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdEVsZW1l
bnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRy
b290RWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdEVs
ZW1lbnRTZXJ2aWNlIGV4dGVuZHMgSlF1ZXJ5IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBRU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kcVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUVNlcnZpY2Ug
e1xuICAgICAgICBhbGwocHJvbWlzZXM6IElQcm9taXNlPGFueT5bXSk6IElQcm9taXNlPGFueVtd
PjtcbiAgICAgICAgZGVmZXI8VD4oKTogSURlZmVycmVkPFQ+O1xuICAgICAgICByZWplY3QocmVh
c29uPzogYW55KTogSVByb21pc2U8dm9pZD47XG4gICAgICAgIHdoZW48VD4odmFsdWU6IFQpOiBJ
UHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVByb21pc2U8VD4ge1xuICAgICAg
ICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSUh0
dHBQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnks
IG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+
O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTog
VCkgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+
IGFueSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJl
c3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZh
bHVlOiBUKSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBUUmVz
dWx0LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVz
dWx0PjtcblxuXG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFu
eSkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAg
IGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSVByb21pc2U8VFJl
c3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWpl
Y3RlZDogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0KTogSVByb21pc2U8VFJlc3VsdD47XG5cbiAg
ICAgICAgZmluYWxseTxUUmVzdWx0PihmaW5hbGx5Q2FsbGJhY2s6ICgpPT5hbnkpOklQcm9taXNl
PFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRGVmZXJyZWQ8VD4ge1xuICAgICAg
ICByZXNvbHZlKHZhbHVlPzogVCk6IHZvaWQ7XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkp
OiB2b2lkO1xuICAgICAgICBub3RpZnkoc3RhdGU/OmFueSk6IHZvaWQ7XG4gICAgICAgIHByb21p
c2U6IElQcm9taXNlPFQ+O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IEFuY2hvclNjcm9sbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGFuY2hvclNjcm9sbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJQW5jaG9yU2Nyb2xsU2VydmljZSB7XG4gICAgICAgICgpOiB2b2lkO1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgZGlzYWJsZUF1dG9TY3JvbGxpbmcoKTogdm9pZDtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDYWNoZUZhY3RvcnlTZXJ2aWNlXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjYWNoZUZhY3RvcnlcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNhY2hlRmFjdG9yeVNlcnZpY2Uge1xu
ICAgICAgICAvLyBMZXRzIG5vdCBmb2NlIHRoZSBvcHRpb25zTWFwIHRvIGhhdmUgdGhlIGNhcGFj
aXR5IG1lbWJlci4gRXZlbiB0aG91Z2hcbiAgICAgICAgLy8gaXQncyB0aGUgT05MWSBvcHRpb24g
Y29uc2lkZXJlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gdG9kYXksIGEgY29uc3VtZXJcbiAgICAg
ICAgLy8gbWlnaHQgZmluZCBpdCB1c2VmdWwgdG8gYXNzb2NpYXRlIHNvbWUgb3RoZXIgb3B0aW9u
cyB0byB0aGUgY2FjaGUgb2JqZWN0LlxuICAgICAgICAvLyhjYWNoZUlkOiBzdHJpbmcsIG9wdGlv
bnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0pOiBDYWNoZU9iamVjdDtcbiAgICAgICAgKGNh
Y2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IElDYWNo
ZU9iamVjdDtcblxuICAgICAgICAvLyBNZXRob2RzIGJlbGxvdyBhcmUgbm90IGRvY3VtZW50ZWRc
biAgICAgICAgaW5mbygpOiBhbnk7XG4gICAgICAgIGdldCAoY2FjaGVJZDogc3RyaW5nKTogSUNh
Y2hlT2JqZWN0O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ2FjaGVPYmplY3Qge1xuICAgICAg
ICBpbmZvKCk6IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBzaXplOiBu
dW1iZXI7XG5cbiAgICAgICAgICAgIC8vIE5vdCBnYXJhbnRlZWQgdG8gaGF2ZSwgc2luY2UgaXQn
cyBhIG5vbi1tYW5kYXRvcnkgb3B0aW9uXG4gICAgICAgICAgICAvL2NhcGFjaXR5OiBudW1iZXI7
XG4gICAgICAgIH07XG4gICAgICAgIHB1dChrZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lk
O1xuICAgICAgICBnZXQgKGtleTogc3RyaW5nKTogYW55O1xuICAgICAgICByZW1vdmUoa2V5OiBz
dHJpbmcpOiB2b2lkO1xuICAgICAgICByZW1vdmVBbGwoKTogdm9pZDtcbiAgICAgICAgZGVzdHJv
eSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbXBp
bGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRj
b21waWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21w
aWxlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbXBp
bGVTZXJ2aWNlIHtcbiAgICAgICAgKGVsZW1lbnQ6IHN0cmluZywgdHJhbnNjbHVkZT86IElUZW1w
bGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5r
aW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50LCB0cmFuc2NsdWRlPzogSVRl
bXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxp
bmtpbmdGdW5jdGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEpRdWVyeSwgdHJhbnNjbHVkZT86IElU
ZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVM
aW5raW5nRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlUHJvdmlkZXIg
ZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmlu
ZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJQ29tcGlsZVByb3ZpZGVyO1xuXG4gICAg
ICAgIC8vIFVuZG9jdW1lbnRlZCwgYnV0IGl0IGlzIHRoZXJlLi4uXG4gICAgICAgIGRpcmVjdGl2
ZShkaXJlY3RpdmVzTWFwOiBhbnkpOiBJQ29tcGlsZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGlu
dGVyZmFjZSBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24ge1xuICAgICAgICAvLyBMZXQncyBoaW50
IGJ1dCBub3QgZm9yY2UgY2xvbmVBdHRhY2hGbidzIHNpZ25hdHVyZVxuICAgICAgICAoc2NvcGU6
IElTY29wZSwgY2xvbmVBdHRhY2hGbj86IChjbG9uZWRFbGVtZW50PzogSlF1ZXJ5LCBzY29wZT86
IElTY29wZSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIENvbnRyb2xsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJTZXJ2aWNlIHtcbiAgICAgICAgLy8gQWx0aG91
Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBzdGF0ZSB0aGlzLCBsb2NhbHMgYXJlIG9wdGlv
bmFsXG4gICAgICAgIChjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBh
bnkpOiBhbnk7XG4gICAgICAgIChjb250cm9sbGVyTmFtZTogc3RyaW5nLCBsb2NhbHM/OiBhbnkp
OiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyUHJvdmlkZXIgZXh0ZW5k
cyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb250
cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgcmVnaXN0ZXIobmFt
ZTogc3RyaW5nLCBkZXBlbmRlbmN5QW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogdm9pZDtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cFxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cFNlcnZpY2Uge1xuICAgICAgICAvLyBB
dCBsZWFzdCBtb2V0aG9kIGFuZCB1cmwgbXVzdCBiZSBwcm92aWRlZC4uLlxuICAgICAgICAoY29u
ZmlnOiBJUmVxdWVzdENvbmZpZyk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBnZXQgKHVy
bDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAg
ICAgIGRlbGV0ZSAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21p
c2U8YW55PjtcbiAgICAgICAgaGVhZCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6
IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBqc29ucCh1cmw6IHN0cmluZywgUmVxdWVzdENv
bmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwb3N0KHVybDogc3RyaW5n
LCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAg
ICAgICAgcHV0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJ
SHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuXG4g
ICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcsIEJVVCBpdCBpcyBkb2N1bWVudGVkIGFzIHB1YmxpYywg
c28uLi5cbiAgICAgICAgcGVuZGluZ1JlcXVlc3RzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBU
aGlzIGlzIGp1c3QgZm9yIGhpbnRpbmcuXG4gICAgLy8gU29tZSBvcGV0aW9ucyBtaWdodCBub3Qg
YmUgYXZhaWxhYmxlIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdC5cbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHAjVXNhZ2UgZm9yIG9wdGlvbnMgZXhwbGFu
YXRpb25zXG4gICAgaW50ZXJmYWNlIElSZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAgbWV0aG9kOiBz
dHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBwYXJhbXM/OiBhbnk7XG5cbiAg
ICAgICAgLy8gWFhYIGl0IGhhcyBpdCdzIG93biBzdHJ1Y3R1cmUuLi4gIHBlcmhhcHMgd2Ugc2hv
dWxkIGRlZmluZSBpdCBpbiB0aGUgZnV0dXJlXG4gICAgICAgIGhlYWRlcnM/OiBhbnk7XG5cbiAg
ICAgICAgY2FjaGU/OiBhbnk7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5c
biAgICAgICAgLy8gVGhlc2UgYWNjZXB0IG11bHRpcGxlIHR5cGVzLCBzbyBsZXQncyBkZWZpbmUg
dGhlbSBhcyBhbnlcbiAgICAgICAgZGF0YT86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVz
dD86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U/OiBhbnk7XG4gICAgICAgIHRpbWVv
dXQ/OiBhbnk7IC8vIG51bWJlciB8IHByb21pc2VcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0
dHBQcm9taXNlQ2FsbGJhY2s8VD4ge1xuICAgICAgICAoZGF0YTogVCwgc3RhdHVzOiBudW1iZXIs
IGhlYWRlcnM6IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZywgY29uZmlnOiBJUmVxdWVz
dENvbmZpZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxi
YWNrQXJnPFQ+IHtcbiAgICAgICAgZGF0YT86IFQ7XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtc
biAgICAgICAgaGVhZGVycz86IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAg
ICAgY29uZmlnPzogSVJlcXVlc3RDb25maWc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRw
UHJvbWlzZTxUPiBleHRlbmRzIElQcm9taXNlPFQ+IHtcbiAgICAgICAgc3VjY2VzcyhjYWxsYmFj
azogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIGVy
cm9yKGNhbGxiYWNrOiBJSHR0cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtc
biAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQ
cm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9u
c2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0
PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0
dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxi
YWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVBy
b21pc2U8VFJlc3VsdD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvdmlkZXIgZXh0
ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmln
O1xuICAgICAgICBpbnRlcmNlcHRvcnM6IGFueVtdO1xuICAgICAgICByZXNwb25zZUludGVyY2Vw
dG9yczogYW55W107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0
cEJhY2tlbmRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRodHRwQmFja2VuZFxuICAgIC8vIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhp
cyBzZXJ2aWNlIGRpcmVjdGx5LlxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJSHR0cEJhY2tlbmRTZXJ2aWNlIHtcbiAgICAgICAgLy8gWFhYIFBlcmhhcHMgZGVmaW5lIGNh
bGxiYWNrIHNpZ25hdHVyZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgIChtZXRob2Q6IHN0cmluZywg
dXJsOiBzdHJpbmcsIHBvc3Q/OiBhbnksIGNhbGxiYWNrPzogRnVuY3Rpb24sIGhlYWRlcnM/OiBh
bnksIHRpbWVvdXQ/OiBudW1iZXIsIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW4pOiB2b2lkO1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVycG9sYXRlU2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xh
dGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9s
YXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVy
cG9sYXRlU2VydmljZSB7XG4gICAgICAgICh0ZXh0OiBzdHJpbmcsIG11c3RIYXZlRXhwcmVzc2lv
bj86IGJvb2xlYW4pOiBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uO1xuICAgICAgICBlbmRTeW1ib2wo
KTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElJbnRlcnBvbGF0aW9uRnVuY3Rpb24ge1xuICAgICAgICAoY29udGV4dDogYW55
KTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVQcm92aWRlciBl
eHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7
XG4gICAgICAgIHN0YXJ0U3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRl
cjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgZW5kU3ltYm9sKHZhbHVl
OiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBUZW1wbGF0ZUNhY2hlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGVtcGxhdGVDYWNoZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJVGVtcGxhdGVDYWNoZVNlcnZpY2UgZXh0ZW5kcyBJQ2Fj
aGVPYmplY3Qge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJvb3RTY29wZVNl
cnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RT
Y29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdFNjb3BlU2Vy
dmljZSBleHRlbmRzIElTY29wZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
U0NFU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
c2NlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdGludGVyZmFjZSBJU0NFU2VydmljZSB7XG5c
dFx0Z2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuXHRc
dGdldFRydXN0ZWRDc3ModmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSHRtbCh2YWx1
ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdl
dFRydXN0ZWRSZXNvdXJjZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRVcmwo
dmFsdWU6IGFueSk6IGFueTtcblx0XHRwYXJzZSh0eXBlOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0
cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0Nz
cyhleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55
O1xuXHRcdHBhcnNlQXNIdG1sKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxv
Y2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0pzKGV4cHJlc3Npb246IHN0cmluZyk6IChj
b250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Jlc291cmNlVXJs
KGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7
XG5cdFx0cGFyc2VBc1VybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2Nh
bHM6IGFueSkgPT4gYW55O1xuXHRcdHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTog
YW55O1xuXHRcdHRydXN0QXNIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0pzKHZh
bHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1Jlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7
XG5cdFx0dHJ1c3RBc1VybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGlzRW5hYmxlZCgpOiBib29s
ZWFuO1xuXHR9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VQcm92aWRlclxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlUHJvdmlkZXJc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRVByb3ZpZGVyIGV4dGVu
ZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2
b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRl
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2Nl
RGVsZWdhdGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVn
YXRlU2VydmljZSB7XG4gICAgICAgIGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0
ZWQ6IGFueSk6IGFueTtcbiAgICAgICAgdHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiBhbnk7XG4gICAgICAgIHZhbHVlT2YodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlUHJvdmlkZXJc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlUHJvdmlk
ZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVzb3VyY2VVcmxCbG9ja2xp
c3QoYmxvY2tsaXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHJlc291cmNlVXJsQWxsb3dsaXN0
KGFsbG93bGlzdDogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIERpcmVjdGl2ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZVxuICAgIC8vIGFuZCBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2d1aWRlL2RpcmVjdGl2ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
XG4gICAgaW50ZXJmYWNlIElEaXJlY3RpdmV7XG4gICAgICAgIGNvbXBpbGU/OlxuICAgICAgICAg
ICAgKHRlbXBsYXRlRWxlbWVudDogYW55LFxuICAgICAgICAgICAgdGVtcGxhdGVBdHRyaWJ1dGVz
OiBJQXR0cmlidXRlcyxcbiAgICAgICAgICAgIHRyYW5zY2x1ZGU6IChzY29wZTogSVNjb3BlLCBj
bG9uZUxpbmtpbmdGbjogRnVuY3Rpb24pID0+IHZvaWRcbiAgICAgICAgICAgICkgPT4gYW55O1xu
ICAgICAgICBjb250cm9sbGVyPzogYW55O1xuICAgICAgICBjb250cm9sbGVyQXM/OiBzdHJpbmc7
XG4gICAgICAgIGxpbms/OlxuICAgICAgICAgICAgKHNjb3BlOiBJU2NvcGUsXG4gICAgICAgICAg
ICBpbnN0YW5jZUVsZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIGluc3RhbmNlQXR0cmlidXRlczog
SUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBjb250cm9sbGVyOiBhbnlcbiAgICAgICAgICAgICkg
PT4gdm9pZDtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgcHJpb3JpdHk/OiBudW1i
ZXI7XG4gICAgICAgIHJlcGxhY2U/OiBib29sZWFuO1xuICAgICAgICByZXF1aXJlPzogYW55O1xu
ICAgICAgICByZXN0cmljdD86IHN0cmluZztcbiAgICAgICAgc2NvcGU/OiBhbnk7XG4gICAgICAg
IHRlbXBsYXRlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZVVybD86IGFueTtcbiAgICAgICAgdGVy
bWluYWw/OiBib29sZWFuO1xuICAgICAgICB0cmFuc2NsdWRlPzogYW55O1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFuZ3VsYXIuZWxlbWVudFxuICAgIC8vIHdoZW4g
Y2FsbGluZyBhbmd1bGFyLmVsZW1lbnQsIGFuZ3VsYXIgcmV0dXJucyBhIGpRdWVyeSBvYmplY3Qs
XG4gICAgLy8gYXVnbWVudGVkIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGxpa2UgZS5nLiBzY29w
ZS5cbiAgICAvLyBzZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxl
bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1
ZXJ5U3RhdGljIGV4dGVuZHMgSlF1ZXJ5U3RhdGljIHtcbiAgICAgICAgKHNlbGVjdG9yOiBzdHJp
bmcsIGNvbnRleHQ/OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudDog
RWxlbWVudCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IHt9KTogSUF1Z21l
bnRlZEpRdWVyeTtcbiAgICAgICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSUF1Z21lbnRl
ZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAg
ICAgICAgKGZ1bmM6IEZ1bmN0aW9uKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGFycmF5
OiBhbnlbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgICgpOiBJQXVnbWVudGVkSlF1ZXJ5
O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5IGV4dGVuZHMgSlF1ZXJ5
IHtcbiAgICAgICAgLy8gVE9ETzogZXZlbnRzLCBob3cgdG8gZGVmaW5lP1xuICAgICAgICAvLyRk
ZXN0cm95XG5cbiAgICAgICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSUF1Z21lbnRlZEpRdWVy
eTtcbiAgICAgICAgZmluZChlbGVtZW50OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAg
ICBmaW5kKG9iajogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcblxuICAgICAgICBjb250cm9s
bGVyKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IoKTogYW55O1xuICAgICAg
ICBzY29wZSgpOiBJU2NvcGU7XG5cbiAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk6IHN0cmluZywg
dmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShvYmo6IHsgW2tleTog
c3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKGtleT86IHN0
cmluZyk6IGFueTtcblxuXG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBBVVRPIG1vZHVsZSAoYW5ndWxhci5qcylcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBl
eHBvcnQgbW9kdWxlIGF1dG8ge1xuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8v
IEluamVjdG9yU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvQVVUTy4kaW5qZWN0b3JcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50
ZXJmYWNlIElJbmplY3RvclNlcnZpY2Uge1xuICAgICAgICAgICAgYW5ub3RhdGUoZm46IEZ1bmN0
aW9uKTogc3RyaW5nW107XG4gICAgICAgICAgICBhbm5vdGF0ZShpbmxpbmVBbm5vdGFkZWRGdW5j
dGlvbjogYW55W10pOiBzdHJpbmdbXTtcbiAgICAgICAgICAgIGdldCAobmFtZTogc3RyaW5nKTog
YW55O1xuICAgICAgICAgICAgaW5zdGFudGlhdGUodHlwZUNvbnN0cnVjdG9yOiBGdW5jdGlvbiwg
bG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGlubGluZUFubm90YWRlZEZ1
bmN0aW9uOiBhbnlbXSk6IGFueTtcbiAgICAgICAgICAgIGludm9rZShmdW5jOiBGdW5jdGlvbiwg
Y29udGV4dD86IGFueSwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICB9XG5cbiAgICAgICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gUHJvdmlkZVNlcnZpY2VcbiAgICAgICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJHByb3ZpZGVcbiAgICAgICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElQcm92aWRlU2VydmljZSB7XG4gICAgICAg
ICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgaXQgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBpbnN0
YW5jZSwgYnV0IGFjdHVhbFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3Qg
cmV0dXJuIGFueXRoaW5nLlxuICAgICAgICAgICAgLy8gY29uc3RhbnQobmFtZTogc3RyaW5nLCB2
YWx1ZTogYW55KTogYW55O1xuICAgICAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1
ZTogYW55KTogdm9pZDtcblxuICAgICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVj
b3JhdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3Ry
aW5nLCBkZWNvcmF0b3JJbmxpbmU6IGFueVtdKTogdm9pZDtcbiAgICAgICAgICAgIGZhY3Rvcnko
bmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IG5nLklTZXJ2
aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5u
b3RhZGVkRnVuY3Rpb246IGFueVtdKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAg
IHByb3ZpZGVyKG5hbWU6IHN0cmluZywgcHJvdmlkZXI6IG5nLklTZXJ2aWNlUHJvdmlkZXIpOiBu
Zy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBz
ZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVy
O1xuICAgICAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9yOiBGdW5jdGlv
bik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcs
IHZhbHVlOiBhbnkpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICB9XG5cbiAgICB9XG59
XG4vLyBtb2RlbHMvVG9kb0l0ZW0udHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmlj
dCc7XG5cbiAgICBleHBvcnQgY2xhc3MgVG9kb0l0ZW0ge1xuICAgICAgICBjb25zdHJ1Y3Rvcihc
biAgICAgICAgICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nLFxuICAgICAgICAgICAgcHVibGljIGNv
bXBsZXRlZDogYm9vbGVhblxuICAgICAgICAgICAgKSB7IH1cbiAgICB9XG59XG4vLyBpbnRlcmZh
Y2VzL0lUb2RvU2NvcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJ
VG9kb1Njb3BlIGV4dGVuZHMgbmcuSVNjb3BlIHtcblx0XHR0b2RvczogVG9kb0l0ZW1bXTtcblx0
XHRuZXdUb2RvOiBzdHJpbmc7XG5cdFx0ZWRpdGVkVG9kbzogVG9kb0l0ZW07XG5cdFx0b3JpZ2lu
YWxUb2RvOiBUb2RvSXRlbTtcblx0XHRyZW1haW5pbmdDb3VudDogbnVtYmVyO1xuXHRcdGRvbmVD
b3VudDogbnVtYmVyO1xuXHRcdGFsbENoZWNrZWQ6IGJvb2xlYW47XG5cdFx0cmV2ZXJ0ZWQ6IGJv
b2xlYW47XG5cdFx0c3RhdHVzRmlsdGVyOiB7IGNvbXBsZXRlZD86IGJvb2xlYW4gfTtcblx0XHRs
b2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZTtcblx0XHR2bTogVG9kb0N0cmw7XG5cdH1cbn1c
bi8vIGludGVyZmFjZXMvSVRvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9y
dCBpbnRlcmZhY2UgSVRvZG9TdG9yYWdlIHtcblx0XHRnZXQgKCk6IFRvZG9JdGVtW107XG5cdFx0
cHV0KHRvZG9zOiBUb2RvSXRlbVtdKTtcblx0fVxufS8vIGRpcmVjdGl2ZXMvVG9kb0ZvY3VzLnRz
XG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogRGlyZWN0
aXZlIHRoYXQgcGxhY2VzIGZvY3VzIG9uIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hl
biB0aGUgZXhwcmVzc2lvbiBpdCBiaW5kcyB0byBldmFsdWF0ZXMgdG8gdHJ1ZS5cblx0ICovXG5c
dGV4cG9ydCBmdW5jdGlvbiB0b2RvRm9jdXMoJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSk6
IG5nLklEaXJlY3RpdmUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5J
U2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdCRz
Y29wZS4kd2F0Y2goYXR0cmlidXRlcy50b2RvRm9jdXMsIG5ld3ZhbCA9PiB7XG5cdFx0XHRcdFx0
aWYgKG5ld3ZhbCkge1xuXHRcdFx0XHRcdFx0JHRpbWVvdXQoKCkgPT4gZWxlbWVudFswXS5mb2N1
cygpLCAwLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9
O1xuXHR9XG5cblx0dG9kb0ZvY3VzLiRpbmplY3QgPSBbJyR0aW1lb3V0J107XG5cbn0vLyBkaXJl
Y3RpdmVzL1RvZG9CbHVyLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xu
XG4gICAgLyoqXG4gICAgICogRGlyZWN0aXZlIHRoYXQgZXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiB3
aGVuIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gbG9zZXMgZm9jdXMuXG4gICAgICovXG4g
ICAgZXhwb3J0IGZ1bmN0aW9uIHRvZG9CbHVyKCk6IG5nLklEaXJlY3RpdmUge1xuICAgICAgICBy
ZXR1cm4ge1xuICAgICAgICAgICAgbGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBK
UXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYmlu
ZCgnYmx1cicsICgpID0+IHsgJHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9CbHVyKTsgfSk7
XG4gICAgICAgICAgICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQu
dW5iaW5kKCdibHVyJyk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1c
bi8vIGRpcmVjdGl2ZXMvVG9kb0VzY2FwZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0
cmljdCc7XG5cblx0Y29uc3QgRVNDQVBFX0tFWSA9IDI3O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3Rp
dmUgdGhhdCBjYW5jZWxzIGVkaXRpbmcgYSB0b2RvIGlmIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVz
YyBrZXkuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0VzY2FwZSgpOiBuZy5JRGlyZWN0
aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVt
ZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LmJpbmQo
J2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0g
RVNDQVBFX0tFWSkge1xuXHRcdFx0XHRcdFx0JHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9F
c2NhcGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0JHNjb3BlLiRvbign
JGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdrZXlkb3duJyk7IH0pO1xuXHRcdFx0
fVxuXHRcdH07XG5cdH1cbn1cbi8vIHNlcnZpY2VzL1RvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0
b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZXMgdGhh
dCBwZXJzaXN0cyBhbmQgcmV0cmlldmVzIFRPRE9zIGZyb20gbG9jYWxTdG9yYWdlLlxuICAgICAq
L1xuICAgIGV4cG9ydCBjbGFzcyBUb2RvU3RvcmFnZSBpbXBsZW1lbnRzIElUb2RvU3RvcmFnZSB7
XG5cbiAgICAgICAgU1RPUkFHRV9JRCA9ICd0b2Rvcy1hbmd1bGFyanMtdHlwZXNjcmlwdCc7XG5c
biAgICAgICAgZ2V0ICgpOiBUb2RvSXRlbVtdIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBh
cnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCkgfHwgJ1tdJyk7XG4gICAg
ICAgIH1cblxuICAgICAgICBwdXQodG9kb3M6IFRvZG9JdGVtW10pIHtcbiAgICAgICAgICAgIGxv
Y2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3Mp
KTtcbiAgICAgICAgfVxuICAgIH1cbn0vLyBjb250cm9sbGVycy9Ub2RvQ3RybC50c1xuXG5tb2R1
bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIFRoZSBtYWluIGNvbnRy
b2xsZXIgZm9yIHRoZSBhcHAuIFRoZSBjb250cm9sbGVyOlxuXHQgKiAtIHJldHJpZXZlcyBhbmQg
cGVyc2lzdHMgdGhlIG1vZGVsIHZpYSB0aGUgdG9kb1N0b3JhZ2Ugc2VydmljZVxuXHQgKiAtIGV4
cG9zZXMgdGhlIG1vZGVsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxl
cnNcblx0ICovXG5cdGV4cG9ydCBjbGFzcyBUb2RvQ3RybCB7XG5cblx0XHRwcml2YXRlIHRvZG9z
OiBUb2RvSXRlbVtdO1xuXG5cdFx0Ly8gJGluamVjdCBhbm5vdGF0aW9uLlxuXHRcdC8vIEl0IHBy
b3ZpZGVzICRpbmplY3RvciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyB0byBi
ZSBpbmplY3RlZCBpbnRvIGNvbnN0cnVjdG9yXG5cdFx0Ly8gaXQgaXMgYmV0dGVyIHRvIGhhdmUg
aXQgY2xvc2UgdG8gdGhlIGNvbnN0cnVjdG9yLCBiZWNhdXNlIHRoZSBwYXJhbWV0ZXJzIG11c3Qg
bWF0Y2ggaW4gY291bnQgYW5kIHR5cGUuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvZ3VpZGUvZGlcblx0XHRwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXG5cdFx0XHQnJHNj
b3BlJyxcblx0XHRcdCckbG9jYXRpb24nLFxuXHRcdFx0J3RvZG9TdG9yYWdlJyxcblx0XHRcdCdm
aWx0ZXJGaWx0ZXInXG5cdFx0XTtcblxuXHRcdC8vIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQg
dmlhIEFuZ3VsYXJKUyAkaW5qZWN0b3Jcblx0XHQvLyBjb250cm9sbGVyJ3MgbmFtZSBpcyByZWdp
c3RlcmVkIGluIEFwcGxpY2F0aW9uLnRzIGFuZCBzcGVjaWZpZWQgZnJvbSBuZy1jb250cm9sbGVy
IGF0dHJpYnV0ZSBpbiBpbmRleC5odG1sXG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0XHRwcml2YXRl
ICRzY29wZTogSVRvZG9TY29wZSxcblx0XHRcdHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRp
b25TZXJ2aWNlLFxuXHRcdFx0cHJpdmF0ZSB0b2RvU3RvcmFnZTogSVRvZG9TdG9yYWdlLFxuXHRc
dFx0cHJpdmF0ZSBmaWx0ZXJGaWx0ZXJcblx0XHQpIHtcblx0XHRcdHRoaXMudG9kb3MgPSAkc2Nv
cGUudG9kb3MgPSB0b2RvU3RvcmFnZS5nZXQoKTtcblxuXHRcdFx0JHNjb3BlLm5ld1RvZG8gPSAn
Jztcblx0XHRcdCRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblxuXHRcdFx0Ly8gJ3ZtJyBzdGFu
ZHMgZm9yICd2aWV3IG1vZGVsJy4gV2UncmUgYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250
cm9sbGVyIHRvIHRoZSBzY29wZVxuXHRcdFx0Ly8gZm9yIGl0cyBtZXRob2RzIHRvIGJlIGFjY2Vz
c2libGUgZnJvbSB2aWV3IC8gSFRNTFxuXHRcdFx0JHNjb3BlLnZtID0gdGhpcztcblxuXHRcdFx0
Ly8gd2F0Y2hpbmcgZm9yIGV2ZW50cy9jaGFuZ2VzIGluIHNjb3BlLCB3aGljaCBhcmUgY2F1c2Vk
IGJ5IHZpZXcvdXNlciBpbnB1dFxuXHRcdFx0Ly8gaWYgeW91IHN1YnNjcmliZSB0byBzY29wZSBv
ciBldmVudCB3aXRoIGxpZmV0aW1lIGxvbmdlciB0aGFuIHRoaXMgY29udHJvbGxlciwgbWFrZSBz
dXJlIHlvdSB1bnN1YnNjcmliZS5cblx0XHRcdCRzY29wZS4kd2F0Y2goJ3RvZG9zJywgKCkgPT4g
dGhpcy5vblRvZG9zKCksIHRydWUpO1xuXHRcdFx0JHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0
aCgpJywgcGF0aCA9PiB0aGlzLm9uUGF0aChwYXRoKSlcblxuXHRcdFx0aWYgKCRsb2NhdGlvbi5w
YXRoKCkgPT09ICcnKSAkbG9jYXRpb24ucGF0aCgnLycpO1xuXHRcdFx0JHNjb3BlLmxvY2F0aW9u
ID0gJGxvY2F0aW9uO1xuXHRcdH1cblxuXHRcdG9uUGF0aChwYXRoOiBzdHJpbmcpIHtcblx0XHRc
dHRoaXMuJHNjb3BlLnN0YXR1c0ZpbHRlciA9IChwYXRoID09PSAnL2FjdGl2ZScpID9cblx0XHRc
dFx0eyBjb21wbGV0ZWQ6IGZhbHNlIH0gOiAocGF0aCA9PT0gJy9jb21wbGV0ZWQnKSA/XG5cdFx0
XHRcdHsgY29tcGxldGVkOiB0cnVlIH0gOiB7fTtcblx0XHR9XG5cblx0XHRvblRvZG9zKCkge1xu
XHRcdFx0dGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnQgPSB0aGlzLmZpbHRlckZpbHRlcih0aGlz
LnRvZG9zLCB7IGNvbXBsZXRlZDogZmFsc2UgfSkubGVuZ3RoO1xuXHRcdFx0dGhpcy4kc2NvcGUu
ZG9uZUNvdW50ID0gdGhpcy50b2Rvcy5sZW5ndGggLSB0aGlzLiRzY29wZS5yZW1haW5pbmdDb3Vu
dDtcblx0XHRcdHRoaXMuJHNjb3BlLmFsbENoZWNrZWQgPSAhdGhpcy4kc2NvcGUucmVtYWluaW5n
Q291bnRcblx0XHRcdHRoaXMudG9kb1N0b3JhZ2UucHV0KHRoaXMudG9kb3MpO1xuXHRcdH1cblxu
XHRcdGFkZFRvZG8oKSB7XG5cdFx0XHR2YXIgbmV3VG9kbyA6IHN0cmluZyA9IHRoaXMuJHNjb3Bl
Lm5ld1RvZG8udHJpbSgpO1xuXHRcdFx0aWYgKCFuZXdUb2RvLmxlbmd0aCkge1xuXHRcdFx0XHRy
ZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudG9kb3MucHVzaChuZXcgVG9kb0l0ZW0obmV3
VG9kbywgZmFsc2UpKTtcblx0XHRcdHRoaXMuJHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHR9XG5c
blx0XHRlZGl0VG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVk
aXRlZFRvZG8gPSB0b2RvSXRlbTtcblxuXHRcdFx0Ly8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8g
aW4gY2FzZSBlZGl0aW5nIGlzIGNhbmNlbGxlZC5cblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFs
VG9kbyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCB0b2RvSXRlbSk7XG5cdFx0fVxuXG5cdFx0cmV2ZXJ0
RWRpdHModG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zW3RoaXMudG9kb3Mu
aW5kZXhPZih0b2RvSXRlbSldID0gdGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvO1xuXHRcdFx0dGhp
cy4kc2NvcGUucmV2ZXJ0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGRvbmVFZGl0aW5nKHRvZG9J
dGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5c
dFx0XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuJHNj
b3BlLnJldmVydGVkKSB7XG5cdFx0XHRcdC8vIFRvZG8gZWRpdHMgd2VyZSByZXZlcnRlZCwgZG9u
J3Qgc2F2ZS5cblx0XHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSBudWxsO1xuXHRcdFx0XHRy
ZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0b2RvSXRlbS50aXRsZSA9IHRvZG9JdGVtLnRpdGxlLnRy
aW0oKTtcblx0XHRcdGlmICghdG9kb0l0ZW0udGl0bGUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVU
b2RvKHRvZG9JdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZW1vdmVUb2RvKHRvZG9JdGVt
OiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvcy5zcGxpY2UodGhpcy50b2Rvcy5pbmRleE9m
KHRvZG9JdGVtKSwgMSk7XG5cdFx0fVxuXG5cdFx0Y2xlYXJEb25lVG9kb3MoKSB7XG5cdFx0XHR0
aGlzLiRzY29wZS50b2RvcyA9IHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcih0b2RvSXRl
bSA9PiAhdG9kb0l0ZW0uY29tcGxldGVkKTtcblx0XHR9XG5cblx0XHRtYXJrQWxsKGNvbXBsZXRl
ZDogYm9vbGVhbikge1xuXHRcdFx0dGhpcy50b2Rvcy5mb3JFYWNoKHRvZG9JdGVtID0+IHsgdG9k
b0l0ZW0uY29tcGxldGVkID0gY29tcGxldGVkOyB9KTtcblx0XHR9XG5cdH1cblxufVxuLy8gQXBw
bGljYXRpb24udHNcblxuLyoqXG4gKiBUaGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1bGUuXG4gKlxu
ICogQHR5cGUge2FuZ3VsYXIuTW9kdWxlfVxuICovXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ug
c3RyaWN0JztcblxuICAgIHZhciB0b2RvbXZjID0gYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBb
XSlcbiAgICAgICAgICAgIC5jb250cm9sbGVyKCd0b2RvQ3RybCcsIFRvZG9DdHJsKVxuICAgICAg
ICAgICAgLmRpcmVjdGl2ZSgndG9kb0JsdXInLCB0b2RvQmx1cilcbiAgICAgICAgICAgIC5kaXJl
Y3RpdmUoJ3RvZG9Gb2N1cycsIHRvZG9Gb2N1cylcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3Rv
ZG9Fc2NhcGUnLCB0b2RvRXNjYXBlKVxuICAgICAgICAgICAgLnNlcnZpY2UoJ3RvZG9TdG9yYWdl
JywgVG9kb1N0b3JhZ2UpO1xufVxuIgogCiAvKioqLyB9KSwKIC8qIDQyMSAqLwogLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyAgICAgVW5k
ZXJzY29yZS5qcyAxLjguM1xuLy8gICAgIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4vLyAgICAg
KGMpIDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGln
YXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVs
eSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbigpIHtcblxu
ICAvLyBCYXNlbGluZSBzZXR1cFxuICAvLyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEVzdGFibGlz
aCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIGluIHRoZSBicm93c2VyLCBvciBgZXhwb3J0c2Ag
b24gdGhlIHNlcnZlci5cbiAgdmFyIHJvb3QgPSB0aGlzO1xuXG4gIC8vIFNhdmUgdGhlIHByZXZp
b3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUg
PSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3pp
cHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialBy
b3RvID0gT2JqZWN0LnByb3RvdHlwZSwgRnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xu
XG4gIC8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3Mg
dG8gY29yZSBwcm90b3R5cGVzLlxuICB2YXJcbiAgICBwdXNoICAgICAgICAgICAgID0gQXJyYXlQ
cm90by5wdXNoLFxuICAgIHNsaWNlICAgICAgICAgICAgPSBBcnJheVByb3RvLnNsaWNlLFxuICAg
IHRvU3RyaW5nICAgICAgICAgPSBPYmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0
eSAgID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1
KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4g
IC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuICB2YXJcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBB
cnJheS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLFxuICAg
IG5hdGl2ZUJpbmQgICAgICAgICA9IEZ1bmNQcm90by5iaW5kLFxuICAgIG5hdGl2ZUNyZWF0ZSAg
ICAgICA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZv
ciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7
fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmpl
Y3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2Jq
IGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykp
IHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAg
Ly8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAg
Ly8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZSBvbGQgYHJlcXVpcmUoKWAgQVBJLiBJ
ZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3Qu
XG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9m
IG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9y
dHMgPSBtb2R1bGUuZXhwb3J0cyA9IF87XG4gICAgfVxuICAgIGV4cG9ydHMuXyA9IF87XG4gIH0g
ZWxzZSB7XG4gICAgcm9vdC5fID0gXztcbiAgfVxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAg
Xy5WRVJTSU9OID0gJzEuOC4zJztcblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVy
bnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRo
ZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBV
bmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgdmFyIG9wdGltaXplQ2IgPSBmdW5jdGlvbihm
dW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJl
dHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkg
e1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJu
IGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY2FzZSAyOiByZXR1
cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29u
dGV4dCwgdmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5j
dGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2Fs
bChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNh
c2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rp
b24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFs
dWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5j
dGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4g
ICAgfTtcbiAgfTtcblxuICAvLyBBIG1vc3RseS1pbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0
ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZFxuICAvLyB0byBlYWNoIGVsZW1lbnQgaW4g
YSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXJcbiAg
Ly8gaWRlbnRpdHksIGFuIGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBv
ciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICB2YXIgY2IgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4
dCwgYXJnQ291bnQpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7
XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBj
b250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gXy5t
YXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG4gIF8u
aXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1
ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9u
IGZvciBjcmVhdGluZyBhc3NpZ25lciBmdW5jdGlvbnMuXG4gIHZhciBjcmVhdGVBc3NpZ25lciA9
IGZ1bmN0aW9uKGtleXNGdW5jLCB1bmRlZmluZWRPbmx5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KG9iaikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAo
bGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGlu
ZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9
IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxc
biAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAo
IXVuZGVmaW5lZE9ubHkgfHwgb2JqW2tleV0gPT09IHZvaWQgMCkgb2JqW2tleV0gPSBzb3VyY2Vb
a2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9
O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3Qg
dGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24o
cHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtc
biAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4g
ICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9y
O1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xu
XG4gIHZhciBwcm9wZXJ0eSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihv
YmopIHtcbiAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICAg
IH07XG4gIH07XG5cbiAgLy8gSGVscGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4gIC8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBh
cnJheSBvciBhcyBhbiBvYmplY3RcbiAgLy8gUmVsYXRlZDogaHR0cDovL3Blb3BsZS5tb3ppbGxh
Lm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbiAgLy8gQXZvaWRz
IGEgdmVyeSBuYXN0eSBpT1MgOCBKSVQgYnVnIG9uIEFSTS02NC4gIzIwOTRcbiAgdmFyIE1BWF9B
UlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4gIHZhciBnZXRMZW5ndGggPSBwcm9w
ZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24p
IHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0
eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhf
QVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBs
ZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBh
ZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlr
ZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlv
bihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0
ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlr
ZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxu
ICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChp
ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBp
dGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAg
IHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5n
IHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVu
Y3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0
ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlz
KG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICBy
ZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwg
bGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2lu
ZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVu
dEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9
O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJp
Z2h0LlxuICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7XG4gICAgLy8gT3B0aW1pemVkIGl0
ZXJhdG9yIGZ1bmN0aW9uIGFzIHVzaW5nIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAvLyBpbiB0aGUg
bWFpbiBmdW5jdGlvbiB3aWxsIGRlb3B0aW1pemUgdGhlLCBzZWUgIzE5OTEuXG4gICAgZnVuY3Rp
b24gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCkge1xu
ICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikg
e1xuICAgICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xu
ICAgICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5
LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgcmV0dXJu
IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRleHQpIHtcbiAgICAgIGl0ZXJhdGVl
ID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCk7XG4gICAgICB2YXIga2V5cyA9ICFp
c0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChrZXlz
IHx8IG9iaikubGVuZ3RoLFxuICAgICAgICAgIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGgg
LSAxO1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbml0aWFsIHZhbHVlIGlmIG5vbmUgaXMgcHJv
dmlkZWQuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgbWVtbyA9
IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtc
biAgICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlz
LCBpbmRleCwgbGVuZ3RoKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMg
dXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxu
ICAvLyBvciBgZm9sZGxgLlxuICBfLnJlZHVjZSA9IF8uZm9sZGwgPSBfLmluamVjdCA9IGNyZWF0
ZVJlZHVjZSgxKTtcblxuICAvLyBUaGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1
Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cbiAgXy5yZWR1Y2VSaWdodCA9IF8uZm9sZHIgPSBj
cmVhdGVSZWR1Y2UoLTEpO1xuXG4gIC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFz
c2VzIGEgdHJ1dGggdGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRl
Y3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBrZXk7XG4g
ICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGtleSA9IF8uZmluZEluZGV4KG9iaiwg
cHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gXy5maW5kS2V5
KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKGtleSAhPT0gdm9pZCAw
ICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxs
IHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBz
ZWxlY3RgLlxuICBfLmZpbHRlciA9IF8uc2VsZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUs
IGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIHByZWRpY2F0ZSA9IGNiKHBy
ZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4
LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3Vs
dHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAg
Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5c
biAgXy5yZWplY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJl
dHVybiBfLmZpbHRlcihvYmosIF8ubmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAg
fTtcblxuICAvLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEg
dHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYWxsYC5cbiAgXy5ldmVyeSA9IF8uYWxsID0g
ZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihw
cmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYg
Xy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZh
ciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXBy
ZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtc
biAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxl
YXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8v
IEFsaWFzZWQgYXMgYGFueWAuXG4gIF8uc29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBwcmVk
aWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQp
O1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAg
ICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5
cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50
S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBm
YWxzZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250
YWlucyBhIGdpdmVuIGl0ZW0gKHVzaW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVk
ZXNgIGFuZCBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBfLmluY2x1ZGVzID0gXy5pbmNsdWRl
ID0gZnVuY3Rpb24ob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gICAgaWYgKCFpc0Fy
cmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUlu
ZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBfLmlu
ZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG4gIH07XG5cbiAgLy8gSW52b2tlIGEg
bWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4g
IF8uaW52b2tlID0gZnVuY3Rpb24ob2JqLCBtZXRob2QpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNl
LmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgaXNGdW5jID0gXy5pc0Z1bmN0aW9uKG1ldGhv
ZCk7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBm
dW5jID0gaXNGdW5jID8gbWV0aG9kIDogdmFsdWVbbWV0aG9kXTtcbiAgICAgIHJldHVybiBmdW5j
ID09IG51bGwgPyBmdW5jIDogZnVuYy5hcHBseSh2YWx1ZSwgYXJncyk7XG4gICAgfSk7XG4gIH07
XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgbWFw
YDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbiAgXy5wbHVjayA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7
XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgXy5wcm9wZXJ0eShrZXkpKTtcbiAgfTtcblxuICAvLyBD
b252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaWx0ZXJgOiBzZWxl
Y3Rpbmcgb25seSBvYmplY3RzXG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAg
cGFpcnMuXG4gIF8ud2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8u
ZmlsdGVyKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2Ug
dmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0
IG9iamVjdFxuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBf
LmZpbmRXaGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maW5kKG9i
aiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVs
ZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBfLm1heCA9IGZ1bmN0aW9u
KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBs
YXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBp
ZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJh
eUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwg
bGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0g
b2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQg
PSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBp
bmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCBjb21w
dXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgICAg
cmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAg
ICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8v
IFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9u
KS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFy
IHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFs
dWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7
XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAg
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysp
IHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA8IHJlc3VsdCkg
e1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBl
bHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5l
YWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVk
ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwg
bGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmlu
aXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVk
ID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVz
dWx0O1xuICB9O1xuXG4gIC8vIFNodWZmbGUgYSBjb2xsZWN0aW9uLCB1c2luZyB0aGUgbW9kZXJu
IHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndp
a2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgXy5zaHVmZmxlID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHNldCA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBf
LnZhbHVlcyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBzZXQubGVuZ3RoO1xuICAgIHZhciBzaHVm
ZmxlZCA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCByYW5kOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmFuZCA9IF8ucmFuZG9tKDAsIGluZGV4KTtc
biAgICAgIGlmIChyYW5kICE9PSBpbmRleCkgc2h1ZmZsZWRbaW5kZXhdID0gc2h1ZmZsZWRbcmFu
ZF07XG4gICAgICBzaHVmZmxlZFtyYW5kXSA9IHNldFtpbmRleF07XG4gICAgfVxuICAgIHJldHVy
biBzaHVmZmxlZDtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9t
IGEgY29sbGVjdGlvbi5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBh
IHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1l
bnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihv
YmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYg
KCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9i
altfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICByZXR1cm4gXy5zaHVmZmxl
KG9iaikuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbikpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9i
amVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAg
Xy5zb3J0QnkgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0
ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgcmV0dXJuIF8ucGx1Y2soXy5tYXAob2Jq
LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAg
IHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBjcml0ZXJpYTog
aXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0
aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2
YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYg
KGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBi
ID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4
IC0gcmlnaHQuaW5kZXg7XG4gICAgfSksICd2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFuIGludGVy
bmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5c
biAgdmFyIGdyb3VwID0gZnVuY3Rpb24oYmVoYXZpb3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24o
b2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAg
aXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5j
dGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBp
bmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAg
IH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0
aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBh
dHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRo
ZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUs
IGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFs
dWUpOyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0
aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBncm91cEJ5YCwg
YnV0IGZvclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBi
ZSB1bmlxdWUuXG4gIF8uaW5kZXhCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtl
eSkge1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIENvdW50cyBpbnN0
YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFz
c1xuICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0
aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgLy8gY3JpdGVyaW9uLlxuICBfLmNvdW50QnkgPSBncm91
cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBr
ZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8g
U2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5c
biAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtc
biAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYg
KGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJl
dHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYg
KG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9i
ai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xs
ZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRo
ZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5v
dCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0aW9uID0gZnVuY3Rpb24ob2JqLCBw
cmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRl
eHQpO1xuICAgIHZhciBwYXNzID0gW10sIGZhaWwgPSBbXTtcbiAgICBfLmVhY2gob2JqLCBmdW5j
dGlvbih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICAgIChwcmVkaWNhdGUodmFsdWUsIGtleSwgb2Jq
KSA/IHBhc3MgOiBmYWlsKS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3Bhc3Ms
IGZhaWxdO1xuICB9O1xuXG4gIC8vIEFycmF5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0t
LS1cblxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipu
Kiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gQWxp
YXNlZCBhcyBgaGVhZGAgYW5kIGB0YWtlYC4gVGhlICoqZ3VhcmQqKiBjaGVja1xuICAvLyBhbGxv
d3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2Ug
PSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0
dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07
XG4gICAgcmV0dXJuIF8uaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG4gIH07XG5c
biAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXku
IEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5n
ICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhj
bHVkaW5nIHRoZSBsYXN0IE4uXG4gIF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFy
ZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5s
ZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG4gIH07XG5cbiAgLy8gR2V0
IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4g
dGhlIGxhc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLmxhc3QgPSBmdW5jdGlv
bihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQg
MDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3Ro
IC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3Ro
IC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVu
dHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNw
ZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiog
d2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJl
c3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBy
ZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9
O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5j
b21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIF8u
aWRlbnRpdHkpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVj
dXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1
dCwgc2hhbGxvdywgc3RyaWN0LCBzdGFydEluZGV4KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdLCBp
ZHggPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4IHx8IDAsIGxlbmd0aCA9IGdldExl
bmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRb
aV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8
IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAvL2ZsYXR0ZW4gY3VycmVudCBsZXZl
bCBvZiBhcnJheSBvciBhcmd1bWVudHMgb2JqZWN0XG4gICAgICAgIGlmICghc2hhbGxvdykgdmFs
dWUgPSBmbGF0dGVuKHZhbHVlLCBzaGFsbG93LCBzdHJpY3QpO1xuICAgICAgICB2YXIgaiA9IDAs
IGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgb3V0cHV0Lmxlbmd0aCArPSBsZW47XG4gICAg
ICAgIHdoaWxlIChqIDwgbGVuKSB7XG4gICAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2or
K107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRw
dXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4g
IH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkg
ZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJh
eSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7
XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5v
dCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9u
KGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1
bWVudHMsIDEpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lv
biBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRl
ZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8v
IEFsaWFzZWQgYXMgYHVuaXF1ZWAuXG4gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJy
YXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4o
aXNTb3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9
IGlzU29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJh
dGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBy
ZXN1bHQgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5n
dGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1
ZSA9IGFycmF5W2ldLFxuICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2
YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7XG4gICAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgICAg
aWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAg
IHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAg
aWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChj
b21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAg
ICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3Vs
dC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtc
blxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRp
c3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4g
IF8udW5pb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4oYXJndW1l
bnRzLCB0cnVlLCB0cnVlKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNv
bnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4g
YXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJl
c3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBm
b3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVz
dWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFyZ3NMZW5n
dGg7IGorKykge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkg
YnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2go
aXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gVGFrZSB0aGUg
ZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlz
LlxuICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5
IHdpbGwgcmVtYWluLlxuICBfLmRpZmZlcmVuY2UgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZh
ciByZXN0ID0gZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUsIDEpO1xuICAgIHJldHVybiBf
LmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5z
KHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBaaXAgdG9nZXRoZXIgbXVsdGlw
bGUgbGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlXG4gIC8v
IGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxuICBfLnppcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVy
biBfLnVuemlwKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4g
VW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFy
cmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXNcbiAgXy51bnppcCA9IGZ1bmN0aW9uKGFy
cmF5KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ICYmIF8ubWF4KGFycmF5LCBnZXRMZW5ndGgp
Lmxlbmd0aCB8fCAwO1xuICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0
W2luZGV4XSA9IF8ucGx1Y2soYXJyYXksIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3Vs
dDtcbiAgfTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVy
IGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFy
YWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBv
ZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gIF8ub2JqZWN0ID0gZnVuY3Rpb24o
bGlzdCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAw
LCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYg
KHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9
IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAg
fVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5j
dGlvbiB0byBjcmVhdGUgdGhlIGZpbmRJbmRleCBhbmQgZmluZExhc3RJbmRleCBmdW5jdGlvbnNc
biAgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gICAgcmV0dXJu
IGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICAgIHByZWRpY2F0ZSA9
IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFy
cmF5KTtcbiAgICAgIHZhciBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAg
IGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAg
ICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBp
bmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0
dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRp
Y2F0ZSB0ZXN0XG4gIF8uZmluZEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7
XG4gIF8uZmluZExhc3RJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0xKTtcblxu
ICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0
IGluZGV4IGF0IHdoaWNoXG4gIC8vIGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMg
dG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJjaC5cbiAgXy5zb3J0ZWRJbmRleCA9
IGZ1bmN0aW9uKGFycmF5LCBvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUg
PSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2Jq
KTtcbiAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgd2hpbGUg
KGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAv
IDIpO1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCAr
IDE7IGVsc2UgaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAv
LyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBpbmRleE9mIGFuZCBsYXN0SW5kZXhP
ZiBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVG
aW5kLCBzb3J0ZWRJbmRleCkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4
KSB7XG4gICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBp
ZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAg
ICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtc
biAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5t
aW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAg
IH0gZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHgg
PSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09
PSBpdGVtID8gaWR4IDogLTE7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xu
ICAgICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCks
IF8uaXNOYU4pO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAg
ICB9XG4gICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAg
JiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09
PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4g
IH1cblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9m
IGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNs
dWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFk
eSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVz
ZSBiaW5hcnkgc2VhcmNoLlxuICBfLmluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBfLmZp
bmRJbmRleCwgXy5zb3J0ZWRJbmRleCk7XG4gIF8ubGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZp
bmRlcigtMSwgXy5maW5kTGFzdEluZGV4KTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFy
cmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8v
IHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0
aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlv
bnMuaHRtbCNyYW5nZSkuXG4gIF8ucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkg
e1xuICAgIGlmIChzdG9wID09IG51bGwpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAg
ICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBzdGVwID0gc3RlcCB8fCAxO1xuXG4gICAgdmFyIGxl
bmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAg
ICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4
IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0
YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICAvLyBGdW5jdGlvbiAo
YWhlbSkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIERldGVybWlu
ZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvclxuICAvLyBv
ciBhIG5vcm1hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHNcbiAgdmFyIGV4
ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2Fs
bGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9m
IGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAg
IHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJl
c3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3Qo
cmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBD
cmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlz
YCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFT
Y3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4g
IF8uYmluZCA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQpIHtcbiAgICBpZiAobmF0aXZlQmluZCAm
JiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMs
IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykp
IHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicp
O1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBib3Vu
ZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwg
Y29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAg
fTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVu
Y3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAv
LyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhp
c2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIsIGFsbG93aW5nIGFueSBj
b21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUgcHJlLWZpbGxlZC5cbiAgXy5wYXJ0aWFsID0g
ZnVuY3Rpb24oZnVuYykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50
cywgMSk7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcG9zaXRpb24g
PSAwLCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheShs
ZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAg
ICBhcmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBfID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDog
Ym91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRz
Lmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4g
ZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAg
IHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdz
IG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRo
ZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwg
Y2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5i
aW5kQWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGksIGxlbmd0aCA9IGFyZ3VtZW50cy5s
ZW5ndGgsIGtleTtcbiAgICBpZiAobGVuZ3RoIDw9IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFs
bCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gYXJndW1lbnRzW2ldO1xuICAgICAgb2JqW2tleV0g
PSBfLmJpbmQob2JqW2tleV0sIG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5c
biAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0
cy5cbiAgXy5tZW1vaXplID0gZnVuY3Rpb24oZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9p
emUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4g
ICAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1
bWVudHMpIDoga2V5KTtcbiAgICAgIGlmICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVth
ZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNo
ZVthZGRyZXNzXTtcbiAgICB9O1xuICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4g
bWVtb2l6ZTtcbiAgfTtcblxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51
bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFy
Z3VtZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAg
ICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGlt
ZW91dChmdW5jdGlvbigpe1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4g
ICAgfSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcg
aXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQu
XG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBh
IGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQg
bW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwg
dGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwg
d2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4g
IC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVh
ZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVj
dXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rp
b24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7
XG4gICAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYg
KCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4g
ICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogXy5ub3coKTtc
biAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0
LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAg
IH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4g
ICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3Vz
ID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xu
ICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYg
KHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVv
dXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91
dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJl
c3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkg
Y29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRp
b25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChs
YXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtc
biAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29u
dGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1
bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAg
Ly8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUg
ZnVuY3Rpb24gb24gdGhlXG4gIC8vIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxp
bmcuXG4gIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAg
ICB2YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XG5cbiAgICB2
YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVz
dGFtcDtcblxuICAgICAgaWYgKGxhc3QgPCB3YWl0ICYmIGxhc3QgPj0gMCkge1xuICAgICAgICB0
aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIGxhc3QpO1xuICAgICAgfSBlbHNlIHtc
biAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAg
ICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBpZiAo
IXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAg
IH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAg
ICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICB0aW1lc3RhbXAgPSBfLm5vdygpO1xuICAgICAg
dmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICBpZiAoIXRpbWVvdXQp
IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChjYWxsTm93KSB7
XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGNv
bnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAg
ICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBh
biBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFy
Z3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFs
bHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4gIF8ud3JhcCA9IGZ1bmN0aW9uKGZ1
bmMsIHdyYXBwZXIpIHtcbiAgICByZXR1cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9
O1xuXG4gIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVk
aWNhdGUuXG4gIF8ubmVnYXRlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1
bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBj
b21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0
aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIF8uY29tcG9z
ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdGFy
dCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIg
aSA9IHN0YXJ0O1xuICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7XG4gICAgICB3aGlsZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywg
cmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1
cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRo
ZSBOdGggY2FsbC5cbiAgXy5hZnRlciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0
dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVy
biBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxu
ICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8g
KGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgTnRoIGNhbGwuXG4gIF8uYmVmb3JlID0gZnVuY3Rpb24o
dGltZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4g
ICAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywg
YXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtc
biAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93
XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24u
XG4gIF8ub25jZSA9IF8ucGFydGlhbChfLmJlZm9yZSwgMik7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0
aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3
b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAg
dmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgn
dG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1By
b3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydHlJ
c0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICBm
dW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVt
SWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBv
YmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gKF8uaXNGdW5jdGlvbihjb25zdHJ1Y3Rv
cikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0
cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztc
biAgICBpZiAoXy5oYXMob2JqLCBwcm9wKSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkga2V5
cy5wdXNoKHByb3ApO1xuXG4gICAgd2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9
IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAm
JiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSB7
XG4gICAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBS
ZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERl
bGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2BcbiAgXy5r
ZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBb
XTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIg
a2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkp
IGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1
ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9
O1xuXG4gIC8vIFJldHJpZXZlIGFsbCB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0Llxu
ICBfLmFsbEtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkg
cmV0dXJuIFtdO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikg
a2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVn
KSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07
XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxu
ICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7
XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShs
ZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZh
bHVlc1tpXSA9IG9ialtrZXlzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtc
blxuICAvLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBl
YWNoIGVsZW1lbnQgb2YgdGhlIG9iamVjdFxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCBy
ZXR1cm5zIGFuIG9iamVjdFxuICBfLm1hcE9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2
YXIga2V5cyA9ICBfLmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxc
biAgICAgICAgICByZXN1bHRzID0ge30sXG4gICAgICAgICAgY3VycmVudEtleTtcbiAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY3Vy
cmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRl
cmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAg
cmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxp
c3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIF8ucGFpcnMgPSBmdW5jdGlvbihvYmopIHtc
biAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0
aDtcbiAgICB2YXIgcGFpcnMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhaXJzW2ldID0gW2tleXNbaV0sIG9ialtrZXlzW2ld
XV07XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbiAgfTtcblxuICAvLyBJbnZlcnQgdGhlIGtl
eXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFi
bGUuXG4gIF8uaW52ZXJ0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xu
ICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9
IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtvYmpba2V5c1tp
XV1dID0ga2V5c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBS
ZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRo
ZSBvYmplY3QuXG4gIC8vIEFsaWFzZWQgYXMgYG1ldGhvZHNgXG4gIF8uZnVuY3Rpb25zID0gXy5t
ZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2
YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVz
LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAv
LyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2Vk
LWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xu
XG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVz
IGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmpl
Y3QvYXNzaWduKVxuICBfLmV4dGVuZE93biA9IF8uYXNzaWduID0gY3JlYXRlQXNzaWduZXIoXy5r
ZXlzKTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFz
c2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kS2V5ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNh
dGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xu
ICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVu
Z3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tp
XTtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTtc
biAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29u
dGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gZnVuY3Rpb24o
b2JqZWN0LCBvaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIG9iaiA9
IG9iamVjdCwgaXRlcmF0ZWUsIGtleXM7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVz
dWx0O1xuICAgIGlmIChfLmlzRnVuY3Rpb24ob2l0ZXJhdGVlKSkge1xuICAgICAga2V5cyA9IF8u
YWxsS2V5cyhvYmopO1xuICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKG9pdGVyYXRlZSwgY29u
dGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBmbGF0dGVuKGFyZ3VtZW50cywgZmFs
c2UsIGZhbHNlLCAxKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2Jq
KSB7IHJldHVybiBrZXkgaW4gb2JqOyB9O1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAg
fVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsg
aSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtr
ZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0g
dmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgIC8vIFJldHVybiBh
IGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxu
ICBfLm9taXQgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKF8u
aXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0
ZWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ubWFwKGZsYXR0ZW4oYXJndW1l
bnRzLCBmYWxzZSwgZmFsc2UsIDEpLCBTdHJpbmcpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlv
bih2YWx1ZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAhXy5jb250YWlucyhrZXlzLCBrZXkpO1xu
ICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF8ucGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0
KTtcbiAgfTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9w
ZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtc
blxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHBy
b3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlk
ZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0Llxu
ICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0
ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVz
dWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAo
c2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5j
dGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICBy
ZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xu
ICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiBy
ZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0
byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0g
b3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBf
LnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmop
O1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVj
dCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1
bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxl
bmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5n
dGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0
dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAg
ICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUg
Y29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEgPSBmdW5jdGlvbihh
LCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVh
bC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhl
IFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9r
dS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAg
fHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMgbmVjZXNz
YXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIg
PT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVj
dHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBp
bnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAg
bmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNs
YXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAo
Y2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Np
b25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNh
c2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0
cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAg
Y2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIg
Y29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVc
ImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAg
ICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJl
cl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZl
LlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTlxuICAgICAgICBp
ZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29t
cGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICBy
ZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2Fz
ZSAnW29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAg
ICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1
ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCBy
ZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQg
cmVwcmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5c
biAgICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICB9XG5cbiAgICB2YXIgYXJlQXJyYXlzID0g
Y2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIGlmICghYXJlQXJyYXlzKSB7XG4g
ICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJl
dHVybiBmYWxzZTtcblxuICAgICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3Rv
cnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgICAv
LyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLlxuICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1
Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAm
JiAhKF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3Ig
aW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1
Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIpKSB7XG4gICAgICAgIHJldHVybiBmYWxz
ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3Ry
dWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVj
dHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9w
ZXJhdGlvbiBgSk9gLlxuXG4gICAgLy8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBv
YmplY3RzLlxuICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZv
ciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAgICBhU3RhY2sgPSBhU3RhY2sgfHwg
W107XG4gICAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICAgIHZhciBsZW5ndGggPSBhU3RhY2su
bGVuZ3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4g
UGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4g
ICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0
aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0gYjtcbiAgICB9XG5cbiAgICAvLyBB
ZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4g
ICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2goYik7XG5cbiAgICAvLyBSZWN1cnNp
dmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpZiAoYXJlQXJyYXlzKSB7XG4g
ICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21w
YXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYg
KGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIERlZXAgY29tcGFy
ZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgICB3
aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwg
YVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAg
ICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSks
IGtleTtcbiAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgLy8gRW5zdXJlIHRoYXQg
Ym90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3Jl
IGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgICAgaWYgKF8ua2V5cyhiKS5sZW5ndGggIT09
IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAg
IC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlclxuICAgICAgICBrZXkgPSBrZXlzW2xlbmd0aF07
XG4gICAgICAgIGlmICghKF8uaGFzKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFj
aywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3Zl
IHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4g
ICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAg
fTtcblxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmpl
Y3RzIGFyZSBlcXVhbC5cbiAgXy5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVy
biBlcShhLCBiKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9i
amVjdCBlbXB0eT9cbiAgLy8gQW4gXCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBv
d24tcHJvcGVydGllcy5cbiAgXy5pc0VtcHR5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9i
aiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSAmJiAoXy5p
c0FycmF5KG9iaikgfHwgXy5pc1N0cmluZyhvYmopIHx8IF8uaXNBcmd1bWVudHMob2JqKSkpIHJl
dHVybiBvYmoubGVuZ3RoID09PSAwO1xuICAgIHJldHVybiBfLmtleXMob2JqKS5sZW5ndGggPT09
IDA7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBfLmlz
RWxlbWVudCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVU
eXBlID09PSAxKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAv
LyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgQXJyYXkuaXNBcnJheVxuICBfLmlzQXJyYXkg
PSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5j
YWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2
YXJpYWJsZSBhbiBvYmplY3Q/XG4gIF8uaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2
YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwg
dHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBl
IG1ldGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlz
RGF0ZSwgaXNSZWdFeHAsIGlzRXJyb3IuXG4gIF8uZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlv
bicsICdTdHJpbmcnLCAnTnVtYmVyJywgJ0RhdGUnLCAnUmVnRXhwJywgJ0Vycm9yJ10sIGZ1bmN0
aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAg
cmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4g
ICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0
aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBh
bnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMo
YXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAg
IHJldHVybiBfLmhhcyhvYmosICdjYWxsZWUnKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gT3B0aW1p
emUgYGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIHR5cGVvZiBi
dWdzIGluIG9sZCB2OCxcbiAgLy8gSUUgMTEgKCMxNjIxKSwgYW5kIGluIFNhZmFyaSA4ICgjMTky
OSkuXG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAh
PSAnb2JqZWN0Jykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAg
cmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5c
biAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGlzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNl
RmxvYXQob2JqKSk7XG4gIH07XG5cbiAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gPyAoTmFO
IGlzIHRoZSBvbmx5IG51bWJlciB3aGljaCBkb2VzIG5vdCBlcXVhbCBpdHNlbGYpLlxuICBfLmlz
TmFOID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIF8uaXNOdW1iZXIob2JqKSAmJiBvYmog
IT09ICtvYmo7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8u
aXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBv
YmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0n
O1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051
bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4g
IC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNo
b3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJv
cGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEg
cHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBv
YmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfTtcblxuICAv
LyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJ1biBV
bmRlcnNjb3JlLmpzIGluICpub0NvbmZsaWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBfYCB2YXJp
YWJsZSB0byBpdHNcbiAgLy8gcHJldmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8g
dGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAg
ICByb290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5c
biAgLy8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJh
dGVlcy5cbiAgXy5pZGVudGl0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVl
O1xuICB9O1xuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9ucy4gT2Z0ZW4gdXNl
ZnVsIG91dHNpZGUgb2YgVW5kZXJzY29yZS5cbiAgXy5jb25zdGFudCA9IGZ1bmN0aW9uKHZhbHVl
KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07
XG4gIH07XG5cbiAgXy5ub29wID0gZnVuY3Rpb24oKXt9O1xuXG4gIF8ucHJvcGVydHkgPSBwcm9w
ZXJ0eTtcblxuICAvLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhh
dCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG4gIF8ucHJvcGVydHlPZiA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHJldHVybiBvYmogPT0gbnVsbCA/IGZ1bmN0aW9uKCl7fSA6IGZ1bmN0aW9uKGtl
eSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJu
cyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4g
c2V0IG9mXG4gIC8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLm1hdGNoZXIgPSBfLm1hdGNoZXMg
PSBmdW5jdGlvbihhdHRycykge1xuICAgIGF0dHJzID0gXy5leHRlbmRPd24oe30sIGF0dHJzKTtc
biAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gXy5pc01hdGNoKG9iaiwg
YXR0cnMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMu
XG4gIF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBh
Y2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Io
aXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBh
Y2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICAgIHJldHVybiBhY2N1bTtcbiAgfTtcblxuICAvLyBS
ZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxu
ICBfLnJhbmRvbSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7
XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWlu
ICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfTtcblxu
ICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1w
IGFzIGFuIGludGVnZXIuXG4gIF8ubm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAg
cmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9O1xuXG4gICAvLyBMaXN0IG9mIEhUTUwg
ZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZXNjYXBlTWFwID0ge1xuICAgICcmJzogJyZh
bXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1
b3Q7JyxcbiAgICBcIidcIjogJyYjeDI3OycsXG4gICAgJ2AnOiAnJiN4NjA7J1xuICB9O1xuICB2
YXIgdW5lc2NhcGVNYXAgPSBfLmludmVydChlc2NhcGVNYXApO1xuXG4gIC8vIEZ1bmN0aW9ucyBm
b3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5ncyB0by9mcm9tIEhUTUwgaW50ZXJwb2xh
dGlvbi5cbiAgdmFyIGNyZWF0ZUVzY2FwZXIgPSBmdW5jdGlvbihtYXApIHtcbiAgICB2YXIgZXNj
YXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgICB9
O1xuICAgIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUg
ZXNjYXBlZFxuICAgIHZhciBzb3VyY2UgPSAnKD86JyArIF8ua2V5cyhtYXApLmpvaW4oJ3wnKSAr
ICcpJztcbiAgICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBs
YWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3Ry
aW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7
XG4gICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShy
ZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBfLmVzY2Fw
ZSA9IGNyZWF0ZUVzY2FwZXIoZXNjYXBlTWFwKTtcbiAgXy51bmVzY2FwZSA9IGNyZWF0ZUVzY2Fw
ZXIodW5lc2NhcGVNYXApO1xuXG4gIC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYHByb3Bl
cnR5YCBpcyBhIGZ1bmN0aW9uIHRoZW4gaW52b2tlIGl0IHdpdGggdGhlXG4gIC8vIGBvYmplY3Rg
IGFzIGNvbnRleHQ7IG90aGVyd2lzZSwgcmV0dXJuIGl0LlxuICBfLnJlc3VsdCA9IGZ1bmN0aW9u
KG9iamVjdCwgcHJvcGVydHksIGZhbGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0ID09
IG51bGwgPyB2b2lkIDAgOiBvYmplY3RbcHJvcGVydHldO1xuICAgIGlmICh2YWx1ZSA9PT0gdm9p
ZCAwKSB7XG4gICAgICB2YWx1ZSA9IGZhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0Z1
bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9O1xuXG4gIC8v
IEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBj
bGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZh
ciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAg
dmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsg
aWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0
eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBs
YXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRl
U2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGUgICAgOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAg
IGludGVycG9sYXRlIDogLzwlPShbXFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlICAgICAgOiAv
PCUtKFtcXHNcXFNdKz8pJT4vZ1xuICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBs
YXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJw
b2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBp
c1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87
XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRo
ZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVz
ID0ge1xuICAgIFwiJ1wiOiAgICAgIFwiJ1wiLFxuICAgICdcXFxcJzogICAgICdcXFxcJyxcbiAg
ICAnXFxyJzogICAgICdyJyxcbiAgICAnXFxuJzogICAgICduJyxcbiAgICAnXFx1MjAyOCc6ICd1
MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZXIgPSAv
XFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5cbiAgdmFyIGVzY2FwZUNoYXIgPSBm
dW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAg
fTtcblxuICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBS
ZXNpZydzIGltcGxlbWVudGF0aW9uLlxuICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxl
cyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4gIC8vIGFuZCBj
b3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxuICAvLyBO
QjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHku
XG4gIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtc
biAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdz
O1xuICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0
aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHBy
ZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAg
ICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5p
bnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUg
fHwgbm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAg
Ly8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMg
YXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9f
cCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBl
LCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQu
c2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVyLCBlc2NhcGVDaGFyKTtcbiAgICAg
IGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4g
ICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8n
JzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7
XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikp
PT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAg
ICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAg
ICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJv
ZHVjZSB0aGUgY29ycmVjdCBvZmZlc3QuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4g
ICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNw
ZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0
aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9
XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlw
ZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3Vt
ZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4g
ICAgdHJ5IHtcbiAgICAgIHZhciByZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFi
bGUgfHwgJ29iaicsICdfJywgc291cmNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNv
dXJjZSA9IHNvdXJjZTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFyIHRlbXBsYXRl
ID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEs
IF8pO1xuICAgIH07XG5cbiAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBj
b252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGlu
Z3MudmFyaWFibGUgfHwgJ29iaic7XG4gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcg
KyBhcmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7XG5cbiAgICByZXR1cm4gdGVtcGxh
dGU7XG4gIH07XG5cbiAgLy8gQWRkIGEgXCJjaGFpblwiIGZ1bmN0aW9uLiBTdGFydCBjaGFpbmlu
ZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8uY2hhaW4gPSBmdW5jdGlvbihvYmop
IHtcbiAgICB2YXIgaW5zdGFuY2UgPSBfKG9iaik7XG4gICAgaW5zdGFuY2UuX2NoYWluID0gdHJ1
ZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG5cbiAgLy8gT09QXG4gIC8vIC0tLS0tLS0t
LS0tLS0tLVxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCBy
ZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdFxuICAvLyBjYW4gYmUgdXNlZCBPTy1zdHlsZS4g
VGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIHRoZVxuICAvLyB1bmRl
cnNjb3JlIGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuXG4gIC8v
IEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0
cy5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4g
aW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRk
IHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBf
Lm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1
bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAg
ICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0g
W3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4g
ICAgICAgIHJldHVybiByZXN1bHQodGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgICB9
O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rp
b25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgXy5taXhpbihfKTtcblxuICAvLyBBZGQgYWxs
IG11dGF0b3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydwb3An
LCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQn
XSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xu
ICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhp
cy5fd3JhcHBlZDtcbiAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBp
ZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGgg
PT09IDApIGRlbGV0ZSBvYmpbMF07XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG9iaik7XG4g
ICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8g
dGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0
aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnBy
b3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBt
ZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5c
biAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmpl
Y3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMu
X3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21l
IG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0
aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5w
cm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9T
dHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJycgKyB0aGlzLl93cmFwcGVkO1xuICB9
O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRp
YmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10
dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0
aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSBy
ZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0
IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVu
ZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFN
RCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4g
YW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVy
IHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5h
bWQpIHtcbiAgICBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICBy
ZXR1cm4gXztcbiAgICB9KTtcbiAgfVxufS5jYWxsKHRoaXMpKTtcbiIKK21vZHVsZS5leHBvcnRz
ID0gIi8vICAgICBVbmRlcnNjb3JlLmpzIDEuOC4zXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVq
cy5vcmdcbi8vICAgICAoYykgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91
ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29y
ZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1
bmN0aW9uKCkge1xuXG4gIC8vIEJhc2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5c
biAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIs
IG9yIGBleHBvcnRzYCBvbiB0aGUgc2VydmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8g
U2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZp
b3VzVW5kZXJzY29yZSA9IHJvb3QuXztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmll
ZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnBy
b3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlv
bi5wcm90b3R5cGU7XG5cbiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9y
IHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAg
ICAgICAgPSBBcnJheVByb3RvLnB1c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJv
dG8uc2xpY2UsXG4gICAgdG9TdHJpbmcgICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAg
IGhhc093blByb3BlcnR5ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwg
KipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2Ug
aG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUlz
QXJyYXkgICAgICA9IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2Jq
ZWN0LmtleXMsXG4gICAgbmF0aXZlQmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQsXG4gICAg
bmF0aXZlQ3JlYXRlICAgICAgID0gT2JqZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlv
biByZWZlcmVuY2UgZm9yIHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9y
ID0gZnVuY3Rpb24oKXt9O1xuXG4gIC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBV
bmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMg
aW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9i
ajtcbiAgfTtcblxuICAvLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUu
anMqKiwgd2l0aFxuICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVx
dWlyZSgpYCBBUEkuIElmIHdlJ3JlIGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEg
Z2xvYmFsIG9iamVjdC5cbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xu
ICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykg
e1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0
cy5fID0gXztcbiAgfSBlbHNlIHtcbiAgICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVu
dCB2ZXJzaW9uLlxuICBfLlZFUlNJT04gPSAnMS44LjMnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0
aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNp
b25cbiAgLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBs
aWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbiAgLy8gZnVuY3Rpb25zLlxuICB2YXIgb3B0aW1pemVD
YiA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQg
PT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8g
MyA6IGFyZ0NvdW50KSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xu
ICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAg
ICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJu
IGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICAgIGNhc2Ug
MzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICBy
ZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAg
ICB9O1xuICAgICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBp
bmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFj
Y3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4g
ICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwg
YXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0
aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gIC8vIHRvIGVh
Y2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg
4oCUIGVpdGhlclxuICAvLyBpZGVudGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3Bl
cnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9u
KHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1
cm4gXy5pZGVudGl0eTtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGlt
aXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1
ZSkpIHJldHVybiBfLm1hdGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVl
KTtcbiAgfTtcbiAgXy5pdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAg
cmV0dXJuIGNiKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7XG4gIH07XG5cbiAgLy8gQW4gaW50
ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgdmFyIGNy
ZWF0ZUFzc2lnbmVyID0gZnVuY3Rpb24oa2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkpIHtcbiAgICBy
ZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0
aDtcbiAgICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAg
ICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAg
ICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlz
RnVuYyhzb3VyY2UpLFxuICAgICAgICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xu
ICAgICAgICAgIGlmICghdW5kZWZpbmVkT25seSB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpb
a2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2Jq
O1xuICAgIH07XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5n
IGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVh
dGUgPSBmdW5jdGlvbihwcm90b3R5cGUpIHtcbiAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBl
KSkgcmV0dXJuIHt9O1xuICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUo
cHJvdG90eXBlKTtcbiAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVz
dWx0ID0gbmV3IEN0b3I7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiBy
ZXN1bHQ7XG4gIH07XG5cbiAgdmFyIHByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0
dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDog
b2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0
aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0
ZXJhdGVkIGFzIGFuIGFycmF5IG9yIGFzIGFuIG9iamVjdFxuICAvLyBSZWxhdGVkOiBodHRwOi8v
cGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0
aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5
NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdl
dExlbmd0aCA9IHByb3BlcnR5KCdsZW5ndGgnKTtcbiAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rp
b24oY29sbGVjdGlvbikge1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7
XG4gICAgcmV0dXJuIHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYg
bGVuZ3RoIDw9IE1BWF9BUlJBWV9JTkRFWDtcbiAgfTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0
aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwg
YW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJh
dyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNw
YXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9y
RWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9
IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAg
aWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9i
aik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7
XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2JqKTtcbiAgICAg
IH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3Vs
dHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAgXy5tYXAgPSBf
LmNvbGxlY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0
ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uo
b2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5n
dGgsXG4gICAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4
ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0g
a2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJh
dGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJu
IHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0
aW5nIGxlZnQgb3IgcmlnaHQuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAv
LyBPcHRpbWl6ZWQgaXRlcmF0b3IgZnVuY3Rpb24gYXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aFxu
ICAgIC8vIGluIHRoZSBtYWluIGZ1bmN0aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5
MS5cbiAgICBmdW5jdGlvbiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRl
eCwgbGVuZ3RoKSB7XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsg
aW5kZXggKz0gZGlyKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5k
ZXhdIDogaW5kZXg7XG4gICAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtl
eV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9
XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xu
ICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICAg
IHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAg
bGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAw
ID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUg
aWYgbm9uZSBpcyBwcm92aWRlZC5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xu
ICAgICAgICBtZW1vID0gb2JqW2tleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAg
aW5kZXggKz0gZGlyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0
ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJl
ZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBh
a2EgYGluamVjdGAsXG4gIC8vIG9yIGBmb2xkbGAuXG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8u
aW5qZWN0ID0gY3JlYXRlUmVkdWNlKDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2
ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0
ID0gXy5mb2xkciA9IGNyZWF0ZVJlZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2
YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBf
LmZpbmQgPSBfLmRldGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4g
ICAgdmFyIGtleTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAga2V5ID0gXy5m
aW5kSW5kZXgob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBr
ZXkgPSBfLmZpbmRLZXkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAo
a2V5ICE9PSB2b2lkIDAgJiYga2V5ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldO1xuICB9O1xuXG4g
IC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8v
IEFsaWFzZWQgYXMgYHNlbGVjdGAuXG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihv
YmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJl
ZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlv
bih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4
LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0
cztcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0
aCB0ZXN0IGZhaWxzLlxuICBfLnJlamVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250
ZXh0KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSks
IGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxl
bWVudHMgbWF0Y2ggYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2
ZXJ5ID0gXy5hbGwgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHBy
ZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJh
eUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2Jq
KS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgr
Kykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtc
biAgICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkg
cmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBEZXRl
cm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1
dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYW55YC5cbiAgXy5zb21lID0gXy5hbnkgPSBmdW5j
dGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRp
Y2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtl
eXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1
cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNh
dGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9
XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkg
b3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlh
c2VkIGFzIGBpbmNsdWRlc2AgYW5kIGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVk
ZXMgPSBfLmluY2x1ZGUgPSBmdW5jdGlvbihvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtc
biAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgaWYg
KHR5cGVvZiBmcm9tSW5kZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4g
ICAgcmV0dXJuIF8uaW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbiAgfTtcblxu
ICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEg
Y29sbGVjdGlvbi5cbiAgXy5pbnZva2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkge1xuICAgIHZh
ciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBpc0Z1bmMgPSBfLmlz
RnVuY3Rpb24obWV0aG9kKTtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkg
e1xuICAgICAgdmFyIGZ1bmMgPSBpc0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRob2RdO1xuICAg
ICAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtc
biAgICB9KTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVz
ZSBjYXNlIG9mIGBtYXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rp
b24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xu
ICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2Yg
YGZpbHRlcmA6IHNlbGVjdGluZyBvbmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZp
YyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtc
biAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAv
LyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0
dGluZyB0aGUgZmlyc3Qgb2JqZWN0XG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1
ZWAgcGFpcnMuXG4gIF8uZmluZFdoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJl
dHVybiBfLmZpbmQob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4g
dGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8u
bWF4ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQg
PSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNv
bXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAg
ICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZv
ciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAg
ICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtc
biAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRl
cmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENv
bXB1dGVkIHx8IGNvbXB1dGVkID09PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkp
IHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBj
b21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7
XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFz
ZWQgY29tcHV0YXRpb24pLlxuICBfLm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRl
eHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5
LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYg
b2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZh
bHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZh
bHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAg
ICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4
dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAg
ICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBp
ZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJl
c3VsdCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAg
ICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxu
ICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVz
aW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxl
XShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxu
ICBfLnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uo
b2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7
XG4gICAgdmFyIHNodWZmbGVkID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9
IDAsIHJhbmQ7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByYW5kID0gXy5yYW5k
b20oMCwgaW5kZXgpO1xuICAgICAgaWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0g
PSBzaHVmZmxlZFtyYW5kXTtcbiAgICAgIHNodWZmbGVkW3JhbmRdID0gc2V0W2luZGV4XTtcbiAg
ICB9XG4gICAgcmV0dXJuIHNodWZmbGVkO1xuICB9O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5k
b20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lm
aWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwg
YGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBs
ZSA9IGZ1bmN0aW9uKG9iaiwgbiwgZ3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJk
KSB7XG4gICAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4g
ICAgICByZXR1cm4gb2JqW18ucmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJl
dHVybiBfLnNodWZmbGUob2JqKS5zbGljZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAg
Ly8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFu
IGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQp
IHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5w
bHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0
dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAg
ICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAg
IH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0
ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikg
e1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAg
aWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0
dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5c
biAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlc
IiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJl
dHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0
ID0ge307XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8u
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRl
cmF0ZWUodmFsdWUsIGluZGV4LCBvYmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVl
LCBrZXkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5c
biAgLy8gR3JvdXBzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0
aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0
aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbiAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24o
cmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0
W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxu
ICAvLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIg
dG8gYGdyb3VwQnlgLCBidXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4
IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVz
dWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAg
Ly8gQ291bnRzIGluc3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4g
Y3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQg
YnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8u
Y291bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChf
LmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xu
ICB9KTtcblxuICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRo
aW5nIGl0ZXJhYmxlLlxuICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9i
aikgcmV0dXJuIFtdO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwo
b2JqKTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVu
dGl0eSk7XG4gICAgcmV0dXJuIF8udmFsdWVzKG9iaik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRo
ZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihv
YmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5
TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAv
LyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMg
YWxsIHNhdGlzZnkgdGhlIGdpdmVuXG4gIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVt
ZW50cyBhbGwgZG8gbm90IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cbiAgXy5wYXJ0aXRpb24gPSBm
dW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHBy
ZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtdO1xuICAgIF8u
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iaikge1xuICAgICAgKHByZWRpY2F0ZSh2
YWx1ZSwga2V5LCBvYmopID8gcGFzcyA6IGZhaWwpLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAg
IHJldHVybiBbcGFzcywgZmFpbF07XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8v
IC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJh
eS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4g
dGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNo
ZWNrXG4gIC8vIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8u
aGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJh
eSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJl
dHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGgg
LSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5
IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBv
YmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8g
dGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24o
YXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgu
bWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAg
fTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4q
KiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8u
bGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxs
KSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJh
eVthcnJheS5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgw
LCBhcnJheS5sZW5ndGggLSBuKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1
dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRy
b3BgLlxuICAvLyBFc3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFz
c2luZyBhbiAqKm4qKiB3aWxsIHJldHVyblxuICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUg
YXJyYXkuXG4gIF8ucmVzdCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBn
dWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQg
PyAxIDogbik7XG4gIH07XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFu
IGFycmF5LlxuICBfLmNvbXBhY3QgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZp
bHRlcihhcnJheSwgXy5pZGVudGl0eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50
YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9
IGZ1bmN0aW9uKGlucHV0LCBzaGFsbG93LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIg
b3V0cHV0ID0gW10sIGlkeCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwg
bGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIg
dmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNB
cnJheSh2YWx1ZSkgfHwgXy5pc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIC8vZmxhdHRl
biBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3RcbiAgICAgICAgaWYg
KCFzaGFsbG93KSB2YWx1ZSA9IGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCk7XG4gICAg
ICAgIHZhciBqID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBvdXRwdXQubGVuZ3Ro
ICs9IGxlbjtcbiAgICAgICAgd2hpbGUgKGogPCBsZW4pIHtcbiAgICAgICAgICBvdXRwdXRbaWR4
KytdID0gdmFsdWVbaisrXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7
XG4gICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0
dXJuIG91dHB1dDtcbiAgfTtcblxuICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJl
Y3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3IganVzdCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9
IGZ1bmN0aW9uKGFycmF5LCBzaGFsbG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNo
YWxsb3csIGZhbHNlKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJh
eSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRo
b3V0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBz
bGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNh
dGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4g
IC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFs
Z29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUg
PSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYg
KCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAg
ICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1c
biAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4
dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2
YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xu
ICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRl
ZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRl
ZCkge1xuICAgICAgICBpZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZh
bHVlKTtcbiAgICAgICAgc2VlbiA9IGNvbXB1dGVkO1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRl
ZSkge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAg
ICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4g
ICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIV8uY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtc
biAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4g
cmVzdWx0O1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUg
dW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2Vk
LWluIGFycmF5cy5cbiAgXy51bmlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEo
ZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFu
IGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4g
IC8vIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkp
IHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMu
bGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBp
IDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAo
Xy5jb250YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAx
OyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVu
dHNbal0sIGl0ZW0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3Ro
KSByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxu
ICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBv
ZiBvdGhlciBhcnJheXMuXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0
aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFy
cmF5KSB7XG4gICAgdmFyIHJlc3QgPSBmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7
XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1
cm4gIV8uY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0
b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRo
YXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24o
KSB7XG4gICAgcmV0dXJuIF8udW56aXAoYXJndW1lbnRzKTtcbiAgfTtcblxuICAvLyBDb21wbGVt
ZW50IG9mIF8uemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBz
XG4gIC8vIGVhY2ggYXJyYXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlc1xuICBfLnVuemlw
ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJy
YXksIGdldExlbmd0aCkubGVuZ3RoIHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0
aCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7
XG4gICAgICByZXN1bHRbaW5kZXhdID0gXy5wbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAg
ICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0
cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFp
cnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBr
ZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmpl
Y3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAg
Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVl
c1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3Rb
aV1bMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8g
R2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdElu
ZGV4IGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIp
IHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAg
ICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGgg
PSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5n
dGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4
ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFy
cmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4g
IH1cblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQg
cGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJ
bmRleEZpbmRlcigxKTtcbiAgXy5maW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhG
aW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91
dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBp
bnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBf
LnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtc
biAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUg
PSBpdGVyYXRlZShvYmopO1xuICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5
KTtcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3Io
KGxvdyArIGhpZ2gpIC8gMik7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1
ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93
O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2Yg
YW5kIGxhc3RJbmRleE9mIGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihk
aXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFy
cmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFy
cmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChk
aXIgPiAwKSB7XG4gICAgICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHgg
KyBsZW5ndGgsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVuZ3RoID0gaWR4
ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAg
ICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7
XG4gICAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJu
IGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVt
ICE9PSBpdGVtKSB7XG4gICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJh
eSwgaSwgbGVuZ3RoKSwgXy5pc05hTik7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCAr
IGkgOiAtMTtcbiAgICAgIH1cbiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGgg
LSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYg
KGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4g
LTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0
IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0
ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxh
cmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlz
U29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4
RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9
IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRl
IGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBB
IHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVc
biAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9s
aWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0
LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0
YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7
XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8g
c3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZh
ciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICBy
YW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4g
IC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5c
biAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0
cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3Vt
ZW50c1xuICB2YXIgZXhlY3V0ZUJvdW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5j
LCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250
ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4
dCwgYXJncyk7XG4gICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBl
KTtcbiAgICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBp
ZiAoXy5pc09iamVjdChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xu
ICB9O1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChh
c3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdh
dGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8v
IGF2YWlsYWJsZS5cbiAgXy5iaW5kID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIGlm
IChuYXRpdmVCaW5kICYmIGZ1bmMuYmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJp
bmQuYXBwbHkoZnVuYywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNG
dW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBv
biBhIGZ1bmN0aW9uJyk7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7
XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5k
KGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3Vt
ZW50cykpKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBQYXJ0aWFs
bHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNv
bWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0
cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwg
YWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxu
ICBfLnBhcnRpYWwgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNl
LmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAg
IHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIg
YXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNb
cG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRp
b24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtc
biAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3Mp
O1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIg
b2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50
c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1
cmluZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25n
IHRvIGl0LlxuICBfLmJpbmRBbGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaSwgbGVuZ3Ro
ID0gYXJndW1lbnRzLmxlbmd0aCwga2V5O1xuICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3
IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZm9y
IChpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBhcmd1bWVudHNbaV07XG4g
ICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJu
IG9iajtcbiAgfTtcblxuICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9y
aW5nIGl0cyByZXN1bHRzLlxuICBfLm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtc
biAgICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVt
b2l6ZS5jYWNoZTtcbiAgICAgIHZhciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrZXkpO1xuICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRk
cmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAg
ICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9
O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZv
ciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8g
aXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVu
Yywgd2FpdCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAg
IHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShu
dWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlv
biwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNc
biAgLy8gY2xlYXJlZC5cbiAgXy5kZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxu
ICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJl
IHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRp
bWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11
Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0
YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0
aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBU
byBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhy
b3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQs
IGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3Vz
ID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBm
dW5jdGlvbigpIHtcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/
IDAgOiBfLm5vdygpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5j
LmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJn
cyA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93
ID0gXy5ub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBm
YWxzZSkgcHJldmlvdXMgPSBub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cg
LSBwcmV2aW91cyk7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVu
dHM7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAg
ICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAg
ICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5v
dztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAg
aWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0
aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQg
PSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJl
c3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMg
bG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJp
Z2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcg
Y2FsbGVkIGZvclxuICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2Vk
LCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFk
IG9mIHRoZSB0cmFpbGluZy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGlt
bWVkaWF0ZSkge1xuICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJl
c3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBf
Lm5vdygpIC0gdGltZXN0YW1wO1xuXG4gICAgICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAw
KSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4g
ICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1l
ZGlhdGUpIHtcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xu
ICAgICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgICB9
XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnRl
eHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8u
bm93KCk7XG4gICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAg
IGlmICghdGltZW91dCkgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAg
aWYgKGNhbGxOb3cpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdz
KTtcbiAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1
cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rp
b24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlv
dSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAg
Ly8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFw
ID0gZnVuY3Rpb24oZnVuYywgd3JhcHBlcikge1xuICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBl
ciwgZnVuYyk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUg
cGFzc2VkLWluIHByZWRpY2F0ZS5cbiAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtc
biAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0
aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9u
IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAg
Ly8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93
cy5cbiAgXy5jb21wb3NlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7
XG4gICAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigp
IHtcbiAgICAgIHZhciBpID0gc3RhcnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0u
YXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3Nb
aV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9
O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBv
biBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxsLlxuICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1
bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtc
biAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAg
ICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBl
eGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBOdGggY2FsbC5cbiAgXy5iZWZv
cmUgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBm
dW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAgICAgICBtZW1vID0gZnVu
Yy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEp
IGZ1bmMgPSBudWxsO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBS
ZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUs
IG5vIG1hdHRlciBob3dcbiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBp
bml0aWFsaXphdGlvbi5cbiAgXy5vbmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAv
LyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGlu
IElFIDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRo
dXMgbWlzc2VkLlxuICB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5
SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2
YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAg
ICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0
cmluZyddO1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4g
ICAgdmFyIG5vbkVudW1JZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBj
b25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0
aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xu
XG4gICAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAn
Y29uc3RydWN0b3InO1xuICAgIGlmIChfLmhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtl
eXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7
XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYg
KHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMo
a2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1c
biAgfVxuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVy
dGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVj
dC5rZXlzYFxuICBfLmtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qo
b2JqKSkgcmV0dXJuIFtdO1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhv
YmopO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8u
aGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAg
IGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0
dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBv
ZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5p
c09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZh
ciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAg
aWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1
cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdz
IHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMg
PSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZh
bHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
Kykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4g
dmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhl
IGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0XG4gIC8vIEluIGNvbnRyYXN0
IHRvIF8ubWFwIGl0IHJldHVybnMgYW4gb2JqZWN0XG4gIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24o
b2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNv
bnRleHQpO1xuICAgIHZhciBrZXlzID0gIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9
IGtleXMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdHMgPSB7fSxcbiAgICAgICAgICBjdXJyZW50
S2V5O1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykg
e1xuICAgICAgICBjdXJyZW50S2V5ID0ga2V5c1tpbmRleF07XG4gICAgICAgIHJlc3VsdHNbY3Vy
cmVudEtleV0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4g
ICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9i
amVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0
aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tp
XSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8v
IEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0
IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIg
cmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBp
ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVz
dWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xu
ICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBh
dmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5m
dW5jdGlvbnMgPSBfLm1ldGhvZHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBb
XTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9i
altrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgp
O1xuICB9O1xuXG4gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVy
dGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVy
KF8uYWxsS2V5cyk7XG5cbiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUg
b3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pbiBvYmplY3QocylcbiAgLy8gKGh0dHBzOi8v
ZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2Jh
bF9PYmplY3RzL09iamVjdC9hc3NpZ24pXG4gIF8uZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVh
dGVBc3NpZ25lcihfLmtleXMpO1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBv
YmplY3QgdGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRLZXkgPSBmdW5jdGlv
bihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0
ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAo
dmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAg
ICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmop
KSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBv
YmplY3Qgb25seSBjb250YWluaW5nIHRoZSBhbGxvd2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBp
Y2sgPSBmdW5jdGlvbihvYmplY3QsIG9pdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1
bHQgPSB7fSwgb2JqID0gb2JqZWN0LCBpdGVyYXRlZSwga2V5cztcbiAgICBpZiAob2JqID09IG51
bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7XG4g
ICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Io
b2l0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IGZsYXR0ZW4o
YXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2
YWx1ZSwga2V5LCBvYmopIHsgcmV0dXJuIGtleSBpbiBvYmo7IH07XG4gICAgICBvYmogPSBPYmpl
Y3Qob2JqKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3Ro
OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFy
IHZhbHVlID0gb2JqW2tleV07XG4gICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkg
cmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxu
ICAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsb2NrbGlzdGVk
IHByb3BlcnRpZXMuXG4gIF8ub21pdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQp
IHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBf
Lm5lZ2F0ZShpdGVyYXRlZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5tYXAo
ZmxhdHRlbihhcmd1bWVudHMsIGZhbHNlLCBmYWxzZSwgMSksIFN0cmluZyk7XG4gICAgICBpdGVy
YXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5z
KGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRl
cmF0ZWUsIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0
aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFs
bEtleXMsIHRydWUpO1xuXG4gIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJv
bSB0aGUgZ2l2ZW4gcHJvdG90eXBlIG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0
aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3Jl
YXRlZCBvYmplY3QuXG4gIF8uY3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xu
ICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBf
LmV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4g
IC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAg
Xy5jbG9uZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1
cm4gb2JqO1xuICAgIHJldHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRl
bmQoe30sIG9iaik7XG4gIH07XG5cbiAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBv
YmosIGFuZCB0aGVuIHJldHVybnMgb2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRo
aXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3Jk
ZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0
aGUgY2hhaW4uXG4gIF8udGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGlu
dGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdo
ZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAg
Xy5pc01hdGNoID0gZnVuY3Rpb24ob2JqZWN0LCBhdHRycykge1xuICAgIHZhciBrZXlzID0gXy5r
ZXlzKGF0dHJzKSwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxs
KSByZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07
XG4gICAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0
dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVy
bmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBl
cSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9i
amVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxu
ICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXShodHRwOi8vd2lraS5lY21h
c2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSBy
ZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFy
aXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChh
ID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55
IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVk
O1xuICAgIGlmIChiIGluc3RhbmNlb2YgXykgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFy
ZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChh
KTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7
XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJl
Z3VsYXIgZXhwcmVzc2lvbnMsIGRhdGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZh
bHVlLlxuICAgICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAgIC8vIFJlZ0V4cHMgYXJl
IGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAn
L2EvaScpXG4gICAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRp
dmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVu
dDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5n
KFwiNVwiKWAuXG4gICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2Ug
J1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0
IG5vbi1yZWZsZXhpdmUuXG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8g
TmFOXG4gICAgICAgIGlmICgrYSAhPT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8v
IEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1
ZXMuXG4gICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0g
K2I7XG4gICAgICBjYXNlICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9v
bGVhbl0nOlxuICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMg
cHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8v
IG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0
aCBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5v
dCBlcXVpdmFsZW50LlxuICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIH1cblxuICAgIHZh
ciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFh
cmVBcnJheXMpIHtcbiAgICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAh
PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVy
ZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFy
cmF5YHNcbiAgICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0
b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0
b3IgIT09IGJDdG9yICYmICEoXy5pc0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9m
IGFDdG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJD
dG9yKSAmJiBiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAg
ICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkg
Zm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGlj
XG4gICAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIu
MywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG5cbiAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sg
b2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25s
eSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFj
ayA9IGFTdGFjayB8fCBbXTtcbiAgICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxl
bmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBM
aW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRo
ZSBudW1iZXIgb2ZcbiAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlm
IChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAg
IH1cblxuICAgIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJz
ZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucHVzaChhKTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxu
ICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChh
cmVBcnJheXMpIHtcbiAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUg
aWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5n
dGg7XG4gICAgICBpZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAg
Ly8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVy
dGllcy5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3Ro
XSwgYltsZW5ndGhdLCBhU3RhY2ssIGJTdGFjaykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAg
ICB9IGVsc2Uge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICB2YXIga2V5
cyA9IF8ua2V5cyhhKSwga2V5O1xuICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAv
LyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJv
cGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICBpZiAoXy5rZXlz
KGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3Ro
LS0pIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9
IGtleXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKCEoXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0s
IGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1c
biAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJz
ZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJl
dHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hl
Y2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBi
KSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXks
IHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBu
byBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmop
IHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlr
ZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3Vt
ZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhv
YmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVs
ZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9i
aiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUg
YW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5
XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAv
LyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9u
KG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0g
J2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBB
ZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5n
LCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvci5cbiAgXy5lYWNoKFsnQXJndW1l
bnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAn
RXJyb3InXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsg
bmFtZSArICddJztcbiAgICB9O1xuICB9KTtcblxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJz
aW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8v
IHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICgh
Xy5pc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9u
KG9iaikge1xuICAgICAgcmV0dXJuIF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1c
blxuICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5k
IHNvbWUgdHlwZW9mIGJ1Z3MgaW4gb2xkIHY4LFxuICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4g
U2FmYXJpIDggKCMxOTI5KS5cbiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBl
b2YgSW50OEFycmF5ICE9ICdvYmplY3QnKSB7XG4gICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xu
ICAgIH07XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4g
IF8uaXNGaW5pdGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAm
JiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFs
dWUgYE5hTmA/IChOYU4gaXMgdGhlIG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0
c2VsZikuXG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJl
cihvYmopICYmIG9iaiAhPT0gK29iajtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEg
Ym9vbGVhbj9cbiAgXy5pc0Jvb2xlYW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2Jq
ID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29i
amVjdCBCb29sZWFuXSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBu
dWxsP1xuICBfLmlzTnVsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51
bGw7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNV
bmRlZmluZWQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4g
IH07XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBo
YXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdv
cmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7
XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkp
O1xuICB9O1xuXG4gIC8vIFV0aWxpdHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0t
XG5cbiAgLy8gUnVuIFVuZGVyc2NvcmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmlu
ZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBh
IHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1
bmN0aW9uKCkge1xuICAgIHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4g
dGhpcztcbiAgfTtcblxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9y
IGRlZmF1bHQgaXRlcmF0ZWVzLlxuICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAg
ICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rp
b25zLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBfLmNvbnN0YW50ID0g
ZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4g
dmFsdWU7XG4gICAgfTtcbiAgfTtcblxuICBfLm5vb3AgPSBmdW5jdGlvbigpe307XG5cbiAgXy5w
cm9wZXJ0eSA9IHByb3BlcnR5O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdp
dmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9m
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9
IDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtc
blxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVj
dCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hl
ciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93
bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBf
LmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlv
biAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0
KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVl
ID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xu
ICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXgg
KGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAo
bWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxu
ICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsg
MSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3Vy
cmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5j
dGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgIC8v
IExpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgZXNjYXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7
XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxu
ICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2
MDsnXG4gIH07XG4gIHZhciB1bmVzY2FwZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAg
Ly8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20g
SFRNTCBpbnRlcnBvbGF0aW9uLlxuICB2YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkg
e1xuICAgIHZhciBlc2NhcGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBb
bWF0Y2hdO1xuICAgIH07XG4gICAgLy8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhh
dCBuZWVkcyB0byBiZSBlc2NhcGVkXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1h
cCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7
XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVy
biBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycg
OiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0
cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4g
IH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBl
ID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRo
ZSBuYW1lZCBgcHJvcGVydHlgIGlzIGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVc
biAgLy8gYG9iamVjdGAgYXMgY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVz
dWx0ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSwgZmFsbGJhY2spIHtcbiAgICB2YXIgdmFs
dWUgPSBvYmplY3QgPT0gbnVsbCA/IHZvaWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgaWYg
KHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgIHZhbHVlID0gZmFsbGJhY2s7XG4gICAgfVxuICAg
IHJldHVybiBfLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7
XG4gIH07XG5cbiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhp
biB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3Jhcnkg
RE9NIGlkcy5cbiAgdmFyIGlkQ291bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihw
cmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVm
aXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2Nv
cmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBm
b2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMu
XG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxT
XSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBl
c2NhcGUgICAgICA6IC88JS0oW1xcc1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0
b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBh
blxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBu
ZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9N
YXRjaCA9IC8oLileLztcblxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2Nh
cGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5c
biAgdmFyIGVzY2FwZXMgPSB7XG4gICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAg
ICAgJ1xcXFwnLFxuICAgICdcXHInOiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAg
ICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2
YXIgZXNjYXBlciA9IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIg
ZXNjYXBlQ2hhciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2Fw
ZXNbbWF0Y2hdO1xuICB9O1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2lt
aWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVt
cGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFj
ZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVk
IGNvZGUuXG4gIC8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMg
Y29tcGF0aWJpbGl0eS5cbiAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIHNldHRpbmdzLCBv
bGRTZXR0aW5ncykge1xuICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdz
ID0gb2xkU2V0dGluZ3M7XG4gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywg
Xy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9u
ZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0g
UmVnRXhwKFtcbiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAg
ICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0
aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcs
ICdnJyk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0
cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFy
IHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9u
KG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBz
b3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZXIsIGVzY2Fw
ZUNoYXIpO1xuICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlm
IChlc2NhcGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUg
KyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAo
aW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRl
cnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2
YWx1YXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxu
X19wKz0nXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCBy
ZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZmVzdC5cbiAgICAgIHJldHVybiBtYXRj
aDtcbiAgICB9KTtcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJp
YWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5c
biAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4n
ICsgc291cmNlICsgJ31cXG4nO1xuXG4gICAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9
QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9
X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4g
X19wO1xcbic7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihz
ZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUp
IHtcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAg
ICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNh
bGwodGhpcywgZGF0YSwgXyk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVk
IHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB2YXIgYXJn
dW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJztcbiAgICB0ZW1wbGF0ZS5zb3VyY2Ug
PSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAg
IHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24u
IFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5jaGFpbiA9
IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAgICBpbnN0YW5j
ZS5fY2hhaW4gPSB0cnVlO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcblxuICAvLyBPT1Bc
biAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEg
ZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1
c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwg
dGhlXG4gIC8vIHVuZGVyc2NvcmUgZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNo
YWluZWQuXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVy
bWVkaWF0ZSByZXN1bHRzLlxuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikg
e1xuICAgIHJldHVybiBpbnN0YW5jZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAg
fTtcblxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29y
ZSBvYmplY3QuXG4gIF8ubWl4aW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5j
dGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0g
b2JqW25hbWVdO1xuICAgICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAg
ICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywg
YXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFy
Z3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5k
ZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xu
XG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4g
IF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxp
Y2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5
UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAg
IHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1l
bnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykg
JiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiByZXN1bHQo
dGhpcywgb2JqKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5
IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAn
c2xpY2UnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25h
bWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4g
cmVzdWx0KHRoaXMsIG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAg
ICB9O1xuICB9KTtcblxuICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFu
ZCBjaGFpbmVkIG9iamVjdC5cbiAgXy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAg
ICByZXR1cm4gdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcg
cHJveHkgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1
Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8ucHJvdG90eXBl
LnZhbHVlT2YgPSBfLnByb3RvdHlwZS50b0pTT04gPSBfLnByb3RvdHlwZS52YWx1ZTtcblxuICBf
LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnJyArIHRoaXMu
X3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gQU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBl
bmQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBBTUQgbG9hZGVyc1xuICAvLyB0aGF0IG1heSBub3Qg
ZW5mb3JjZSBuZXh0LXR1cm4gc2VtYW50aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVy
YWxcbiAgLy8gcHJhY3RpY2UgZm9yIEFNRCByZWdpc3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3Vz
LCB1bmRlcnNjb3JlIHJlZ2lzdGVyc1xuICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBs
aWtlIGpRdWVyeSwgaXQgaXMgYSBiYXNlIGxpYnJhcnkgdGhhdCBpc1xuICAvLyBwb3B1bGFyIGVu
b3VnaCB0byBiZSBidW5kbGVkIGluIGEgdGhpcmQgcGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQg
b2ZcbiAgLy8gYW4gQU1EIGxvYWQgcmVxdWVzdC4gVGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUg
YW4gZXJyb3Igd2hlbiBhblxuICAvLyBhbm9ueW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNp
ZGUgb2YgYSBsb2FkZXIgcmVxdWVzdC5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlv
bicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlv
bigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59LmNhbGwodGhpcykpO1xuIgog
CiAvKioqLyB9KSwKIC8qIDQyMiAqLwpAQCAtMTQ5MDI4LDcgKzE0OTAyOCw3IEBAIHZhciBKU0hJ
TlQgPSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gY29tYmluZShkZXN0LCBzcmMpIHsKICAg
ICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkgewotICAgICAgaWYgKF8u
aGFzKEpTSElOVC5ibGFja2xpc3QsIG5hbWUpKSByZXR1cm47CisgICAgICBpZiAoXy5oYXMoSlNI
SU5ULmJsb2NrbGlzdCwgbmFtZSkpIHJldHVybjsKICAgICAgIGRlc3RbbmFtZV0gPSBzcmNbbmFt
ZV07CiAgICAgfSk7CiAgIH0KQEAgLTE0OTMxMyw3ICsxNDkzMTMsNyBAQCB2YXIgSlNISU5UID0g
KGZ1bmN0aW9uKCkgewogICAgICAgICAgIGtleSA9IGtleS5zbGljZSgxKTsKICAgICAgICAgICB2
YWwgPSBmYWxzZTsKIAotICAgICAgICAgIEpTSElOVC5ibGFja2xpc3Rba2V5XSA9IGtleTsKKyAg
ICAgICAgICBKU0hJTlQuYmxvY2tsaXN0W2tleV0gPSBrZXk7CiAgICAgICAgICAgZGVsZXRlIHBy
ZWRlZmluZWRba2V5XTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICBwcmVkZWZba2V5XSA9
ICh2YWwgPT09ICJ0cnVlIik7CkBAIC0xNTQxMjAsNyArMTU0MTIwLDcgQEAgdmFyIEpTSElOVCA9
IChmdW5jdGlvbigpIHsKICAgICAgIEpTSElOVC5lcnJvcnMgPSBbXTsKICAgICAgIEpTSElOVC51
bmRlZnMgPSBbXTsKICAgICAgIEpTSElOVC5pbnRlcm5hbHMgPSBbXTsKLSAgICAgIEpTSElOVC5i
bGFja2xpc3QgPSB7fTsKKyAgICAgIEpTSElOVC5ibG9ja2xpc3QgPSB7fTsKICAgICAgIEpTSElO
VC5zY29wZSA9ICIobWFpbikiOwogICAgIH0KIApAQCAtMTU0MTQ5LDcgKzE1NDE0OSw3IEBAIHZh
ciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAKICAgICAgICAgaWYgKGl0ZW1bMF0gPT09ICItIikg
ewogICAgICAgICAgIHNsaWNlID0gaXRlbS5zbGljZSgxKTsKLSAgICAgICAgICBKU0hJTlQuYmxh
Y2tsaXN0W3NsaWNlXSA9IHNsaWNlOworICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rbc2xpY2Vd
ID0gc2xpY2U7CiAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gcHJlZGVmaW5lZCBpZiB0aGVyZQog
ICAgICAgICAgIGRlbGV0ZSBwcmVkZWZpbmVkW3NsaWNlXTsKICAgICAgICAgfSBlbHNlIHsKQEAg
LTE1ODQ5OCw3ICsxNTg0OTgsNyBAQCBleHBvcnRzLnZhbCA9IHsKICAgcHJlZGVmICAgICAgIDog
ZmFsc2UsCiAKICAgLyoqCi0gICAqIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkg
YSB3aGl0ZSBsaXN0IG9mIGdsb2JhbCB2YXJpYWJsZXMgdGhhdAorICAgKiBUaGlzIG9wdGlvbiBj
YW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFuIGFsbG93IGxpc3Qgb2YgZ2xvYmFsIHZhcmlhYmxlcyB0
aGF0CiAgICAqIGFyZSBub3QgZm9ybWFsbHkgZGVmaW5lZCBpbiB0aGUgc291cmNlIGNvZGUuIFRo
aXMgaXMgbW9zdCB1c2VmdWwgd2hlbgogICAgKiBjb21iaW5lZCB3aXRoIHRoZSBgdW5kZWZgIG9w
dGlvbiBpbiBvcmRlciB0byBzdXBwcmVzcyB3YXJuaW5ncyBmb3IKICAgICogcHJvamVjdC1zcGVj
aWZpYyBnbG9iYWwgdmFyaWFibGVzLgpAQCAtMTk1ODI5LDcgKzE5NTgyOSw3IEBAIGZ1bmN0aW9u
IEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSAKIAl2YXIgcmVnZXhTaW5nbGVFc2NhcGUg
PSAvWyInXFxcYlxmXG5cclx0XS87CiAKIAl2YXIgcmVnZXhEaWdpdCA9IC9bMC05XS87Ci0JdmFy
IHJlZ2V4V2hpdGVsaXN0ID0gL1sgISMtJlwoLVxbXF0tfl0vOworCXZhciByZWdleEFsbG93bGlz
dCA9IC9bICEjLSZcKC1cW1xdLX5dLzsKIAogCXZhciBqc2VzYyA9IGZ1bmN0aW9uKGFyZ3VtZW50
LCBvcHRpb25zKSB7CiAJCS8vIEhhbmRsZSBvcHRpb25zCkBAIC0xOTYwMDQsNyArMTk2MDA0LDcg
QEAgZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5vZGUpIAogCQkJCX0KIAkJCX0K
IAkJCWlmICghb3B0aW9ucy5lc2NhcGVFdmVyeXRoaW5nKSB7Ci0JCQkJaWYgKHJlZ2V4V2hpdGVs
aXN0LnRlc3QoY2hhcmFjdGVyKSkgeworCQkJCWlmIChyZWdleEFsbG93bGlzdC50ZXN0KGNoYXJh
Y3RlcikpIHsKIAkJCQkJLy8gSXTigJlzIGEgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlciB0aGF0
IGlzIG5vdCBgImAsIGAnYCBvciBgXGAsCiAJCQkJCS8vIHNvIGRvbuKAmXQgZXNjYXBlIGl0Lgog
CQkJCQlyZXN1bHQgKz0gY2hhcmFjdGVyOwpAQCAtMjA5MzM0LDcgKzIwOTMzNCw3IEBAIHZhciBf
Z2V0SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXUKIAogZXhwb3J0cy5jYWxsID0gY2Fs
bDsKIGV4cG9ydHMuX2NhbGwgPSBfY2FsbDsKLWV4cG9ydHMuaXNCbGFja2xpc3RlZCA9IGlzQmxh
Y2tsaXN0ZWQ7CitleHBvcnRzLmlzQmxvY2tsaXN0ZWQgPSBpc0Jsb2NrbGlzdGVkOwogZXhwb3J0
cy52aXNpdCA9IHZpc2l0OwogZXhwb3J0cy5za2lwID0gc2tpcDsKIGV4cG9ydHMuc2tpcEtleSA9
IHNraXBLZXk7CkBAIC0yMDk0MTAsOSArMjA5NDEwLDkgQEAgZnVuY3Rpb24gX2NhbGwoZm5zKSB7
CiAgIHJldHVybiBmYWxzZTsKIH0KIAotZnVuY3Rpb24gaXNCbGFja2xpc3RlZCgpIHsKLSAgdmFy
IGJsYWNrbGlzdCA9IHRoaXMub3B0cy5ibGFja2xpc3Q7Ci0gIHJldHVybiBibGFja2xpc3QgJiYg
YmxhY2tsaXN0LmluZGV4T2YodGhpcy5ub2RlLnR5cGUpID4gLTE7CitmdW5jdGlvbiBpc0Jsb2Nr
bGlzdGVkKCkgeworICB2YXIgYmxvY2tsaXN0ID0gdGhpcy5vcHRzLmJsb2NrbGlzdDsKKyAgcmV0
dXJuIGJsb2NrbGlzdCAmJiBibG9ja2xpc3QuaW5kZXhPZih0aGlzLm5vZGUudHlwZSkgPiAtMTsK
IH0KIAogZnVuY3Rpb24gdmlzaXQoKSB7CkBAIC0yMDk0MjAsNyArMjA5NDIwLDcgQEAgZnVuY3Rp
b24gdmlzaXQoKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgaWYgKHRoaXMuaXNCbGFj
a2xpc3RlZCgpKSB7CisgIGlmICh0aGlzLmlzQmxvY2tsaXN0ZWQoKSkgewogICAgIHJldHVybiBm
YWxzZTsKICAgfQogCkBAIC0yMTEwNzgsNyArMjExMDc4LDcgQEAgZnVuY3Rpb24gc2hvdWxkSWdu
b3JlS2V5KGtleSkgewogCiAgIGlmIChrZXkgPT09ICJlbnRlciIgfHwga2V5ID09PSAiZXhpdCIg
fHwga2V5ID09PSAic2hvdWxkU2tpcCIpIHJldHVybiB0cnVlOwogCi0gIGlmIChrZXkgPT09ICJi
bGFja2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlzIikgcmV0
dXJuIHRydWU7CisgIGlmIChrZXkgPT09ICJibG9ja2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUi
IHx8IGtleSA9PT0gInNraXBLZXlzIikgcmV0dXJuIHRydWU7CiAKICAgcmV0dXJuIGZhbHNlOwog
fQpAQCAtMjIyNzY4LDcgKzIyMjc2OCw3IEBAIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRj
YXJkKG9iaikgeyAKIAogY29uc3QgbGlmZWN5Y2xlTWV0aG9kcyA9IG5ldyBTZXQoWyJjb21wb25l
bnRXaWxsVW5tb3VudCIsICJjb21wb25lbnREaWRNb3VudCIsICJjb21wb25lbnRXaWxsTW91bnQi
LCAiY29tcG9uZW50RGlkVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVcGRhdGUiLCAiY29tcG9uZW50
RGlkQ2F0Y2giLCAiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyJdKTsKIAotY29uc3Qgd2hpdGVs
aXN0ZWRQcm9wZXJ0aWVzID0gbmV3IFNldChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsK
K2NvbnN0IGFsbG93bGlzdGVkUHJvcGVydGllcyA9IG5ldyBTZXQoWyJwcm9wcyIsICJjb250ZXh0
IiwgInJlZnMiXSk7CiAKIGZ1bmN0aW9uIGdldEluaXRpYWxQcm9wcyhyZWFsbSwgY29tcG9uZW50
VHlwZSkgewogICBsZXQgcHJvcHNOYW1lID0gbnVsbDsKQEAgLTIyMjkzOCw3ICsyMjI5MzgsNyBA
QCBmdW5jdGlvbiBldmFsdWF0ZUNsYXNzQ29uc3RydWN0b3IocmVhbG0sCiAgICAgbGV0IGluc3Rh
bmNlID0gKDAsIF9pbmRleDIuQ29uc3RydWN0KShyZWFsbSwgY29uc3RydWN0b3JGdW5jLCBbcHJv
cHMsIGNvbnRleHRdKTsKICAgICAoMCwgX2ludmFyaWFudDIuZGVmYXVsdCkoaW5zdGFuY2UgaW5z
dGFuY2VvZiBfaW5kZXguT2JqZWN0VmFsdWUpOwogICAgIGZvciAobGV0IFtwcm9wZXJ0eU5hbWVd
IG9mIGluc3RhbmNlLnByb3BlcnRpZXMpIHsKLSAgICAgIGlmICghd2hpdGVsaXN0ZWRQcm9wZXJ0
aWVzLmhhcyhwcm9wZXJ0eU5hbWUpKSB7CisgICAgICBpZiAoIWFsbG93bGlzdGVkUHJvcGVydGll
cy5oYXMocHJvcGVydHlOYW1lKSkgewogICAgICAgICBpbnN0YW5jZVByb3BlcnRpZXMuYWRkKHBy
b3BlcnR5TmFtZSk7CiAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417015</attachid>
            <date>2021-01-05 09:58:16 -0800</date>
            <delta_ts>2021-01-05 12:58:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>1393309</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzExNDApCisr
KyBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDIxLTAxLTA0ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4K
KworICAgICAgICBSZW1vdmUgbm9uLWluY2x1c2l2ZSBsYW5ndWFnZSBmcm9tIGNvcHkgb2YgSmV0
U3RyZWFtIDIuMCBpbiBXZWJzaXRlcy8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogSmV0U3RyZWFtMi4wL2NvZGUtbG9hZC9pbnNwZWN0b3ItcGF5bG9h
ZC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLldlYkluc3BlY3Rvci5SZXNvdXJj
ZS5XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0V2l0aFN1
YnN0aXR1dGlvblN0cmluZy5zdHlsZUZvcm1hdHRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RE9NTm9kZS5XZWJJbnNwZWN0b3IuUmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Vmlldy5wcm90b3R5cGUuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuaXNBbGxvd2xpc3Rl
ZFByb3BlcnR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLldlYkluc3BlY3Rvci5S
ZXNvdXJjZS5XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0
V2l0aFN1YnN0aXR1dGlvblN0cmluZy5pc1doaXRlbGlzdGVkUHJvcGVydHkpOiBEZWxldGVkLgor
ICAgICAgICAqIEpldFN0cmVhbTIuMC93ZWItdG9vbGluZy1iZW5jaG1hcmsvYnJvd3Nlci5qczoK
KyAgICAgICAgKiBKZXRTdHJlYW0yLjAvd2ViLXRvb2xpbmctYmVuY2htYXJrL2NsaS5qczoKKwog
MjAxOS0wOS0xOCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJHUFVdIFVwZGF0ZSBkZW1vcyB0byB3b3JrIG9uIFNUUCA5MgpJbmRleDogV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvY29kZS1sb2FkL2luc3BlY3Rvci1w
YXlsb2FkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvSmV0U3Ry
ZWFtMi4wL2NvZGUtbG9hZC9pbnNwZWN0b3ItcGF5bG9hZC5qcwkocmV2aXNpb24gMjcxMTM5KQor
KysgV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvY29kZS1sb2FkL2luc3Bl
Y3Rvci1wYXlsb2FkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01ODA5LDkgKzU4MDksOSBAQCBmdW5j
dGlvbiBmbG9hdEZvcm1hdHRlcihvYmosdG9rZW4pCiBmdW5jdGlvbiBpbnRlZ2VyRm9ybWF0dGVy
KG9iaikKIHtsZXQgdmFsdWU9dHlwZW9mIG9iai52YWx1ZT09PSJudW1iZXIiP29iai52YWx1ZTpv
YmouZGVzY3JpcHRpb247cmV0dXJuIFN0cmluZy5zdGFuZGFyZEZvcm1hdHRlcnMuZCh2YWx1ZSk7
fQogdmFyIGN1cnJlbnRTdHlsZT1udWxsO2Z1bmN0aW9uIHN0eWxlRm9ybWF0dGVyKG9iaikKLXtj
dXJyZW50U3R5bGU9e307dmFyIGJ1ZmZlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7
YnVmZmVyLnNldEF0dHJpYnV0ZSgic3R5bGUiLG9iai5kZXNjcmlwdGlvbik7Zm9yKHZhciBpPTA7
aTxidWZmZXIuc3R5bGUubGVuZ3RoO2krKyl7dmFyIHByb3BlcnR5PWJ1ZmZlci5zdHlsZVtpXTtp
Zihpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpKQore2N1cnJlbnRTdHlsZT17fTt2YXIg
YnVmZmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtidWZmZXIuc2V0QXR0cmlidXRl
KCJzdHlsZSIsb2JqLmRlc2NyaXB0aW9uKTtmb3IodmFyIGk9MDtpPGJ1ZmZlci5zdHlsZS5sZW5n
dGg7aSsrKXt2YXIgcHJvcGVydHk9YnVmZmVyLnN0eWxlW2ldO2lmKGlzQWxsb3dsaXN0ZWRQcm9w
ZXJ0eShwcm9wZXJ0eSkpCiBjdXJyZW50U3R5bGVbcHJvcGVydHldPWJ1ZmZlci5zdHlsZVtwcm9w
ZXJ0eV07fX0KLWZ1bmN0aW9uIGlzV2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkKK2Z1bmN0
aW9uIGlzQWxsb3dsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkKIHtmb3IodmFyIHByZWZpeCBvZlsi
YmFja2dyb3VuZCIsImJvcmRlciIsImNvbG9yIiwiZm9udCIsImxpbmUiLCJtYXJnaW4iLCJwYWRk
aW5nIiwidGV4dCJdKXtpZihwcm9wZXJ0eS5zdGFydHNXaXRoKHByZWZpeCl8fHByb3BlcnR5LnN0
YXJ0c1dpdGgoIi13ZWJraXQtIitwcmVmaXgpKQogcmV0dXJuIHRydWU7fQogcmV0dXJuIGZhbHNl
O30KSW5kZXg6IFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvSmV0U3RyZWFtMi4wL3dlYi10b29s
aW5nLWJlbmNobWFyay9icm93c2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL2Jyb3dzZXJi
ZW5jaC5vcmcvSmV0U3RyZWFtMi4wL3dlYi10b29saW5nLWJlbmNobWFyay9icm93c2VyLmpzCShy
ZXZpc2lvbiAyNzExMzkpCisrKyBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0cmVhbTIu
MC93ZWItdG9vbGluZy1iZW5jaG1hcmsvYnJvd3Nlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAz
ODgsMTUgKzEwMzg4LDE1IEBAIHRyYXZlcnNlLnJlbW92ZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAo
dHIKICAgcmV0dXJuIHRyZWU7CiB9OwogCi1mdW5jdGlvbiBoYXNCbGFja2xpc3RlZFR5cGUocGF0
aCwgc3RhdGUpIHsKK2Z1bmN0aW9uIGhhc0Jsb2NrbGlzdGVkVHlwZShwYXRoLCBzdGF0ZSkgewog
ICBpZiAocGF0aC5ub2RlLnR5cGUgPT09IHN0YXRlLnR5cGUpIHsKICAgICBzdGF0ZS5oYXMgPSB0
cnVlOwogICAgIHBhdGguc3RvcCgpOwogICB9CiB9CiAKLXRyYXZlcnNlLmhhc1R5cGUgPSBmdW5j
dGlvbiAodHJlZSwgc2NvcGUsIHR5cGUsIGJsYWNrbGlzdFR5cGVzKSB7Ci0gIGlmICgoMCwgX2lu
Y2x1ZGVzMi5kZWZhdWx0KShibGFja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNl
OwordHJhdmVyc2UuaGFzVHlwZSA9IGZ1bmN0aW9uICh0cmVlLCBzY29wZSwgdHlwZSwgYmxvY2ts
aXN0VHlwZXMpIHsKKyAgaWYgKCgwLCBfaW5jbHVkZXMyLmRlZmF1bHQpKGJsb2NrbGlzdFR5cGVz
LCB0cmVlLnR5cGUpKSByZXR1cm4gZmFsc2U7CiAKICAgaWYgKHRyZWUudHlwZSA9PT0gdHlwZSkg
cmV0dXJuIHRydWU7CiAKQEAgLTEwNDA2LDggKzEwNDA2LDggQEAgdHJhdmVyc2UuaGFzVHlwZSA9
IGZ1bmN0aW9uICh0cmVlLCBzY29wZQogICB9OwogCiAgIHRyYXZlcnNlKHRyZWUsIHsKLSAgICBi
bGFja2xpc3Q6IGJsYWNrbGlzdFR5cGVzLAotICAgIGVudGVyOiBoYXNCbGFja2xpc3RlZFR5cGUK
KyAgICBibG9ja2xpc3Q6IGJsb2NrbGlzdFR5cGVzLAorICAgIGVudGVyOiBoYXNCbG9ja2xpc3Rl
ZFR5cGUKICAgfSwgc2NvcGUsIHN0YXRlKTsKIAogICByZXR1cm4gc3RhdGUuaGFzOwpAQCAtMzY5
NzMsNyArMzY5NzMsNyBAQCBmdW5jdGlvbiBUeXBlZEFycmF5U3BlY2llc0NyZWF0ZShyZWFsbSwg
CiB2YXIgcHJvbWlzZUV4aXN0cyA9IHR5cGVvZiBQcm9taXNlID09PSAnZnVuY3Rpb24nOwogCiAv
KiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqLwotdmFyIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBz
ZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUg
aWQtYmxhY2tsaXN0Cit2YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3Qn
ID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibG9ja2xpc3QKIAog
dmFyIHN5bWJvbEV4aXN0cyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnOwogdmFyIG1h
cEV4aXN0cyA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnOwpAQCAtMTEzNTg3LDcgKzExMzU4
Nyw3IEBAIG1vZHVsZS5leHBvcnRzID0gIntcInZlcnNpb25cIjozLFwic291cmMKIC8qIDQwNSAq
LwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9
ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNyBbVmFsZXJpbyBQ
cm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBcbi8qIVxuV2ViIEJ1aWxkOiBodHRw
czovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5YWU3MTY3YzU4MDdiMTczZDVkZWZm
NjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxuZGVzY3JpcHRpb246IFRoZSBoZWFy
dCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNvcHlyaWdo
dDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0
aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUgTW9vVG9vbHMgcHJvZHVjdGlvbiB0
ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMvKVxuXG5pbnNwaXJhdGlvbjpcbiAg
LSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFzZS5qc10oaHR0cDovL2RlYW4u
ZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5cmlnaHQgKGMpIDIwMDYgRGVh
biBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXShodHRwOi8vb3Bl
bnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocClcbiAgLSBTb21lIGZ1bmN0aW9u
YWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDovL3Byb3RvdHlwZWpzLm9yZykg
Q29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24sIFtNSVQgTGljZW5zZV0oaHR0
cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcblxucHJvdmlkZXM6
IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0YW5jZU9mLCBOYXRpdmVdXG5cbi4u
LlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFs
ZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLykuKi9cbihmdW5jdGlv
bigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9uOiAnMS42LjAnLFxuXHRidWlsZDog
JzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVlOTVlMmInXG59O1xuXG4vLyB0eXBl
T2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMudHlwZU9mID0gZnVuY3Rpb24oaXRl
bSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cdGlmIChpdGVtLiRmYW1p
bHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xuXG5cdGlmIChpdGVtLm5vZGVOYW1l
KXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gJ2VsZW1lbnQnO1xuXHRcdGlm
IChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8pLnRlc3QoaXRlbS5ub2RlVmFsdWUp
ID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBlbHNlIGlmICh0eXBlb2YgaXRlbS5s
ZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVlJyBpbiBpdGVtKSByZXR1cm4gJ2Fy
Z3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1cm4gJ2NvbGxlY3Rpb24nO1xu
XHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxudmFyIGluc3RhbmNlT2YgPSB0aGlz
Lmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qpe1xuXHRpZiAoaXRlbSA9PSBudWxs
KSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9IGl0ZW0uJGNvbnN0cnVjdG9yIHx8
IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1Y3Rvcil7XG5cdFx0aWYgKGNvbnN0
cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRcdGNvbnN0cnVjdG9yID0gY29uc3Ry
dWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5cdGlmICghaXRlbS5oYXNPd25Qcm9w
ZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9cblx0cmV0dXJuIGl0ZW0gaW5zdGFu
Y2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFyIGVudW1lcmFibGVzID0gdHJ1ZTtc
bmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVyYWJsZXMgPSBudWxsO1xuaWYgKGVu
dW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJvcGVydHknLCAndmFsdWVPZicsICdp
c1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5nJywg
J3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlvbiBmb3JFYWNoT2JqZWN0RW51bWJl
cmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChlbnVtZXJhYmxlcykgZm9yICh2YXIg
aSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGsgPSBlbnVtZXJhYmxlc1tp
XTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28gb3ZlcmxvYWRTZXR0ZXIgY2Fu
IGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1bmN0aW9uLCB3aXRob3V0IHN3YXBw
aW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBm
bi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1cbi8qPC9sdElFOD4qL1xuXG4vLyBG
dW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24gPSB0aGlzLkZ1bmN0aW9uO1xuXG5G
dW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xu
XHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoYSA9
PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1cmFsIHx8IHR5cGVvZiBhICE9ICdz
dHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2VsZi5jYWxsKHRoaXMsIGssIGFba10p
O1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShh
LCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRz
ZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xufTtc
blxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFs
KXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSl7XG5cdFx0dmFyIGFy
Z3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0cmluZycpIGFyZ3MgPSBhO1xuXHRc
dGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdzID0gYXJndW1lbnRzO1xuXHRcdGVs
c2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRpZiAoYXJncyl7XG5cdFx0XHRyZXN1
bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgcmVz
dWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1
bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24oa2V5
LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG5G
dW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRo
aXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuLy8gRnJv
bVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbkFycmF5LmNvbnZlcnQg
PSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIFtdO1xuXHRyZXR1
cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnKSA/
ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDogc2xpY2UuY2FsbChpdGVtKSA6IFtp
dGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJu
ICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVt
KXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7XG5cdHJldHVybiBpc0Zpbml0ZShu
dW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmluZy5jb252ZXJ0ID0gZnVuY3Rpb24o
aXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5cblxuRnVuY3Rpb24uZnJvbSA9IEZ1
bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJlci5jb252ZXJ0O1xuU3RyaW5nLmZy
b20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJvdGVjdFxuXG5GdW5jdGlvbi5pbXBs
ZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kaGlkZGVuID0gdHJ1ZTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0OiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8v
IFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlvbihuYW1lLCBvYmplY3Qpe1xu
XHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHZh
ciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiAodHlwZU9mKGl0ZW0p
ID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMnICsgbmFtZV0gPSB0eXBlQ2hlY2s7
XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9iamVjdC5wcm90b3R5cGUuJGZhbWls
eSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93ZXI7XG5cdFx0XHR9KS5oaWRlKCk7
XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiBudWxs
O1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVjdC4kY29uc3RydWN0b3IgPSBUeXBl
O1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG9iamVjdDtcblxuXHRyZXR1cm4g
b2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztc
blxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIChpdGVtICE9
IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYmIHRvU3RyaW5nLmNhbGwo
aXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtcblxudmFyIGhvb2tzID0ge307XG5c
bnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0dmFyIHR5cGUgPSB0eXBlT2Yob2Jq
ZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBlXSB8fCAoaG9va3NbdHlwZV0gPSBb
XSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYg
KG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXG5cdHZhciBob29rcyA9IGhvb2tz
T2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKyl7XG5c
dFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlwZU9mKGhvb2spID09ICd0eXBlJykg
aW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtcblx0XHRlbHNlIGhvb2suY2FsbCh0
aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHByZXZpb3VzID0gdGhpcy5wcm90b3R5
cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVk
KSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxuXHRpZiAodGhpc1tuYW1lXSA9PSBu
dWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxsKHRoaXMsIG5h
bWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRob2QuYXBwbHkoaXRlbSwgc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52YXIgZXh0ZW5kID0gZnVuY3Rpb24o
bmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xu
XHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAh
cHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDtcbn07XG5cblR5cGUuaW1w
bGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpLFxuXG5c
dGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5cblx0YWxpYXM6IGZ1bmN0aW9uKG5h
bWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0aGlzLCBuYW1lLCB0aGlzLnByb3Rv
dHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0bWlycm9yOiBmdW5j
dGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2goaG9vayk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywgVHlwZSk7XG5cbi8vIERlZmF1bHQg
VHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0LCBtZXRob2RzKXtcblx0
dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0XHRwcm90b3R5cGUgPSBvYmplY3Qu
cHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9IG5ldyBUeXBlKG5hbWUsIG9iamVj
dCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRnZW5lcmljID0gb2JqZWN0W2tleV0s
XG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5cdFx0aWYgKGdlbmVyaWMpIGdlbmVy
aWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJvdG8pIG9iamVjdC5pbXBsZW1lbnQo
a2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYgKGlzVHlwZSl7XG5cdFx0dmFyIG1l
dGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKG1ldGhvZHNb
MF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYg
KCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsg
aSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVbbWV0aG9k
c1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIHByb3Rv
dHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXldLCBrZXkpO1xuXHRcdH07XG5c
dH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgnU3RyaW5nJywgU3RyaW5nLCBbXG5c
dCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAnY29udGFpbnMnLCAnaW5kZXhPZics
ICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdyZXBsYWNlJywgJ3NlYXJjaCcsXG5c
dCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5nJywgJ3RyaW0nLCAndG9Mb3dl
ckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBBcnJheSwgW1xuXHQncG9wJywgJ3B1
c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2Nv
bmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnZmls
dGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUnLCAncmVkdWNlJywgJ3JlZHVj
ZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51bWJlciwgW1xuXHQndG9FeHBvbmVu
dGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvUHJlY2lzaW9uJ1xuXSkoJ0Z1
bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2NhbGwnLCAnYmluZCdcbl0pKCdSZWdF
eHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0pKCdPYmplY3QnLCBPYmplY3QsIFtc
blx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2tleXMn
LFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgJ2dldE93
blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lvbnMnLCAnaXNFeHRlbnNpYmxlJywg
J3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVuJ1xuXSkoJ0RhdGUnLCBEYXRl
LCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5vdmVybG9hZFNldHRlcigpO1xu
XG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0cmV0dXJuICsobmV3IERhdGUpO1xu
fSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7XG5cbi8vIGZpeGVzIE5hTiByZXR1
cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUuJGZhbWlseSA9IGZ1bmN0aW9uKCl7
XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXInIDogJ251bGwnO1xufS5oaWRlKCk7
XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVuZCgncmFuZG9tJywgZnVuY3Rpb24o
bWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1p
biArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBlYWNoLCBrZXlzXG5cbkFycmF5Lmlt
cGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1c
blx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0
QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9iamVjdCl7XG5cdFx0XHRpZiAoaGFz
T3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2goayk7XG5cdFx0fVxuXHRcdC8q
PGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZnVuY3Rp
b24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7XG5cdFx0Lyo8L2x0SUU4PiovXG5c
dFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDogZnVuY3Rpb24ob2JqZWN0LCBmbiwg
YmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG5c
dFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fSk7XG5c
dH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZvckVhY2g7XG5cblxuLy8gQXJyYXkg
JiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFwcGVuZGluZ1xuXG52YXIgY2xv
bmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5cGVPZihpdGVtKSl7XG5cdFx0Y2Fz
ZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRcdGNhc2UgJ29iamVjdCc6IHJldHVy
biBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIGl0ZW07XG5cdH1cbn07
XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigpe1xuXHR2YXIgaSA9IHRoaXMu
bGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hpbGUgKGktLSkgY2xvbmVbaV0gPSBj
bG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59KTtcblxudmFyIG1lcmdlT25lID0g
ZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRzd2l0Y2ggKHR5cGVPZihjdXJyZW50
KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0eXBlT2Yoc291cmNlW2tleV0pID09
ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1cnJlbnQpO1xuXHRcdFx0ZWxz
ZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTtcblx0XHRcdGJyZWFrO1xuXHRc
dGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50LmNsb25lKCk7IGJyZWFrO1xuXHRc
dGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0fVxuXHRyZXR1cm4gc291cmNlO1xu
fTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1bmN0aW9uKHNvdXJjZSwgaywgdil7
XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1lcmdlT25lKHNvdXJjZSwg
aywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwgb2JqZWN0W2tleV0pO1xuXHRcdH1c
blx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihvYmplY3Qpe1xu
XHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIGNsb25lW2tl
eV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0
YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1
bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBleHRlbmRlZCA9IGFyZ3VtZW50
c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBleHRlbmRlZCkgb3JpZ2luYWxba2V5
XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbDtcblx0fVxuXG59
KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmplY3QnLCAnV2hpdGVTcGFjZScsICdU
ZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cyddLmVhY2goZnVuY3Rpb24obmFtZSl7
XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1ZSBJRFxuXG52YXIgVUlEID0gRGF0
ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5jdGlvbigpe1xuXHRyZXR1
cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxu
bmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEFycmF5IFByb3RvdHlwZXMgbGlr
ZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczogQXJyYXlcblxuLi4uXG4qL1xuXG5B
cnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0ZXZlcnk6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBp
LCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxu
XHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdO1xuXHRc
dGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsr
KSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhpc1tpXTtcblx0XHRcdGlmIChmbi5j
YWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhPZjogZnVuY3Rpb24oaXRlbSwgZnJv
bSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwO1xuXHRcdGZvciAodmFyIGkg
PSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsgZnJvbSkgOiBmcm9tIHx8IDA7IGkg
PCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG5c
dFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKGZuLCBiaW5kKXtc
blx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJlc3VsdHMgPSBBcnJheShsZW5n
dGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKGkg
aW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5c
dFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGks
IHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHQv
KjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmZpbHRl
cihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtICE9IG51bGw7XG5cdFx0fSk7XG5c
dH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXtcblx0XHR2YXIgYXJncyA9IEFy
cmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGl0
ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBwbHkoaXRlbSwgYXJncyk7XG5c
dFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlvbihrZXlzKXtcblx0XHR2YXIgb2Jq
ID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBrZXlzLmxlbmd0aCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tleXNbaV1dID0gdGhpc1tpXTtc
blx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5cdFx0XHRcdGlmIChv
YmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzW2ldO1xu
XHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0
fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdGNvbnRhaW5z
OiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4gdGhpcy5pbmRleE9mKGl0ZW0sIGZy
b20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHRoaXMu
cHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbdGhpcy5s
ZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFuZG9tOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIucmFuZG9tKDAsIHRoaXMubGVuZ3Ro
IC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRp
ZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVtKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuaW5jbHVkZShhcnJheVtpXSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRc
dGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0g
aXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVuZ3RoID0gMDtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcnJheSA9IFtd
O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0XHRpZiAodHlwZSA9PSAnbnVsbCcp
IGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25jYXQoKHR5cGUgPT0gJ2FycmF5JyB8
fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1bWVudHMnIHx8IGluc3RhbmNl
T2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0aGlzW2ldKTtc
blx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5cdHBpY2s6IGZ1bmN0aW9uKCl7XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRp
ZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtcblx0XHR9XG5cdFx0cmV0dXJuIG51
bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5s
ZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJnYiA9IHRoaXMubWFwKGZ1bmN0aW9u
KHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0gMSkgdmFsdWUgKz0gdmFsdWU7XG5c
dFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGFy
cmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0fSxcblxuXHRyZ2JUb0hleDogZnVu
Y3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsO1xuXHRc
dGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAhYXJyYXkpIHJldHVybiAn
dHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0gLSAwKS50b1N0cmluZygxNik7XG5c
dFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyArIGJpdCA6IGJpdCk7XG5cdFx0
fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4LmpvaW4oJycpO1xuXHR9XG5c
bn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlvblxuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0ZSwgYmluZCwgcGFzcywgYW5kIGRl
bGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxu
cHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVuY3Rpb24uZXh0ZW5kKHtcblxuXHRh
dHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxl
bmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXJndW1lbnRz
W2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9
XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKGFy
Z3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcHBseShiaW5kLCBBcnJh
eS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRyZXR1cm4gbnVsbDtc
blx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDogZnVuY3Rpb24odGhhdCl7XG5cdFx0
dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gQXJy
YXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0XHRGID0gZnVuY3Rpb24oKXt9O1xu
XG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBjb250ZXh0ID0gdGhhdCwg
bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlmICh0aGlzIGluc3RhbmNlb2YgYm91
bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJvdG90eXBlO1xuXHRcdFx0XHRjb250
ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gKCFhcmdzICYmICFsZW5n
dGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5cdFx0XHRcdDogc2VsZi5hcHBseShj
b250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0KEFycmF5LnNsaWNlKGFyZ3VtZW50
cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGNvbnRleHQgPT0gdGhhdCA/
IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gYm91bmQ7XG5cdH0sXG5cdC8q
PC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR2YXIg
c2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmNvbnZlcnQo
YXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gc2VsZi5hcHBseShi
aW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fSxcblxuXHRkZWxheTogZnVuY3Rp
b24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KHRoaXMucGFzcygo
YXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRlbGF5KTtcblx0fSxcblxuXHRwZXJp
b2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0
SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgcGVy
aW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IE51bWJlclxuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMgbGlrZSBsaW1pdCwgcm91bmQs
IHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4uXG4qL1xuXG5OdW1iZXIuaW1wbGVt
ZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgpe1xuXHRcdHJldHVybiBNYXRoLm1p
bihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxuXG5cdHJvdW5kOiBmdW5jdGlvbihw
cmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCku
dG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6IDApO1xuXHRcdHJldHVybiBNYXRo
LnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuXHR9LFxuXG5cdHRpbWVzOiBm
dW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzOyBpKyspIGZu
LmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFz
ZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9XG5cbn0pO1xu
XG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxuKGZ1bmN0aW9uKG1hdGgpe1xuXG52
YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdGlmICghTnVt
YmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gTWF0aFtu
YW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKSkp
O1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbn0pKFsnYWJzJywg
J2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAnY29zJywgJ2V4cCcsICdm
bG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywgJ3NxcnQnLCAndGFuJ10p
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgU3Ry
aW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUsIHRlc3QsIGFuZCB0b0lu
dC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZSwgQXJy
YXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xuXG5TdHJpbmcuaW1wbGVtZW50KHtc
blxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24oc3RyaW5nLCBpbmRleCl7XG5cdFx0
cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShpbmRleCkgOiBTdHJpbmcodGhpcykp
LmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwvIUVTNj5cblxuXHR0ZXN0OiBmdW5j
dGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0eXBlT2YocmVnZXgpID09ICdyZWdl
eHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBwYXJhbXMpKS50ZXN0KHRoaXMp
O1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5y
ZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xu
XHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLmNo
YXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGh5cGhlbmF0ZTogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0
aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0Y2guY2hhckF0KDApLnRvTG93ZXJD
YXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxpemU6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16XS9nLCBmdW5jdGlvbihtYXRjaCl7
XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRl
c2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNl
KC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9LFxuXG5cdHRv
SW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAx
MCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9h
dCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciBo
ZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwyfSkoXFx3ezEsMn0pKFxcd3sxLDJ9
KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSkuaGV4VG9SZ2IoYXJyYXkpIDog
bnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciByZ2Ig
PSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xuXHRcdHJldHVybiAocmdiKSA/IHJn
Yi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHN1YnN0aXR1dGU6IGZ1bmN0aW9u
KG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UocmVnZXhw
IHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rpb24obWF0Y2gsIG5hbWUpe1xuXHRc
dFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJldHVybiBtYXRjaC5zbGljZSgxKTtc
blx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8gb2JqZWN0W25hbWVdIDogJyc7
XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEJyb3dzZXJcblxu
ZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFpbnMgQnJvd3NlciBpbml0aWFs
aXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93c2VyIEhhc2guXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBGdW5jdGlvbiwg
TnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3NlciwgV2luZG93LCBEb2N1bWVudF1c
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVu
dDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlzO1xuXG52YXIgcGFyc2UgPSBm
dW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRvTG93ZXJDYXNlKCk7XG5cdHBsYXRm
b3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNhc2UoKSA6ICcnKTtcblxuXHQvLyBj
aHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5lZWQgdG8gY2hlY2sgZm9yIGVk
Z2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBpdCdzIGNocm9tZS5cblx0dmFyIFVB
ID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxkXFwuXSspLyk7XG5cdGlmICghVUEp
e1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94fGNocm9tZXx0cmlkZW50fGNy
aW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/Lio/KHNhZmFyaXwoPzpydltcXHNc
XC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSspfCQpLykgfHwgW251bGwsICd1bmtu
b3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3RyaWRlbnQnKXtcblx0XHRVQVsxXSA9
ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRdO1xuXHR9IGVsc2UgaWYgKFVBWzFd
ID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7XG5cdH1cblxuXHRwbGF0Zm9ybSA9
IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6ICh1YS5tYXRjaCgvKD86d2Vi
b3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51eC8pIHx8IFsnb3RoZXInXSlb
MF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZvcm0gPSAnd2luZG93cyc7XG5cblx0
cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQsXG5cdFx0bmFt
ZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLFxuXHRcdHZlcnNpb246IHBh
cnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0pID8gVUFbNF0gOiBVQVsyXSksXG5c
dFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52YXIgQnJvd3NlciA9IHRoaXMuQnJv
d3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5c
bmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUpe1xuXHRC
cm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbkJyb3dzZXIuZXh0
ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEoZG9jdW1lbnQuZXZhbHVhdGUpLFxu
XHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1ZXJ5OiAhIShkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNPTilcblx0fSxcblx0cGFyc2VVQTog
cGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93c2VyLlJlcXVlc3QgPSAoZnVuY3Rp
b24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBYTUxI
dHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIgPSBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTtcblx0fTtcblxuXHR2YXIg
TVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9z
b2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlv
bigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1MSFRUUDtcblx0fSwgZnVuY3Rpb24o
KXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwyO1xuXHR9LCBmdW5jdGlvbigpe1xu
XHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9KTtcblxufSkoKTtcblxuQnJvd3Nl
ci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpO1xuXG5cblxuLy8gU3RyaW5nIHNj
cmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7XG5cdGlmICghdGV4dCkgcmV0
dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7XG5cdFx0d2luZG93LmV4ZWNTY3Jp
cHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9q
YXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0O1xuXHRcdGRvY3VtZW50LmhlYWQu
YXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlw
dCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJpbmcuaW1wbGVtZW50KCdzdHJpcFNj
cmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlwdHMgPSAnJztcblx0dmFyIHRleHQg
PSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPyk8XFwvc2NyaXB0Pi9naSwg
ZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9IGNvZGUgKyAnXFxuJztcblx0XHRy
ZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1ZSkgQnJvd3Nlci5leGVjKHNjcmlw
dHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhlYyhzY3JpcHRz
LCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8gV2luZG93LCBEb2N1bWVudFxuXG5C
cm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRvY3VtZW50LFxuXHRXaW5kb3c6IHRo
aXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQsXG5cdEV2ZW50OiB0aGlzLkV2ZW50
XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdXaW5k
b3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCd3
aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtc
blx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRoaXMuRG9jdW1lbnQgPSBkb2N1bWVu
dC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigpe30pO1xuXG5k
b2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9jdW1lbnQnKS5oaWRlKCk7XG5c
bkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRkb2N1bWVudFtuYW1l
XSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKSB0
cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dyb3VuZEltYWdlQ2FjaGUnLCBmYWxz
ZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5PiovXG5pZiAodGhpcy5hdHRhY2hF
dmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIHVubG9hZEV2ZW50ID0gZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtc
blx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LndpbmRvdyA9IG51
bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVudCA9IG51bGw7XG5cdH07XG5c
dHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xufVxuXG4vLyBJRSBm
YWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9ucyAocmVmZXJzIHRvIDxzZWxl
Y3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7XG50cnkge1xuXHRhcnJheUZyb20o
ZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2ggKGUpe1xuXHRBcnJheS5jb252ZXJ0
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnICYmIFR5
cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAhPSAnYXJyYXknKXtcblx0XHRc
dHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkpO1xuXHRcdFx0d2hpbGUg
KGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0dXJuIGFycmF5O1xuXHRcdH1cblx0
XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5cdHZhciBwcm90b3R5cGUgPSBBcnJh
eS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUuc2xpY2U7XG5cdFsncG9wJywgJ3B1
c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2Nv
bmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgbWV0
aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25hbWVdID0gZnVuY3Rpb24oaXRlbSl7
XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNvbnZlcnQoaXRlbSksIHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3NcblxuZGVzY3JpcHRpb246IENvbnRhaW5z
IHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0aW5nLCBleHRlbmRpbmcsIGFuZCBp
bXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE51bWJlcl1cblxucHJv
dmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBDbGFzcyA9IHRo
aXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlvbihwYXJhbXMpe1xuXHRpZiAoaW5z
dGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0ge2luaXRpYWxpemU6IHBhcmFtc307
XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRp
ZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLiRjYWxsZXIg
PSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5cdFx0dmFyIHZhbHVlID0gKHRoaXMu
aW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRo
aXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxsO1xuXHRcdHJldHVybiB2
YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7XG5cblx0bmV3Q2xhc3Mu
JGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS4kY29uc3RydWN0b3Ig
PSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9IHBhcmVudDtcblxuXHRy
ZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9IGZ1bmN0aW9uKCl7XG5cdGlmICgh
dGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCJwYXJlbnRcIiBjYW5u
b3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMuJGNhbGxlci4kbmFtZSxcblx0XHRw
YXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxcblx0XHRwcmV2aW91cyA9IChwYXJl
bnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7XG5cdGlmICghcHJldmlvdXMpIHRo
cm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1lICsgJ1wiIGhhcyBubyBwYXJlbnQu
Jyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFy
IHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5c
dFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtc
blx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBGID0gZnVuY3Rpb24oKXt9O1xuXHRc
dFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRvYmplY3Rba2V5XSA9IHJlc2V0KG5l
dyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhcnJheSc6IG9iamVjdFtrZXldID0g
dmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmplY3Q7XG59O1xu
XG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZC4k
b3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0dmFyIHdyYXBwZXIgPSBmdW5jdGlv
bigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlzLiRjYWxsZXIgPT0gbnVsbCkg
dGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtleSArICdcIiBjYW5ub3QgYmUgY2Fs
bGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxlciwgY3VycmVudCA9IHRoaXMuJGNh
bGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuJGNhbGxlciA9IHdyYXBwZXI7
XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHRo
aXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0gY2FsbGVyO1xuXHRcdHJldHVybiBy
ZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRvcmlnaW46IG1ldGhvZCwgJG5hbWU6
IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlv
bihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3MuTXV0YXRvcnMuaGFzT3duUHJvcGVy
dHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9yc1trZXldLmNhbGwodGhpcywgdmFs
dWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0fVxuXG5cdGlmICh0
eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlmICh2YWx1ZS4kaGlkZGVuKSByZXR1
cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0gKHJldGFpbikgPyB2YWx1ZSA6IHdy
YXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0Lm1lcmdlKHRoaXMu
cHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxudmFy
IGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRrbGFzcy4kcHJvdG90eXBpbmcgPSB0
cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRlbGV0ZSBrbGFzcy4kcHJvdG90eXBp
bmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmltcGxlbWVudCgnaW1wbGVtZW50Jywg
aW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFzcy5NdXRhdG9ycyA9IHtcblxuXHRF
eHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMucGFyZW50ID0gcGFyZW50O1xuXHRc
dHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTtcblx0fSxcblxuXHRJbXBsZW1l
bnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29udmVydChpdGVtcykuZWFjaChmdW5j
dGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5ldyBpdGVtO1xuXHRcdFx0Zm9yICh2
YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0aGlzLCBrZXksIGluc3RhbmNlW2tl
eV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgVXRpbGl0eSBDbGFz
c2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBlYXNl
IHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5FeHRyYXMs
IENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnRo
aXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjogW10sXG5cblx0Y2hhaW46IGZ1bmN0
aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENoYWluOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMuJGNoYWluLnNoaWZ0KCkuYXBwbHko
dGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5cdGNsZWFyQ2hhaW46IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59
KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0cmV0dXJuIHN0cmluZy5y
ZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmlyc3Qpe1xuXHRcdHJldHVybiBm
aXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRoaXMuRXZlbnRzID0gbmV3IENsYXNz
KHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4sIGlu
dGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cblx0XHRcblxuXHRcdHRoaXMu
JGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwgW10pLmluY2x1ZGUoZm4pO1xu
XHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciB0eXBl
IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkp
e1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZl
bnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJy
YXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRp
ZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBw
bHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR0eXBlID0gcmVtb3ZlT24o
dHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoZXZl
bnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5kZXggPSBldmVudHMuaW5kZXhPZihm
bik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBldmVudHNbaW5kZXhdO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50
cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtc
blx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRz
W3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoZXZlbnRzKSBldmVu
dHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlwZSBpbiB0aGlzLiRldmVudHMpe1xu
XHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkgY29udGludWU7XG5cdFx0XHR2YXIg
Zm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IGZucy5sZW5ndGg7
IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZm5z
W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnRo
aXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0aW9uczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVjdC5tZXJnZS5hcHBseShudWxsLCBb
e30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykpO1xuXHRcdGlmICh0aGlzLmFkZEV2
ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5cdFx0XHRpZiAodHlwZU9mKG9wdGlv
bnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25bQS1aXS8pLnRlc3Qob3B0aW9uKSkg
Y29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlvbiwgb3B0aW9uc1tvcHRpb25dKTtc
blx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLlRoZW5hYmxlXG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3MgdGhhdCBjYW4gYmUgaW1wbGVt
ZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhlbSBcInRoZW5hYmxlXCIuXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlk
ZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIFNU
QVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQgPSAxLFxuXHRTVEFURV9SRUpFQ1RF
RCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5hYmxlID0gbmV3IENsYXNzKHtcblxu
XHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0JHRoZW5hYmxlUmVzdWx0OiBudWxs
LFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVl
KXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFibGVTdGF0ZTogZnVuY3Rpb24oKXtc
blx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xuXHRcdFx0Y2FzZSBTVEFURV9QRU5E
SU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX0ZVTEZJ
TExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX1JF
SkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztcblx0XHR9XG5cdH0sXG5cblx0cmVz
ZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtc
blx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0aGVuOiBmdW5j
dGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0aWYgKHR5cGVvZiBvbkZ1bGZpbGxl
ZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRpdHknO1xuXHRcdGlmICh0eXBl
b2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWplY3RlZCA9ICdUaHJvd2VyJztcblxu
XHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXG5cdFx0dGhpcy4kdGhlbmFibGVS
ZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhlbmFibGUsXG5cdFx0XHRmdWxmaWxs
SGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RIYW5kbGVyOiBvblJlamVjdGVkXG5c
dFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7
XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0s
XG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5cdFx0cmV0dXJuIHRoaXMudGhl
bihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxuVGhlbmFibGUuZXh0ZW5kKHtcblx0
cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0aGVuYWJsZTtcblx0XHRpZiAodmFs
dWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVuYWJsZSA9IHZhbHVlO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdFx0cmVzb2x2ZSh0
aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5cdHJl
amVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUo
KTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xu
XHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gcmVzb2x2ZSh0aGVu
YWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BF
TkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUpe1xuXHRcdFx0cmVqZWN0KHRoZW5h
YmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEgdGhlbmFibGUgd2l0aCBpdHNl
bGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVj
dCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7XG5cdFx0XHR2YXIgdGhlbjtcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVuO1xuXHRcdFx0fSBjYXRjaCAoZXhj
ZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxu
XHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKXtcblx0XHRcdFx0dmFyIHJlc29s
dmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dHJ5IHtc
blx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0
XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7
XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRy
ZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0
XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVhc29uKXtcblx0XHRcdFx0XHRcdFx0
XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0
XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRcdFx0XHRcdFx0
XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAo
ZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRy
ZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9u
KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNl
IHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxz
ZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1
bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJs
ZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQg
PSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX0ZVTEZJTExFRDtc
blxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWplY3QodGhlbmFi
bGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVO
RElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gcmVhc29uO1xuXHRcdHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJs
ZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFibGUpe1xuXHRpZiAodGhlbmFibGUu
JHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9QRU5E
SU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5hYmxlKXtcblx0dmFyIHN0YXRlID0g
dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0ID0gdGhlbmFibGUuJHRoZW5hYmxl
UmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyxcblx0
XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVEKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ2Z1bGZpbGxIYW5kbGVyJztc
blx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7XG5cdFx0dGhlbmFibGUuJHRo
ZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdyZWplY3RIYW5kbGVyJztcblx0fVxu
XG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFzcyhbcmVzdWx0LCByZWFjdGlvbnMs
IHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlKHJlc3VsdCwgcmVhY3Rpb25zLCB0
eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlvbnMubGVuZ3RoOyBpIDwgbDsgKytp
KXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sXG5cdFx0XHRoYW5kbGVyID0gcmVh
Y3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0gJ0lkZW50aXR5Jyl7XG5cdFx0XHRy
ZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBpZiAoaGFuZGxl
ciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0
KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50
aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5c
dFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0
XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZp
bmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJyl7XG5cdGRlZmVy
ID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0g
J3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0ZTtcbn0gZWxzZSB7XG5cdGRlZmVy
ID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4sIDApO1xuXHR9O1xufVxuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNjcmlwdGlvbjogT2JqZWN0IGdlbmVy
aWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5
cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVuY3Rpb24ob2JqZWN0LCBrZXlzKXtc
blx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGsgaW4g
b2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0
cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBy
ZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5
c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtl
eSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0ZmlsdGVy
OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRc
dHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV0sIHZhbHVlID0gb2Jq
ZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwga2V5LCBvYmplY3QpKSBy
ZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5c
blx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2Jq
ZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBp
Kyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAoIWZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtl
eXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChmbi5jYWxs
KGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJu
IGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgdmFs
dWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07
XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVz
O1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHRyZXR1cm4gT2Jq
ZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0a2V5T2Y6IGZ1bmN0aW9uKG9iamVj
dCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3Ig
KHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNb
aV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVlKSByZXR1cm4ga2V5O1xuXHRcdH1c
blx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24ob2JqZWN0LCB2
YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmplY3QsIHZhbHVlKSAhPSBudWxsO1xu
XHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7XG5cdFx0dmFy
IHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFjaChvYmplY3QsIGZ1bmN0aW9uKHZh
bHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJhc2UgKyAnWycgKyBrZXkgKyAnXSc7
XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtcblx0XHRc
dFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcodmFsdWUsIGtl
eSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRcdFx0dmFyIHFzID0ge307
XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRcdFx0cXNb
aV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gT2JqZWN0LnRvUXVl
cnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6IHJl
c3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0XHR9XG5c
dFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVzaChyZXN1bHQpO1xuXHRcdH0p
O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxufSko
KTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNlclxuZGVzY3JpcHRpb246IFN0YW5k
YWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVzOiBTbGljay5QYXJzZXJcbi4uLlxu
Ki9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxuXHRzZXBhcmF0b3JJbmRleCxcblx0
Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2FjaGUgPSB7fSxcblx0cmV2ZXJzZUNh
Y2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xuXG52YXIgcGFyc2UgPSBmdW5jdGlv
bihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0
dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09PSB0cnVlKSByZXR1cm4gZXhwcmVz
c2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJlcGxhY2UoL15cXHMrfFxc
cyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7XG5cdHZhciBjdXJyZW50Q2Fj
aGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2FjaGU7XG5cdGlmIChjdXJyZW50Q2Fj
aGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl07XG5cdHBhcnNl
ZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNzaW9uczogW10sXG5cdFx0cmF3OiBl
eHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gcGFyc2Uo
dGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2VwYXJhdG9ySW5kZXggPSAtMTtcblx0
d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UocmVn
ZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBwYXJzZWQuZXhwcmVzc2lvbnMubGVu
Z3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0gKHJldmVyc2VkKSA/IHJl
dmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciByZXZlcnNlQ29tYmluYXRvciA9IGZ1
bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRvciA9PT0gJyEnKSByZXR1cm4gJyAn
O1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJldHVybiAnISc7XG5cdGVsc2UgaWYg
KCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRvci5yZXBsYWNlKC9eIS8s
ICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRvcjtcbn07XG5cbnZhciByZXZlcnNl
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Npb24u
ZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBp
Kyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtcblx0XHR2YXIgbGFzdCA9IHtwYXJ0
czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNlQ29tYmluYXRvcihleHBbMF0uY29t
YmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBleHAubGVuZ3RoOyBqKyspe1xu
XHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAoIWNleHAucmV2ZXJzZUNvbWJpbmF0
b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5cdFx0XHRjZXhwLmNvbWJpbmF0b3Ig
PSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVsZXRlIGNleHAucmV2ZXJzZUNvbWJp
bmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5wdXNoKGxhc3QpO1xuXHR9XG5cdHJl
dHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cmlu
Zyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDggU3RldmVuIExldml0aGFu
IDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAvPiBNSVQgTGljZW5zZVxu
XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uXFxcXF4kfCwjXFxzXS9nLCBm
dW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyArIG1hdGNoO1xuXHR9KTtcbn07XG5c
bnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vzci9iaW4vZW52IHJ1YnlcbnB1dHMg
XCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94XFwpfFxccysjLiokfFxccyt8XFxc
XCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86XFxcblx0ICBcXFxccyogKCAsICkg
XFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAgICAgICAgXFxuXFxcblx0fCBcXFxc
cyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21iaW5hdG9yICAgICAgICAgXFxuXFxc
blx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAgICMgQ29tYmluYXRvckNoaWxkcmVu
IFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxcKiApICAgICAjIFRhZyAgICAgICAg
ICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBJRCAg
ICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8dW5pY29kZT4rICAgICAgICkgICAg
ICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0XFxcXFsgIFxcXG5cdFx0XFxcXHMq
ICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxzKiAoWypeJCF+fF0/PSkgICg/OiAg
XFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0KFtcXFwiJ10/KSguKj8pXFxcXDkg
XFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/ICBcXFxccyogIFxcXG5cdFxcXFxd
KD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2RlPisgKSg/OlxcXG5cdFxcXFwoICg/
OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxcXDEyKXwoKD86XFxcXChbXildK1xc
XFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xcXG5cdClcIlxuKi9cblx0XCJeKD86
XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4rKVxcXFxzKnwoXFxcXHMrKXwoPHVu
aWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxcXC4oPHVuaWNvZGU+Kyl8XFxcXFtc
XFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxdPz0pKD86XFxcXHMqKD86KFtcXFwi
J10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxcXSl8KDorKSg8dW5pY29kZT4rKSg/
OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxcXDEzKXwoKD86XFxcXChbXildK1xc
XFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNlKC88Y29tYmluYXRvcj4vLCAnWycg
KyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwvJykgKyAnXScpXG5cdC5yZXBsYWNl
KC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFte
XFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29kZTE+L2csICcoPzpbOlxcXFx3XFxc
XHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcbik7XG5cbmZ1bmN0
aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJhdG9yLFxuXHRjb21iaW5hdG9yLFxu
XHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxcblx0aWQsXG5cdGNsYXNzTmFtZSxc
blxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRhdHRyaWJ1dGVRdW90
ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFya2VyLFxuXHRwc2V1ZG9DbGFzcyxc
blx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVkVmFsdWUsXG5cdHBzZXVkb0NsYXNz
VmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09IC0xKXtcblx0
XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRleF0gPSBbXTtcblx0XHRjb21iaW5h
dG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSByZXR1cm4gJyc7XG5cdH1cblxuXHRp
ZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4gfHwgY29tYmluYXRvckluZGV4ID09
PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3IgfHwgJyAnO1xuXHRcdHZhciBjdXJy
ZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XTtcblx0XHRp
ZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdKVxuXHRcdFx0
Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJldmVyc2VDb21iaW5hdG9yID0gcmV2
ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3VycmVudFNlcGFyYXRvclsrK2NvbWJp
bmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRvciwgdGFnOiAnKid9O1xuXHR9XG5c
blx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhd
W2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUpe1xuXHRcdGN1cnJlbnRQYXJzZWQu
dGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGlk
KXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5c
blx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBs
YWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc0xpc3Qp
IGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNs
YXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xh
c3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzZXMucHVzaCh7
XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVnZXhwOiBuZXcgUmVnRXhwKCcoXnxc
XFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAnKFxcXFxzfCQpJylcblx0XHR9KTtc
blxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNl
dWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlO1xuXHRcdHBzZXVkb0NsYXNz
VmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xhc3NWYWx1ZS5yZXBsYWNlKHJlVW5l
c2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQucHNldWRvcykgY3Vy
cmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5wc2V1ZG9zLnB1c2go
e1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSxcblx0XHRc
dHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlwZTogcHNldWRvTWFya2VyLmxlbmd0
aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAoYXR0
cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRyaWJ1dGVLZXkucmVwbGFjZShyZVVu
ZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlVmFsdWUgfHwgJycp
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFyIHRlc3QsIHJlZ2V4cDtcblxuXHRc
dHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0Y2FzZSAnXj0nIDogcmVnZXhwID0g
bmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICAgICAg
ICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAg
ICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKyckJyAgICAgICApOyBicmVh
aztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICcoXnxcXFxccyknKyBl
c2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxzfCQpJyApOyBicmVhaztcblx0XHRc
dGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhw
KGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAgJz0nIDog
dGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlID09
IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICcqPScgOiB0ZXN0ID0gZnVuY3Rp
b24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZihhdHRyaWJ1
dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnIT0nIDogdGVzdCA9
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlICE9IHZhbHVl
O1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAgOiB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYg
KGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQvKS50ZXN0KGF0dHJpYnV0ZU9wZXJh
dG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxu
XHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1
ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxuXHRcdGlmICghY3VycmVudFBhcnNl
ZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBbXTtcblx0XHRjdXJyZW50
UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6IGF0dHJpYnV0ZUtleSxcblx0XHRc
dG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRcdHZhbHVlOiBhdHRyaWJ1dGVWYWx1
ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9XG5cblx0cmV0dXJuICcnO1xufTtc
blxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGlj
ay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRyZXR1cm4gcGFyc2UoZXhwcmVzc2lv
bik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG5cbmlmICghdGhp
cy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0
eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiov
dGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRlclxuZGVzY3JpcHRpb246IFRoZSBu
ZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxucHJvdmlkZXM6IFNsaWNrLkZpbmRl
clxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5cbnZh
ciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30sXG5cdHRvU3RyaW5nID0gT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAvIEJ1ZyBkZXRlY3Rpb25cblxubG9j
YWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRyZXR1cm4gKC9cXHtcXHMqXFxbbmF0
aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtcbn07XG5cbmxvY2FsLmlzWE1MID0g
ZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9jdW1lbnQueG1sVmVyc2lvbikgfHwg
KCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChkb2N1bWVudCkgPT0gJ1tvYmplY3Qg
WE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVUeXBlID09IDkgJiYgZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7XG59O1xuXG5sb2NhbC5zZXREb2N1
bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBjb252ZXJ0IGVsZW1lbnRzIC8gd2lu
ZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQgY2Fubm90IGJlIGV4dHJhcG9s
YXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBub2RlVHlwZSA9IGRvY3VtZW50Lm5v
ZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3VtZW50XG5cdGVsc2UgaWYgKG5v
ZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG5vZGVcblx0ZWxz
ZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9IGRvY3VtZW50LmRvY3VtZW50OyAv
LyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hlY2sgaWYgaXQncyB0aGUgb2xkIGRv
Y3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRvY3VtZW50KSByZXR1cm47XG5cdHRo
aXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVjayBpZiB3ZSBoYXZlIGRvbmUgZmVh
dHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmVcblxuXHR2YXIgcm9vdCA9IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlkID0gdGhpcy5nZXRVSURYTUwocm9v
dCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdLFxuXHRcdGZlYXR1cmU7
XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRc
dFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHRcdH1cblx0XHRyZXR1cm47
XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0gPSB7fTtcblxuXHRm
ZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNYTUxEb2N1bWVudCA9IHRoaXMuaXNY
TUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0YXJHRUJUTlxuXHQ9IGZlYXR1cmVz
LnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMuaWRHZXRzTmFtZVxuXHQ9IGZlYXR1
cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkdFQkNOXG5cdD0gZmVh
dHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRl
UVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0PSBmZWF0dXJlcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3RhclNlbGVjdHNDbG9zZWQsIHN0YXJT
ZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04sIGNhY2hlZEdl
dEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcjtcblxu
XHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlkJztcblx0dmFyIHRlc3ROb2RlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0dmFyIHRlc3RSb290ID0gZG9jdW1l
bnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdIHx8IHJv
b3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2RlKTtcblxuXHQvLyBvbiBub24tSFRN
TCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5SWQgZG9lc250IHdvcmsgcHJv
cGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgaWQ9XCInK2lkKydc
Ij48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9ICEhZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0aWYgKGZlYXR1cmVzLmlzSFRNTERv
Y3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0XHQv
LyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykg
Zm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29tbWVudHMgPSAodGVzdE5vZGUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtcblxuXHRcdC8vIElFIHJldHVybnMg
Y2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1M
ID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3NlZCA9IChzZWxlY3RlZCAmJiAhIXNl
bGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtc
blx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROID0gc3Rh
clNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDtcblxuXHRcdC8vIElFIHJldHVy
bnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9mIGp1c3QgaWQgZm9yIGdldEVsZW1l
bnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5u
ZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48YiBpZD1cIicrIGlkICsnXCI+PC9i
Pic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdGlm
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtcblxuXHRcdFx0Ly8gU2FmYXJpIDMu
MiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzXG5cdFx0XHR0cnkge1xuXHRc
dFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJmXCI+PC9hPjxhIGNsYXNzPVwi
YlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJyku
bGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxkLmNsYXNzTmFtZSA9ICdiJztcblx0
XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxu
XHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgZG9lc250IGRldGVjdHMg
dGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwiPjwvYT48YSBjbGFzcz1cImYgYiBh
XCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOID0gKHRlc3ROb2Rl
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNo
IChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNOID0gY2FjaGVkR2V0RWxlbWVudHNC
eUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTjtcblx0XHR9XG5cblx0XHRp
ZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0XHQvLyBJRSA4IHJldHVybnMgY2xv
c2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlTZWxlY3RvckFsbCgnKicpIGZvciBz
b21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0g
J2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUucXVlcnlTZWxlY3RvckFs
bCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSA9IChzZWxlY3Rl
ZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkg
PT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBxdWVy
eVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNlIG9uIHF1aXJrc21vZGVcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIk1pWFwi
PjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0EgPSAhdGVzdE5vZGUu
cXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxu
XHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBzZWxlY3RlZCBvcHRpb25zIG9u
IHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRN
TCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPmE8L29wdGlvbj48L3Nl
bGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBID0gKHRlc3ROb2RlLnF1
ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09IDApO1xuXHRcdFx0fSBjYXRjaCAo
ZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgYXR0clsq
XiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0
XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIlwiPjwvYT4nO1xuXHRcdFx0XHRm
ZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9y
QWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxu
XG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBoYXMgYW4gaW5wdXQgb2YgaWQgeCwg
Zm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW5wdXRcblx0
XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxmb3JtIGFjdGlvbj1cInNcIj48
aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0XHRicm9rZW5Gb3JtQXR0cmlidXRl
R2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSAhPSAn
cycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5hdGl2ZSBtYXRjaGVzU2VsZWN0b3Ig
ZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IHJvb3QubWF0
Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwqLyByb290Lm1vek1hdGNoZXNTZWxl
Y3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtcblx0XHRpZiAoZmVhdHVyZXMubmF0
aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8gaWYgbWF0Y2hlc1NlbGVjdG9yIHRy
b3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVzZSBpdFxuXHRcdFx0ZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpzbGljaycpO1xuXHRcdFx0
ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19leHBhbmRvID0gMTtcblx0XHRkZWxl
dGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlE
SFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURY
TUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7XG5cdHRlc3ROb2Rl
ID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0Ly8gZ2V0QXR0cmlidXRlXG5cblx0
ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ICYmIGJyb2tl
bkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1l
dGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRpZiAobWV0aG9kKSByZXR1
cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSBub2RlLmdldEF0
dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlKSA/IGF0dHJpYnV0
ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRc
dHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0cmV0dXJuICht
ZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblx0
fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5oYXNBdHRyaWJ1dGUgPSAocm9v
dCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJpYnV0ZSkpID8gZnVuY3Rpb24obm9k
ZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKTtc
blx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0bm9kZSA9IG5vZGUuZ2V0QXR0
cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAhIShub2RlICYmIChub2RlLnNwZWNp
ZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5cdC8vIGNvbnRhaW5zXG5cdC8vIEZJ
WE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIHht
bCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVSb290Q29udGFpbnMgPSByb290ICYm
IHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxuXHRcdG5hdGl2ZURvY3VtZW50Q29u
dGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29kZShkb2N1bWVudC5jb250YWlucyk7
XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENvbnRhaW5zICYmIG5hdGl2ZURv
Y3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNv
bnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZlUm9vdENvbnRhaW5zICYmICFuYXRp
dmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdC8vIElF
OCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVudC5cblx0XHRyZXR1cm4gY29udGV4
dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50KSA/IGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKHJvb3QgJiYgcm9vdC5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRy
ZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0LmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0aWYg
KG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250ZXh0KSByZXR1cm4gdHJ1ZTtcblx0
XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpO1xuXHRcdHJldHVybiBmYWxzZTtc
blx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdC8vIGNyZWRpdHMgdG8gU2l6
emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0dXJlcy5kb2N1bWVudFNvcnRlciA9
IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlm
ICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0
ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3NvdXJjZUluZGV4JyBpbiByb290KSA/
IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJbmRleCB8fCAhYi5zb3VyY2VJbmRl
eCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xu
XHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICgh
YS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVybiAwO1xuXHRcdHZhciBh
UmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0gYi5vd25lckRv
Y3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNldFN0YXJ0KGEsIDApO1xuXHRcdGFS
YW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0YXJ0KGIsIDApO1xuXHRcdGJSYW5n
ZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDogbnVsbDtcblxuXHRyb290ID0gbnVs
bDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdHRoaXNbZmVhdHVyZV0gPSBm
ZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFpbiBNZXRob2RcblxudmFyIHJlU2lt
cGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xcXCopKSQvLFxuXHRyZUVtcHR5QXR0
cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxdLyxcblx0cXNhRmFpbEV4cENhY2hl
ID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFw
cGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMuZm91bmQgPSAoZmlyc3QpID8gbnVs
bCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4dCkgcmV0dXJuIGZvdW5kO1xuXHRl
bHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9IGNvbnRleHQuZG9jdW1lbnQ7IC8v
IENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBhIGRvY3VtZW50XG5cdGVsc2UgaWYg
KCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5cblx0Ly8gc2V0dXBcblxuXHR2YXIg
cGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVzID0gdGhpcy51bmlxdWVzID0ge30s
XG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5ndGgpLFxuXHRcdGNvbnRl
eHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0gOSk7XG5cblx0aWYgKHRoaXMuZG9j
dW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBjb250ZXh0Lm93bmVyRG9j
dW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xuXG5cdC8vIGF2b2lkIGR1cGxpY2F0
aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJheVxuXHRpZiAoaGFzT3RoZXJzKSBm
b3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNbdGhpcy5nZXRVSUQoZm91bmRbaV0p
XSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3NcblxuXHRpZiAodHlwZW9mIGV4cHJl
c3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlzIGEgc3RyaW5nXG5cblx0XHQvKjxz
aW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFyIHNpbXBsZVNlbGVjdG9yID0gZXhw
cmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0XHRzaW1wbGVTZWxlY3RvcnM6IGlm
IChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1ib2wgPSBzaW1wbGVTZWxlY3Rvclsx
XSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJdO1xuXG5cdFx0XHRpZiAoIXN5bWJv
bCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRoaXMuYnJva2VuU3RhckdFQlROKSBi
cmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50
c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwg
bnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5w
dXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcjJyl7
XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICFjb250ZXh0SXNEb2N1bWVu
dCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlID0gY29udGV4dC5nZXRFbGVt
ZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSByZXR1cm4gZm91bmQ7XG5cdFx0XHRc
dGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVW
YWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChmaXJzdCkg
cmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNb
dGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblxuXHRcdFx0fSBlbHNlIGlm
IChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwg
KCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRoaXMuYnJva2VuR0VCQ04pICYm
IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRc
dFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5HRUJD
Til7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobmFt
ZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRc
dFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoQ2xh
c3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5lc2NhcGVSZWdFeHAobmFtZSkgKyco
XFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRc
dFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7XG5cdFx0XHRcdFx0XHRpZiAoIShj
bGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkpKSBjb250aW51ZTtcblx0XHRc
dFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhl
cnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRc
dFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRo
aXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0KSA/IG51bGwgOiBmb3VuZDtcblxu
XHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXG5cdFx0Lyo8cXVl
cnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNlbGVjdG9yOiBpZiAoY29udGV4dC5x
dWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50XG5cdFx0
XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxuXHRcdFx0XHQvL1RPRE86IG9ubHkg
c2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4ZWQgY2FzZVxuXHRcdFx0XHR8fCB0
aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5DaGVja2VkUVNB
ICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0xKVxuXHRcdFx0XHR8fCAodGhp
cy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5QXR0cmlidXRlLnRlc3QoZXhwcmVz
c2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1lbnQgLy9BYm9ydCB3aGVuICFjb250
ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAgdGhlcmUgYXJlIG11bHRpcGxlIGV4
cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRcdC8vICBzaW5jZSB3ZSBjdXJyZW50
bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9yIHNpbmdsZSBleHByZXNzaW9u
IHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24uaW5kZXhPZignLCcpID4gLTFcblx0
XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNBXG5cdFx0XHQpIGJyZWFrIHF1ZXJ5
U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24sIF9jb250ZXh0
ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7XG5c
dFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5cdFx0XHRcdC8vIGNyZWRpdHMgdG8g
QW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBfY29udGV4dC5nZXRBdHRyaWJ1dGUo
J2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRcdFx0X2NvbnRleHQuc2V0QXR0cmli
dXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVzc2lvbiA9ICcjJyArIHNsaWNraWQg
KyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0LnBhcmVudE5v
ZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIGNv
bnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVsbDtcblx0XHRcdFx0ZWxzZSBu
b2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVzc2lvbik7XG5cdFx0XHR9IGNh
dGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dID0gMTtcblx0XHRc
dFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmICgh
Y29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChjdXJyZW50SWQpIF9jb250ZXh0LnNl
dEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0XHRcdGVsc2UgX2NvbnRleHQucmVt
b3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRleHQgPSBfY29udGV4dDtcblx0XHRc
dFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSkgZm9y
IChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKG5vZGUubm9kZU5hbWUg
PiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3Vu
ZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytd
Oyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUp
XSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRo
aXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3F1
ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNl
KGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZvdW5kO1xuXHR9
IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJlIGlzIG5vIGV4cHJlc3Npb25c
blx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5TbGljayl7IC8vIGV4
cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5cdFx0cGFyc2VkID0gZXhwcmVzc2lv
bjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQuZG9jdW1lbnRFbGVtZW50IHx8
IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBpcyBhIG5vZGVcblx0XHQoZm91
bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0gZXhwcmVzc2lvbjtcblx0XHRy
ZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1bmtcblx0XHRyZXR1cm4gZm91bmQ7
XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+
Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50aCBzZWxlY3RvcnNcblxuXHR0aGlz
LnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7fTtcblx0dGhpcy5wb3NOVEhUeXBl
ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtcblxuXHQvKjwvbnRoLXBzZXVkby1z
ZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGlmIGFwcGVuZCBpcyBu
dWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGV4cHJlc3Np
b24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxuXHR0aGlzLnB1c2ggPSAoIWhhc090
aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAmJiBwYXJzZWQuZXhwcmVzc2lv
bnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6IHRoaXMucHVzaFVJRDtcblxu
XHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxuXHQvLyBkZWZhdWx0IGVuZ2luZVxu
XG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwgdGFnLCBpZCwgY2xhc3NMaXN0LCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIgY3VycmVudEl0ZW1zLCBjdXJyZW50
RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhw
cmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBl
eHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJlbnRCaXQgPSBjdXJyZW50RXhw
cmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9yID0gJ2NvbWJpbmF0b3I6JyArIGN1
cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNbY29tYmluYXRvcl0pIGNvbnRpbnVl
IHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/IGN1cnJl
bnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2UoKTtcblx0XHRpZCAgICAgICAg
ID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0gY3VycmVudEJpdC5jbGFzc0xpc3Q7
XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nlcztcblx0XHRhdHRyaWJ1dGVzID0g
Y3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3MgICAgPSBjdXJyZW50Qml0LnBzZXVk
b3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoIC0g
MSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5cblx0XHRpZiAobGFzdEJpdCl7XG5c
dFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0dGhpcy5mb3VuZCA9IGZvdW5kO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7fTtcblx0XHRcdHRoaXMuZm91bmQg
PSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5cdFx0XHR0aGlzW2NvbWJpbmF0b3Jd
KGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlz
dCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3VuZC5sZW5ndGgpIGJyZWFrIHNl
YXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQpIGZvciAobSA9
IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKXtcblx0XHRcdFx0dGhpc1tj
b21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChmb3VuZC5sZW5ndGgpIGJyZWFrIHNl
YXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsg
bSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0fVxuXG5cdFx0Y3Vy
cmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8vIHNob3VsZCBzb3J0IGlmIHRoZXJl
IGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNzIG11bHRpcGxlIGV4cHJlc3Npb25z
LlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoID4gMSkpIHRo
aXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkgPyAoZm91bmRbMF0gfHwgbnVsbCkg
OiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVpZHggPSAxO1xubG9jYWwudWlkayA9
ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhNTCA9IGZ1bmN0aW9uKG5vZGUpe1xu
XHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51aWRrKTtcblx0aWYgKCF1aWQpe1xu
XHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKHRoaXMudWlkaywg
dWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9jYWwuZ2V0VUlESFRNTCA9IGZ1bmN0
aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIgfHwgKG5vZGUudW5pcXVlTnVt
YmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBiYXNlZCBvbiB0aGUgc2V0RG9jdW1l
bnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5zb3J0ID0gZnVuY3Rpb24ocmVzdWx0
cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0dXJuIHJlc3VsdHM7XG5cdHJlc3Vs
dHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4v
Kjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwu
Y2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAvXihbKy1dP1xcZCopPyhbYS16XSsp
PyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJndW1lbnQgPSBmdW5jdGlvbihhcmd1
bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0aGlzLm1hdGNoTlRIKTtcblx0
aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNwZWNpYWwgPSBwYXJzZWRbMl0gfHwg
ZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5cdGlmIChhID09ICctJykgYSA9IC0x
O1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFyc2VkID1cblx0XHQoc3BlY2lhbCA9
PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNpYWwgPT0gJ29kZCcpXHQ/IHthOiAy
LCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0PyB7YTogMiwgYjogMH0gOiB7YTog
MCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSA9IHBhcnNlZCk7
XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5jdGlvbihjaGlsZCwgc2libGluZywg
cG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xu
XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRpZiAoIXRoaXNbcG9zaXRpb25z
XVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAo
IXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVsID0gcGFyZW50W2NoaWxkXSwgY291
bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGUu
bm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZU5hbWUgIT0gbm9k
ZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdldFVJRChl
bCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10pKTtcblx0
XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZVR5cGUgIT0g
MSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0g
PSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0
fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICduJztcblx0XHR2YXIgcGFyc2Vk
ID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5wYXJzZU5USEFyZ3VtZW50KGFyZ3Vt
ZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBhID0gcGFyc2Vk
LmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNdW3VpZF07XG5cdFx0aWYgKGEg
PT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4gMCl7XG5cdFx0XHRpZiAocG9zIDwg
YikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYiA8IHBvcykgcmV0dXJu
IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBiKSAlIGEpID09IDA7XG5cdH07XG59
O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xu
fTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdGlm
ICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0XHR0aGlzLnVuaXF1ZXNbdWlkXSA9
IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xuXHR9XG59O1xuXG5sb2NhbC5tYXRj
aE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICh0aGlzLmlzSFRNTERvY3Vt
ZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0
dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSwgc2VsZWN0b3IucmVwbGFj
ZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypcXF0vZywgJ1skMT1cIiQyXCJdJykp
O1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxuXG5cdHZhciBwYXJzZWQgPSB0aGlz
LlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiB0cnVlO1xuXG5c
dC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFyIGV4cHJlc3Npb25zID0gcGFyc2Vk
LmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwgY3VycmVudEV4cHJlc3Npb247
XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsr
KXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09IDEpe1xuXHRcdFx0dmFyIGV4
cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihu
b2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBleHAudGFnLnRvVXBwZXJDYXNl
KCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVzLCBleHAucHNldWRvcykpIHJl
dHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisrO1xuXHRcdH1cblx0fVxuXG5cdGlm
IChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuXHR2
YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBwYXJzZWQpLCBpdGVtO1xuXHRm
b3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRcdGlmIChpdGVtID09PSBub2RlKSBy
ZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5sb2NhbC5tYXRjaFBzZXVk
byA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtcblx0dmFyIHBzZXVkb05hbWUgPSAn
cHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9OYW1lXSkgcmV0dXJuIHRoaXNbcHNl
dWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0cmlidXRlID0gdGhpcy5nZXRBdHRy
aWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1lbnQpID8gYXJndW1lbnQgPT0gYXR0
cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5tYXRjaFNlbGVjdG9yID0gZnVuY3Rp
b24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0
YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gbm9kZS5ub2Rl
TmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRpZiAodGFnID09ICcqJyl7
XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxzZTsgLy8gRml4IGZvciBjb21t
ZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG5vZGVO
YW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpZCAmJiBub2Rl
LmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBpLCBwYXJ0
LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2VzLmxlbmd0aDsgaS0tOyl7XG5c
dFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG5cdFx0aWYgKCEoY2xz
ICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRp
ZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5ndGg7IGktLTspe1xuXHRcdHBh
cnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9wZXJhdG9yID8gIXBhcnQudGVzdCh0
aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRoaXMuaGFzQXR0cmlidXRlKG5v
ZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChwc2V1ZG9zKSBmb3IgKGkg
PSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IHBzZXVkb3NbaV07XG5cdFx0aWYg
KCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0LnZhbHVlKSkgcmV0dXJuIGZh
bHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIGNvbWJpbmF0b3JzID0ge1xuXG5c
dCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkgbGV2ZWxcblxuXHRcdHZhciBp
LCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlzSFRNTERvY3VtZW50KXtcblx0XHRc
dGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBub2RlLmFsbCkgfHwgKHRoaXMuaWRH
ZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUg
IT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyB3
aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRcdFx0XHRcdC8vIGlmIHRoZXJlcyBq
dXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwgZWxzZSBpdCB3aWxsIGJlIGEgY29s
bGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5hbGxbaWRdO1xuXHRcdFx0XHRcdGlm
ICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuWzBdKSBjaGlsZHJl
biA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2kr
K107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lk
Jyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9kZS5ub2RlVmFsdWUgPT0gaWQpe1xu
XHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0
XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWl0ZW0p
e1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGluIHRoZSBkb20gd2UgcmV0dXJuLCBl
bHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUgZ2V0QnlJZCBsYWJlbFxuXHRcdFx0
XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkpIHJldHVybjtcblx0XHRcdFx0
XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudCAh
PT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkgcmV0dXJuO1xuXHRcdFx0XHR0
aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtc
blx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0QnlDbGFzczogaWYgKGNsYXNzZXMg
JiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0
XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NMaXN0Lmpv
aW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJy
ZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytd
OykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xu
XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdldEJ5VGFnOiB7XG5cdFx0XHRj
aGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcblx0XHRcdGlmICghKGNo
aWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5VGFnO1xuXHRcdFx0aWYgKCF0
aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0XHRcdGZvciAoaSA9IDA7IGl0ZW0g
PSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnPic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgY2hpbGRyZW5c
blx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBkbyB7XG5cdFx0XHRpZiAobm9kZS5u
b2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSk7XG5c
dH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0
U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5c
dFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUuZmlyc3RD
aGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlz
LnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnfic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzXG5c
dFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9k
ZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7
XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRV
bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnKysnOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBz
aWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhpc1snY29tYmluYXRvcjorJ10obm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1snY29t
YmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFuZCBwcmV2aW91cyBzaWJsaW5nc1xu
XHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6IX4nXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISc6IGZ1bmN0aW9uKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBhbGwgcGFyZW50
IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2Rl
KSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnIT4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0IHBh
cmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0aWYgKG5v
ZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsnOiBmdW5jdGlvbihub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5
cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0JyFeJzogZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGxh
c3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRc
dFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOiEr
J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxu
XHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5v
ZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250
aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlz
LmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAodmFyIGMgaW4gY29tYmluYXRvcnMp
IGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3JzW2NdO1xuXG52YXIgcHNldWRv
cyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2VtcHR5JzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdHJldHVybiAhKGNo
aWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5pbm5lclRleHQgfHwgbm9kZS50
ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5cdCdub3QnOiBmdW5jdGlvbihub2Rl
LCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0Y2hOb2RlKG5vZGUsIGV4cHJlc3Np
b24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9uKG5vZGUsIHRleHQpe1xuXHRcdHJl
dHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykuaW5kZXhPZih0
ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRc
dHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUg
PT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LWNo
aWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGlu
ZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1
ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2
ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChw
cmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5c
dFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVUeXBlID09
IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjxudGgtcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8o
J2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyksXG5cblx0J250aC1sYXN0LWNo
aWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5n
JywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1
ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIVHlwZScsIHRydWUpLFxuXG5c
dCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAn
cHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1ZSksXG5cblx0J2luZGV4Jzog
ZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxk
J10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5cblx0J2V2ZW4nOiBmdW5jdGlvbihu
b2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybicpO1xu
XHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRv
Om50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5cblx0Lyo8L250aC1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2ZpcnN0
LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVO
YW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0
fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1l
ID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkg
aWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFy
IHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChwcmV2
ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlTmFtZSA9PSBub2RlTmFtZSkg
cmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBu
ZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBm
YWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjwvb2YtdHlwZS1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3NcblxuXHQnZW5hYmxlZCc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQnZGlzYWJsZWQn
OiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQn
Y2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmNoZWNrZWQgfHwgbm9k
ZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1
cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09
IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhpcy5oYXNBdHRyaWJ1dGUobm9k
ZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxuXG5cdCdzZWxlY3RlZCc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVkO1xuXHR9XG5cblx0Lyo8L3BzZXVk
by1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4gcHNldWRvcykgbG9jYWxbJ3BzZXVk
bzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1dGVzIG1ldGhvZHNcblxudmFyIGF0
dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0ge1xuXG5cdCdmb3InOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGluIHRoaXMpID8gdGhpcy5odG1sRm9y
IDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxuXG5cdCdocmVmJzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVm
JywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/IHRoaXMuc3R5bGUuY3NzVGV4dCA6
IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxuXG5cdCd0YWJpbmRleCc6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ3Rh
YmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3Bl
Y2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSxcblxuXHQndHlw
ZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJyk7XG5c
dH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUg
PSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVW
YWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRlR2V0dGVycy5NQVhMRU5HVEggPSBh
dHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4bGVuZ3RoO1xu
XG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9
KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8vIFNsaWNrIGZpbmRlclxuXG5TbGlj
ay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpe1xuXHRyZXR1
cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCk7XG59O1xuXG5TbGlj
ay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbil7XG5cdHJldHVybiBsb2NhbC5z
ZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7XG59O1xuXG4vLyBTbGljayBj
b250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5zID0gZnVuY3Rpb24oY29udGFpbmVy
LCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFpbmVyKTtcblx0cmV0dXJuIGxvY2Fs
LmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgZ2V0
dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2Nh
bC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmdldEF0dHJpYnV0ZShub2RlLCBu
YW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xu
XHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmhhc0F0dHJpYnV0ZShu
b2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJcblxuU2xpY2subWF0Y2ggPSBmdW5j
dGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUgJiYgc2VsZWN0b3IpKSByZXR1cm4g
ZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IG5vZGUpIHJldHVybiB0cnVl
O1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLm1hdGNoTm9kZShu
b2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgYWNjZXNzb3JcblxuU2xp
Y2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2su
bG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7XG5cdHJldHVybiBsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xpY2sgcHNldWRvIGFjY2Vzc29yXG5c
blNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWxbJ3BzZXVk
bzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0cmV0dXJuIGZuLmNh
bGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxv
b2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIgcHNldWRvID0gbG9jYWxbJ3BzZXVk
bzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBmdW5jdGlvbihhcmd1bWVudCl7XG5c
dFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIG51
bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3JcblxuU2xpY2sub3ZlcnJpZGUg
PSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3ZlcnJpZGUocmVnZXhwLCBmbik7XG5c
dHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBsb2NhbC5pc1hNTDtcblxuU2xpY2su
dWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxvY2FsLmdldFVJREhUTUwobm9kZSk7
XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHko
Lyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6
IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnRcblxuZGVz
Y3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRlbXMgaW4gTW9vVG9vbHMuIENv
bnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJzIGZ1bmN0aW9uLCBhbmQgYW4g
aGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1ldGhvZHMgdG8gbGV0IHlvdSBl
YXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBTdHJpbmcsIEZ1bmN0
aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGljay5GaW5kZXJdXG5cbnByb3Zp
ZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUsIFNlbGVjdG9yc11cblxuLi4u
XG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgcHJvcHMp
e1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0cnVjdG9yc1t0YWddO1xuXHRpZiAo
a29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7XG5cdGlmICh0eXBlb2YgdGFn
ICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5zZXQocHJvcHMpO1xuXG5cdGlm
ICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15bXFx3LV0rJC8pLnRlc3QodGFnKSl7
XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhwcmVzc2lvbnNbMF1bMF07XG5c
dFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYnIDogcGFyc2VkLnRhZztcblx0XHRp
ZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3BzLmlkID0gcGFyc2VkLmlkO1xu
XG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRlcztcblx0XHRpZiAoYXR0cmli
dXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtcblx0XHRcdGlmIChwcm9wc1thdHRy
LmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlmIChhdHRyLnZhbHVlICE9IG51bGwg
JiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIua2V5XSA9IGF0dHIudmFsdWU7XG5c
dFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5vcGVyYXRvcikgcHJvcHNbYXR0ci5r
ZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2VkLmNsYXNzTGlzdCAmJiBwcm9wc1sn
Y2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBhcnNlZC5jbGFzc0xpc3Quam9pbign
ICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1lbnQodGFnLCBwcm9wcyk7XG59
O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50LnByb3RvdHlwZSA9IEJyb3dz
ZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQgSUU5IHJlcXVpcmUgdGhlIHdyYXBw
aW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50ID0gKGZ1bmN0aW9uKGZpcmVFdmVu
dCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdHJldHVybiBmaXJl
RXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0fTtcblx0fSkoRWxlbWVudC5wcm90
b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVtZW50KS5taXJy
b3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90b3R5cGVbbmFtZV0pIHJldHVybjtc
blxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJl
c3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVudHMgPSB0cnVlO1xuXHRcdGZvciAo
dmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1l
bnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0gZWxlbWVudFtuYW1lXS5hcHBseShl
bGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVsZW1lbnRzICYmIHR5cGVPZihyZXN1
bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVybiAoZWxlbWVudHMpID8gbmV3IEVs
ZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxuXHRFbGVtZW50cy5pbXBsZW1lbnQo
b2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucGFyZW50ID0g
T2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xuXHRcdCckY29uc3RydWN0b3InOiBF
bGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29udmVydCgnZWxlbWVudCcpLmhpZGUo
KVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdFx0
RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cdH0pO1xufVxuXG5FbGVtZW50LkNv
bnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9IG5ldyBUeXBlKCdJRnJhbWUnLCBm
dW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHtcblx0XHRw
cm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFtZTogZnVuY3Rpb24ob2JqKXtcblx0
XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIHByb3BzID0g
cGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0aWYgKHBhcmFtcy5pZnJhbWUpIGlm
cmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xuXHR2YXIgb25sb2FkID0gcHJvcHMu
b25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHByb3BzLm9ubG9hZDtcblx0cHJvcHMu
aWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5uYW1lLCBpZnJhbWUgPyAoaWZyYW1l
LmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0cmluZy51bmlxdWVJRCgpXS5waWNr
KCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAnaWZyYW1lJywgcHJvcHMpO1xu
XG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9ubG9hZC5jYWxsKGlmcmFtZS5jb250
ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZyYW1lc1twcm9wcy5pZF0pIG9uTG9h
ZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG5cdHJldHVy
biBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhpcy5FbGVtZW50cyA9IGZ1bmN0aW9u
KG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCl7XG5cdFx0dmFyIHVuaXF1ZXMg
PSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0
XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0XHRcdGlmICghdW5pcXVlc1t1aWRd
KXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5wdXNoKG5vZGUp
O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVudHMucHJvdG90eXBlID0ge2xlbmd0
aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxubmV3IFR5cGUoJ0VsZW1lbnRzJywg
RWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIsIGJpbmQp
e1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRz
KEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0gJ3N0cmluZycpID8gZnVuY3Rp
b24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChmaWx0ZXIpO1xuXHRcdH0gOiBmaWx0
ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVzaDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJn
dW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xlbmd0aCsrXSA9IGl0ZW07XG5cdFx0
fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpO1xuXHR9LnByb3RlY3QoKSxcblxu
XHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVtcyA9IFtdO1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRl
bSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgaXRlbXMucHVz
aChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5
KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0Y29uY2F0OiBmdW5jdGlvbigpe1xu
XHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlzKTtcblx0XHRmb3IgKHZhciBp
ID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0g
PSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkpIG5ld0Vs
ZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3RWxlbWVudHMucHVzaChpdGVtKTtc
blx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRhcHBl
bmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY29sbGVj
dGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xsZWN0aW9uW2ldKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0
d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMubGVuZ3RoXTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxuXG4oZnVuY3Rpb24oKXtcblxuLy8g
RkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZSwgb2JqZWN0ID0geycw
JzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2UuY2FsbChvYmplY3QsIDEsIDEpO1xu
aWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3NwbGljZScsIGZ1bmN0aW9u
KCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0dmFyIHJlc3VsdCA9IHNwbGljZS5h
cHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVuZ3RoID49IHRoaXMubGVuZ3RoKSBk
ZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1bHQ7XG59LnByb3RlY3QoKSk7XG5c
bkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9kLCBuYW1lKXtcblx0RWxlbWVudHMu
aW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJyYXkubWlycm9yKEVsZW1lbnRzKTtc
blxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUw7XG50cnkge1xuXHRj
cmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGlucHV0
IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChlKXt9XG5cbnZhciBlc2NhcGVRdW90
ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyArIGh0bWwpLnJlcGxhY2UoLyYvZywg
JyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufTtcbi8qPC9sdElFOD4qL1xuXG4v
KjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1l
bnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkg
e1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0
ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztc
bn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdFbGVt
ZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAocHJvcHMpe1xuXHRcdFx0aWYgKHBy
b3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBwcm9wcy5jaGVja2Vk
O1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PSAn
cmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52YWx1ZSA9ICdvbic7XG5cdFx0
XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBiZSBzZXQgYmVmb3JlIGNoYW5n
aW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0aWYgKCFjYW5DaGFuZ2VTdHlsZUhU
TUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0c3R5bGVFbGVtZW50LnNldEF0dHJp
YnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkgZGVsZXRl
IHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkKHN0eWxlRWxlbWVudCkuc2V0KHBy
b3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0Lyo8bHRJRTg+Ki8vLyBG
aXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVydGllcyBpbiBJRSA8IDhcblx0XHRc
dGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRcdFx0XHR0YWcgPSAnPCcgKyB0YWc7
XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1lPVwiJyArIGVzY2FwZVF1b3Rl
cyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSB0YWcgKz0gJyB0
eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICdcIic7XG5cdFx0XHRcdHRhZyAr
PSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMu
dHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTtcblx0fVxuXG59KTtcblxu
fSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9mKHdpbmRvdyk7XG5TbGljay51aWRP
Zihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5cblx0bmV3VGV4dE5vZGU6IGZ1
bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHR9
LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy53aW5kb3c7XG5cdH0s
XG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5cGVzID0ge1xuXG5cdFx0XHRzdHJp
bmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlkID0gU2xpY2suZmluZChk
b2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSk7XG5cdFx0XHRcdHJldHVy
biAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51bGw7XG5cdFx0XHR9LFxuXG5c
dFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtcblx0XHRcdFx0U2xpY2sudWlkT2Yo
ZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZhbWlseSAmJiAhKC9eKD86b2JqZWN0
fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0XHRcdFx0dmFyIGZpcmVFdmVudCA9
IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGluZyBuZWVkZWQgaW4gSUU3LCBvciBl
bHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9IGZ1bmN0aW9uKHR5cGUsIGV2ZW50
KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlwZSwgZXZlbnQpO1xuXHRcdFx0XHRc
dH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Qcm90b3R5cGUpO1xuXHRc
dFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0sXG5cblx0XHRcdG9iamVjdDogZnVu
Y3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlmIChvYmoudG9FbGVtZW50KSByZXR1
cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2FzaCk7XG5cdFx0XHRcdHJl
dHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHR5cGVzLnRleHRub2RlID0gdHlw
ZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVzLmRvY3VtZW50ID0gZnVuY3Rpb24o
emVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9u
KGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYgZWwuJGZhbWlseSAmJiBlbC51bmlx
dWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKGVsKTtcblx0XHRc
dHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwgZG9jIHx8IGRv
Y3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5cbn0pO1xuXG5pZiAod2luZG93LiQg
PT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7XG5cdHJldHVy
biBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQpO1xufSk7XG5cbldpbmRvdy5pbXBs
ZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmRv
Y3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcs
IHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIFNs
aWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMpO1xuXHR9LFxuXG5cdGdl
dEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChT
bGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxuXG59KTtcblxudmFyIGNvbnRhaW5z
ID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0cmV0dXJuIFNsaWNrLmNvbnRhaW5z
KHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1lbnQuY29udGFpbnMpIERvY3VtZW50
LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7XG5cblxuXG4vLyB0cmVlIHdh
bGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlvbihleHByZXNzaW9uLCBjb21i
aW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29tYmluYXRvcjtcblxuXHRleHBy
ZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4cHJlc3Npb24pKTtcblxuXHR2YXIg
ZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gZXhw
cmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Npb25zW2ldWzBdLmNvbWJpbmF0b3Ig
PSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxuT2JqZWN0LmZvckVh
Y2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3VzOiAnIX4nLFxuXHRnZXRQYXJlbnQ6
ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1l
bnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVt
ZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0p
O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6ICd+Jyxcblx0Z2V0QWxsUHJldmlv
dXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRnZXRDaGlsZHJlbjogJz4nLFxuXHRn
ZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1l
bnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7
XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRGaXJzdDogZnVuY3Rp
b24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlz
LCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpWzBdKTtcblx0fSxcblxuXHRnZXRM
YXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2su
c2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSkuZ2V0TGFzdCgp
KTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3du
ZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxcblxuXHRnZXRFbGVtZW50QnlJZDog
ZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsICcj
JyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpKTtcblx0fSxcblxuXHRt
YXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICFleHByZXNzaW9uIHx8IFNs
aWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5cbn0pO1xuXG5cblxuaWYgKHdpbmRv
dy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcsIGZ1bmN0aW9uKHNlbGVjdG9yKXtc
blx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0aWYgKHR5cGVvZiBzZWxlY3RvciA9
PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBzZWxlY3Rvciwg
bmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlzRW51bWVyYWJsZShzZWxlY3Rvcikp
IHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9XG5cdHJldHVybiBuZXcgRWxlbWVu
dHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNcblxudmFyIGluc2VydGVycyA9IHtc
blxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQg
PSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9y
ZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oY29udGV4dCwg
ZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRpZiAo
cGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQubmV4dFNpYmxpbmcp
O1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0ZWxl
bWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxuXHR0b3A6IGZ1bmN0aW9uKGNvbnRl
eHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQu
Zmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJzLmluc2lkZSA9IGluc2VydGVycy5i
b3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFByb3BlcnR5XG5cbnZhciBwcm9wZXJ0
eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307XG5cbi8vIHByb3BlcnRpZXNcblxu
dmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2goW1xuXHQndHlwZScsICd2YWx1ZScs
ICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFjaW5n
JywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93U3BhbicsICd0YWJJbmRleCcsICd1
c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHByb3BlcnRpZXNbcHJvcGVydHkudG9M
b3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9wZXJ0aWVzLmh0bWwgPSAnaW5uZXJI
VE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS50
ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAndGV4dENvbnRlbnQnO1xuXG5PYmpl
Y3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFsLCBrZXkpe1xuXHRwcm9wZXJ0eVNl
dHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW3JlYWxdID0gdmFs
dWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8bHRJRTk+Ki9cbnByb3BlcnR5U2V0
dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7
XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSBub2RlLnNldCgnaHRtbCcsIHZh
bHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9IHZhbHVlO1xuXHR9O1xufSko
cHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdldHRlcnMudGV4dCA9IChmdW5jdGlv
bihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlLmdl
dCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRNTCA6IGdldHRlcihub2RlKTtcblx0
fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9sdElFOT4qL1xuXG4vLyBCb29sZWFu
c1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcsICdkZWNs
YXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNhYmxlZCcsICdyZWFkT25seScsICdt
dWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5cdCdkZWZlcicsICdkZWZhdWx0Q2hl
Y2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0b3BsYXknLFxuXHQnbG9vcCdcbl07
XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFjaChib29scywgZnVuY3Rpb24oYm9v
bCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2UoKTtcblx0Ym9vbGVhbnNbbG93ZXJd
ID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVl
KXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJzW2xv
d2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhIW5vZGVbYm9vbF07XG5cdH07XG59
KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBwZW5kKHByb3BlcnR5U2V0dGVycywg
e1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2NsYXNzTmFtZScg
aW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8fCAnJykgOiBub2RlLnNldEF0dHJp
YnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zvcic6IGZ1bmN0aW9uKG5vZGUsIHZh
bHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9kZS5odG1sRm9yID0gdmFsdWUgOiBu
b2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0
aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkgPyBub2RlLnN0eWxlLmNzc1RleHQg
PSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZhbHVlKTtcblx0fSxcblxuXHQn
dmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZS52YWx1ZSA9ICh2YWx1ZSAh
PSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5cbnByb3BlcnR5R2V0dGVyc1snY2xh
c3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdjbGFzc05hbWUnIGluIG5vZGUpID8g
bm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xufTtc
blxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRv
bicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0aHJvd3NcbnRyeSB7IGVsLnR5
cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVsLnR5cGUgIT0gJ2J1dHRvbicpIHBy
b3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRub2RlLnNldEF0
dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51bGw7XG4vKiA8L3dlYmtpdD4gKi9c
blxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRN
TCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7
XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcg
PSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdp
bjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31c
blx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbnZhciBpbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxlSW5wdXRWYWx1ZSwgaHRtbDVJbnB1
dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9ICd0JztcbmlucHV0LnR5cGUgPSAn
c3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlICE9ICd0JztcblxuLy8g
IzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50XCIgd2hlbiB0cnlpbmcgdG8gdXNl
IGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52YWx1ZSA9ICcnO1xuXHRpbnB1dC50
eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQgPSBpbnB1dC50eXBlID09ICdlbWFp
bCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtcblxuaWYgKHZvbGF0aWxlSW5wdXRW
YWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rp
b24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZhbHVlID0gbm9kZS52YWx1ZTtcblx0
XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBjYXRjaCAo
ZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0eSwgc2V0UHJvcGVydHkgKi9cblxu
LyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmlidXRlID0gKGZ1bmN0aW9uKGRpdil7
XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0dXJuIChkaXYuZ2V0QXR0cmlidXRl
KCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlvbih0ZXN0KXtcblx0dGVzdC5pbm5l
ckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3VsZF9maXhcIiB2YWx1ZT1cInRoZSB1
bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVzdC5jbG9uZU5vZGUodHJ1ZSkuZmly
c3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhhc0NsYXNzTGlzdCA9ICEhZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXG52YXIgY2xhc3NlcyA9IGZ1bmN0
aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0gKGNsYXNzTmFtZSB8fCAnJykuY2xl
YW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJldHVybiBjbGFzc05hbWVzLmZpbHRl
cihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFzc05hbWUgIT09ICcnICYmICF1bmlx
dWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFtZV0gPSBjbGFzc05hbWU7XG5c
dH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMu
Y2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1vdmVGcm9tQ2xhc3NMaXN0ID0gZnVu
Y3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbn07XG5cbkVsZW1l
bnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xu
XHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtc
blx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRyaWJ1dGVXaGl0ZUxpc3Q7XG5cdFx0
XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdoaXRlTGlzdCA9IHRoaXMucmV0
cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5cdFx0XHQvKiA8L2x0SUU5PiAqL1xu
XG5cdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRl
KG5hbWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRlc0dldEF0
dHJpYnV0ZSkgZGVsZXRlIGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXTtcblx0XHRcdFx0LyogPC9s
dElFOT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKG5hbWUs
ICcnICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRl
c0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdFx0
LyogPC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7XG5cdFx0Zm9yICh2YXIgYXR0
cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHkoYXR0cmlidXRlLCBhdHRyaWJ1
dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFByb3BlcnR5
OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJvcGVydHlHZXR0ZXJzW25hbWUu
dG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJuIGdldHRlcih0aGlzKTtcblx0
XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKXtcblx0XHRcdHZh
ciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBhdHRyaWJ1dGVXaGl0ZUxpc3Qg
PSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0Jywge30pO1xuXHRcdFx0aWYgKCFh
dHRyKSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFuZG8gJiYgIWF0dHJpYnV0ZVdo
aXRlTGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRoaXMub3V0ZXJIVE1MO1xuXHRc
dFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQgZmluZCBtZW50aW9uIG9mIGF0
dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIoMCwgb3V0ZXIuc2VhcmNoKC9c
XC8/WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5hbWUpIDwgMCkgcmV0dXJuIG51
bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHR9XG5c
dFx0fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3VsdCA9IFNsaWNrLmdldEF0dHJp
YnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQgJiYgIVNsaWNrLmhhc0F0dHJp
YnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9LFxuXG5cdGdldFByb3BlcnRp
ZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3VtZW50cyk7
XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHksIHRoaXMpLmFzc29jaWF0ZShh
cmdzKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0
dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVy
dGllczogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3VtZW50cywgdGhpcy5yZW1vdmVQ
cm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlv
bihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3By
b3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8gcHJvcGVydHkuc2V0LmNhbGwo
dGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG5cdH0ub3Zlcmxv
YWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9
IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4gKHByb3BlcnR5ICYmIHByb3Bl
cnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0aGlzLmdldFByb3BlcnR5KHBy
b3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKHByb3Ape1xu
XHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVy
dHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2UuYXBwbHkodGhpcykgOiB0aGlz
LnJlbW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhhc0Ns
YXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiB0aGlz
LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1l
KXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSkuY29udGFpbnMoY2xhc3NOYW1l
KTtcblx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1l
KXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRUb0NsYXNzTGlzdCwgdGhpcyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHRoaXMu
Y2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0aGlzLmNsYXNzTmFtZSkuam9p
bignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBoYXNDbGFz
c0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JF
YWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDog
ZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1lcyA9IGNsYXNzZXModGhpcy5j
bGFzc05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGNsYXNzTmFtZXMuZXJh
c2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5qb2luKCcg
Jyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKGNs
YXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxsKSBmb3JjZSA9ICF0aGlzLmhh
c0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkgPyB0aGlzLmFkZENsYXNzKGNs
YXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRvcHQ6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZyYWdtZW50LCBlbGVtZW50cyA9
IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXHRc
dGlmIChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xu
XHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50c1tpXSwgdHJ1ZSk7XG5cdFx0
XHRpZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHRcdH1cblxuXHRc
dGlmIChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVyZSl7XG5cdFx0
cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3VGV4dE5vZGUodGV4dCksIHdo
ZXJlKTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVy
c1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUpLCB0aGlzKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0
aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1ZSkp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2VzOiBmdW5jdGlvbihlbCl7XG5c
dFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwucGFyZW50Tm9kZS5yZXBsYWNl
Q2hpbGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBzOiBmdW5j
dGlvbihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdHJl
dHVybiB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7XG5cdH0sXG5cblx0Z2V0U2Vs
ZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZEluZGV4OyAvLyBTYWZhcmkgMy4y
LjFcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZlcnQodGhpcy5vcHRpb25zKS5m
aWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQ7XG5c
dFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHF1
ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygnaW5wdXQsIHNlbGVjdCwgdGV4
dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0eXBlID0gZWwudHlwZTtcblx0
XHRcdGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBlID09ICdzdWJtaXQnIHx8IHR5
cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBlID09ICdpbWFnZScpIHJldHVy
bjtcblxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykgPT0gJ3NlbGVjdCcpID8gZWwu
Z2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRcdFx0Ly8gSUVcblx0XHRcdFx0
cmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xuXHRcdFx0fSkgOiAoKHR5cGUg
PT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFlbC5jaGVja2VkKSA/IG51bGwg
OiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZlcnQodmFsdWUpLmVhY2goZnVu
Y3Rpb24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5lZCcpIHF1ZXJ5
U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUpICsgJz0nICsgZW5jb2RlVVJJ
Q29tcG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHF1ZXJ5U3Ry
aW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBlbmRIVE1MXG5cbnZhciBhcHBl
bmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2luJyxcblx0YWZ0ZXI6ICdhZnRl
ckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDogJ2FmdGVyQmVnaW4nLFxuXHRp
bnNpZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCgnYXBwZW5kSFRNTCcs
ICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkg
PyBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0QWRqYWNlbnRIVE1MKGFwcGVu
ZEluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xuXHRyZXR1cm4gdGhpcztcbn0g
OiBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rpdics
IHtodG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNoaWxkTm9kZXMsXG5cdFx0ZnJh
Z21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFnbWVudCkgcmV0dXJuIHRoaXM7
XG5cdGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFnbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVu
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChjaGlsZHJl
bltpXSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShmcmFn
bWVudCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZhciBjb2xsZWN0ZWQgPSB7fSwg
c3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlkKXtcblx0cmV0dXJuIChzdG9y
YWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xuXG52YXIgY2xlYW4gPSBmdW5j
dGlvbihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVtYmVyO1xuXHRpZiAoaXRlbS5y
ZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlmIChpdGVtLmNsZWFyQXR0cmli
dXRlcykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVpZCAhPSBudWxsKXtcblx0XHRk
ZWxldGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbdWlkXTtcblx0fVxuXHRy
ZXR1cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5wdXQ6ICdjaGVja2VkJywgb3B0
aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBjaGlsZHJlbiA9IGNsZWFuKHRo
aXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJyYXkuZWFjaChjaGlsZHJlbiwg
Y2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0
fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5jb252ZXJ0KHRoaXMuY2hpbGRO
b2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnBhcmVudE5vZGUpID8gdGhp
cy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztcblx0fSxcblxuXHRjbG9uZTog
ZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVudHMgPSBjb250ZW50cyAhPT0g
ZmFsc2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoY29udGVudHMpLCBjZSA9IFtj
bG9uZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRlbnRzKXtcblx0XHRcdGNlLmFw
cGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0
XHRcdHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KSkpO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHR2YXIg
bm9kZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRpZiAoIWtlZXBpZCkgbm9kZS5y
ZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKG5vZGUu
Y2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0XHRc
dFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0XHRcdG5vZGUucmVtb3ZlQXR0
cmlidXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5vZGUub3B0aW9ucyl7XG5cdFx0
XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1lbnQub3B0aW9ucztcblx0XHRc
dFx0XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tqXS5zZWxlY3RlZCA9IGVvW2pd
LnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRc
dHZhciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRcdGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJvcF0gPSBlbGVtZW50W3Byb3Bd
O1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhhc0Nsb25lQnVnKXtcblx0XHRc
dHZhciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKSwgdG8gPSB0aGlz
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRcdGZvciAoaSA9IGNvLmxlbmd0
aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJIVE1MO1xuXHRcdH1cblx0XHQv
KjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xvbmUpO1xuXHR9XG5cbn0pO1xu
XG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0
YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAod2luZG93LmF0dGFjaEV2
ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0XHRjb2xsZWN0ZWRbU2xpY2su
dWlkT2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnRMaXN0ZW5l
cikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0
ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAo
dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwg
Zm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0YWNoRXZlbnQoJ29uJyArIHR5
cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXRyaWV2ZTogZnVuY3Rpb24o
cHJvcGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMp
KSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChkZmx0ICE9IG51bGwgJiYgcHJv
cCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0O1xuXHRcdHJldHVybiBw
cm9wICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRzdG9yZTogZnVuY3Rpb24ocHJv
cGVydHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7
XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdl
dChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbcHJvcGVydHldO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4qL1xuaWYgKHdpbmRvdy5hdHRh
Y2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgZ2MgPSBmdW5jdGlv
bigpe1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4pO1xuXHRcdGlmICh3aW5kb3cu
Q29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0d2luZG93LnJlbW92ZUxpc3Rl
bmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2FkJywg
Z2MpO1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVydGllcyA9IHt9O1xuXG5cblxu
RWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDogZnVuY3Rpb24oc3R5bGUpe1xu
XHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5j
dGlvbigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xuXHR9XG5cbn07XG5cbkVsZW1l
bnQuUHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRp
ZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xuXHRcdGlmIChodG1sID09IG51
bGwpIGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRtbCkgPT0gJ2FycmF5JykgaHRt
bCA9IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmICh0aGlzLnN0eWxl
U2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHlsZVNoZWV0LmNzc1RleHQgPSBo
dG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHR9LFxu
XHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRtbCcsICcnKTtcblx0fVxuXG59
O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwgc3VwcG9ydHNUYWJsZUlubmVy
SFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVlO1xuXG4vKjxsdElFOT4qL1xu
Ly8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJhcnRsZXR0LmNvbS9pbm5lcnNo
aXYvXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgZnJhZ21l
bnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1cHBvcnRzSFRNTDVFbGVtZW50
cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAoIXN1cHBvcnRzSFRNTDVFbGVt
ZW50cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0
YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJr
IG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8nLnNw
bGl0KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
LCBsID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdtZW50LmNyZWF0ZUVsZW1lbnQo
dGFnc1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5zdXBw
b3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHR2YXIg
dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuXHR0YWJsZS5pbm5lckhU
TUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRydWU7XG59KTtcblxuLyo8bHRG
RjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksIGh0bWwgPSAnPHRk
PjwvdGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0c1RSSW5uZXJIVE1MID0gKHRy
LmlubmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9sdEZGND4qL1xuXG5pZiAoIXN1
cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5lckhUTUwgfHwgIXN1cHBvcnRz
SFRNTDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0ID0gKGZ1bmN0
aW9uKHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xuXHRcdFx0dGFibGU6IFsxLCAn
PHRhYmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBbMSwgJzxzZWxlY3Q+JywgJzwv
c2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48
L3RhYmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90
Ym9keT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0aW9ucy50aGVhZCA9IHRyYW5z
bGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxuXHRcdHJldHVybiBmdW5jdGlv
bihodG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlmICh0aGlzLnN0eWxlU2hlZXQp
IHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0
dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTtcblx0XHRcdGlmICghd3Jh
cCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAsICcnLCAnJ107XG5cdFx0XHRp
ZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblxuXHRcdFx0dmFyIGxldmVs
ID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCB0YXJn
ZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50
LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5pbm5lckhUTUwgPSBbd3JhcFsx
XSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xuXHRcdFx0d2hpbGUgKGxldmVs
LS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0dGhpcy5lbXB0eSgpLmFkb3B0
KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSBm
cmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIgPSBudWxsO1xuXHRc
dH07XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0KTtcbn1cbi8qPC9JRT4qL1xu
XG4vKjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9y
bScpO1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbj5zPC9vcHRpb24+PC9z
ZWxlY3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFsdWUgIT0gJ3MnKSBFbGVtZW50
LlByb3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFy
IHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9ICdzZWxlY3QnKSByZXR1cm4g
dGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlz
LmdldEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBvcHRp
b24gPSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUo
J3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQp
ID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHRcdFx0aWYgKG9wdGlvblZh
bHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG5cdFx0fVxuXHR9
LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9uID0gdGhpcywgdGFnID0gb3B0
aW9uLmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxlY3QnICYmIHRhZyAhPSAnb3B0
aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7XG5cblx0XHRpZiAodGFnID09
ICdzZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVjdGVkKClbMF0pKSByZXR1cm4g
Jyc7XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpO1xu
XHRcdHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRp
b24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0gbnVsbDtcbi8qPC9sdElFOT4q
L1xuXG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmdldEF0dHJp
YnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9IHtcblx0c2V0OiBmdW5jdGlv
bihpZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9
IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuaWQgfHwgbnVs
bDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0
cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xuLyo8L0lFPiovXG5cbn0pKCk7
XG5cbi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBF
dmVudCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jvc3MtYnJvd3Nlci5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwg
QXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJvdmlkZXM6IEV2ZW50XG5cbi4u
LlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9O1xudmFyIG5vcm1hbGl6ZVdo
ZWVsU3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3JtYWxpemVkO1xuXHRpZiAoZXZl
bnQud2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50LndoZWVsRGVsdGEgJSAxMjAg
PT0gMCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53aGVlbERlbHRhIC8gMTI7XG5c
dH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRlbHRhWSB8fCBldmVudC5kZXRh
aWwgfHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQgJSAzID09IDAgPyByYXdBbW91
bnQgLyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVybiBub3JtYWxpemVkO1xufTtc
blxudmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBUeXBlKCdET01FdmVudCcsIGZ1
bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0gd2luZG93O1xuXHRldmVudCA9
IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRlbmRlZCkgcmV0dXJuIGV2ZW50
O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVuZGVkID0gdHJ1ZTtcblx0dGhp
cy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRyb2wgPSBldmVudC5jdHJsS2V5
O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5tZXRhID0gZXZlbnQubWV0YUtl
eTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBlO1xuXHR2YXIgdGFyZ2V0ID0g
ZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFy
Z2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXHR0aGlzLnRh
cmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5cGUuaW5kZXhPZigna2V5Jykg
PT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZlbnQud2hpY2ggfHwgZXZlbnQu
a2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUgIT0gJ2tleXByZXNzJykgdGhp
cy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAna2V5ZG93bicgfHwgdHlwZSA9
PSAna2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNvZGUgPCAxMjQpIHRoaXMua2V5
ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAoY29kZSA+IDk1ICYmIGNvZGUg
PCAxMDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0XHRpZiAodGhpcy5rZXkgPT0g
bnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93ZXJDYXNlKCk7
XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2RibGNsaWNrJyB8fCB0
eXBlID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ0RPTU1v
dXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0gMCl7XG5cdFx0dmFyIGRvYyA9
IHdpbi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRN
b2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xuXHRcdHRoaXMucGFn
ZSA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIDogZXZl
bnQuY2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51
bGwpID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9jLnNjcm9sbFRvcFxuXHRcdH07
XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBl
dmVudC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNsaWVudFgsXG5cdFx0XHR5OiAo
ZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdpbi5wYWdlWU9mZnNldCA6IGV2
ZW50LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwg
dHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwnKSB0aGlzLndoZWVsID0gbm9y
bWFsaXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdodENsaWNrID0gKGV2ZW50Lndo
aWNoID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlmICh0eXBlID09ICdtb3VzZW92
ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdtb3VzZWVudGVyJyB8fCB0eXBl
ID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdldCA9IHR5cGUgPT0gJ21vdXNl
b3ZlcicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2YXIgcmVsYXRlZCA9IGV2ZW50
LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAnZnJvbScgOiAndG8nKSArICdF
bGVtZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxhdGVkLm5vZGVUeXBlID09IDMp
IHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQg
PSBkb2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZS5pbmRleE9m
KCd0b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJlJykgPT0gMCl7XG5cdFx0dGhp
cy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGUgPSBldmVudC5zY2Fs
ZTtcblx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xuXHRcdHRo
aXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcblx0XHR2YXIgdG91Y2hl
cyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0aWYgKHRvdWNoZXMgJiYgdG91
Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBdO1xuXHRcdFx0dGhpcy5wYWdl
ID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5cdFx0XHR0aGlzLmNsaWVudCA9
IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtcblx0XHR9XG5cdH1cblxuXHRp
ZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRpZiAoIXRoaXMucGFnZSkgdGhp
cy5wYWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50KHtcblxuXHRzdG9wOiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCkuc3RvcFByb3BhZ2F0aW9u
KCk7XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0
XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVu
dC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGVsc2Ug
dGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihjb2RlLCBrZXkpe1xuXHRfa2V5
c1tjb2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5ET01FdmVudC5kZWZpbmVLZXlz
ID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRydWUpO1xuXG5ET01FdmVudC5k
ZWZpbmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24nLCAnMzcnOiAnbGVmdCcsICcz
OSc6ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3BhY2UnLCAnOCc6ICdiYWNrc3Bh
Y2UnLCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEzJzogJ2VudGVyJ1xufSk7XG5c
bn0pKCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkV2ZW50XG5cbmRlc2Ny
aXB0aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBldmVudHMu
IFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgY3VzdG9t
IEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5wcm92aWRlczogRWxlbWVudC5F
dmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVtZW50LlByb3BlcnRpZXMuZXZl
bnRzID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5hZGRFdmVudHMoZXZlbnRzKTtc
bn19O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7
XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhp
cy5yZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZlbnRzW3R5cGVdKSBldmVudHNb
dHlwZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlmIChldmVudHNbdHlwZV0ua2V5
cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLnB1c2go
Zm4pO1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRjdXN0b20gPSBFbGVtZW50LkV2
ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5c
dFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20ub25BZGQuY2Fs
bCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlvbil7XG5cdFx0XHRc
dGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRpZiAoY3VzdG9tLmNvbmRp
dGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQp
O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYg
KGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNh
bGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0gZnVuY3Rpb24oKXtcblx0XHRc
dHJldHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFyIG5hdGl2ZUV2ZW50ID0gRWxl
bWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChuYXRpdmVFdmVudCl7XG5cdFx0
XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQsIHNlbGYuZ2V0V2luZG93KCkp
O1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBldmVudCkgPT09IGZhbHNlKSBl
dmVudC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFkZExpc3RlbmVy
KHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1cblx0XHRldmVudHNbdHlwZV0u
dmFsdWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZl
bnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgn
ZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7
XG5cdFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFyIGluZGV4ID0gbGlzdC5rZXlz
LmluZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFy
IHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LmtleXNbaW5kZXhd
O1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0dmFyIGN1c3RvbSA9IEVsZW1l
bnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vblJl
bW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1
c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlz
LCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50c1t0eXBlXSkg
PyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0pIDogdGhpcztc
blx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgZXZl
bnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVudHNbZXZlbnRdKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5c
dFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtcblx0XHRc
dGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVd
KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIgYXR0YWNoZWQgPSB0aGlzLnJl
dHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhpcztcblx0XHRp
ZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNoZWQpIHRoaXMucmVtb3ZlRXZl
bnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50cycpO1xuXHRcdH0gZWxzZSBp
ZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtldmVudHNdLmtleXMuZWFjaChm
dW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQoZXZlbnRzLCBmbik7XG5cdFx0
XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVudHNdO1xuXHRcdH1cblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRl
bGF5KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYg
KCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5
LmNvbnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZu
KXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0
ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJvbSwgdHlwZSl7XG5cdFx0ZnJv
bSA9IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMgPSBmcm9tLnJldHJpZXZlKCdl
dmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCF0eXBlKXtc
blx0XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMuY2xvbmVFdmVudHMoZnJv
bSwgZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSl7XG5cdFx0XHRldmVu
dHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5hZGRFdmVudCh0
eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRjbGljazogMiwgZGJsY2xpY2s6
IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6IDIsIC8vbW91c2UgYnV0
dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91c2VTY3JvbGw6IDIsIC8vbW91
c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91c2Vtb3ZlOiAyLCBzZWxl
Y3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50XG5cdGtleWRvd246IDIs
IGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRvcmllbnRhdGlvbmNoYW5nZTog
MiwgLy8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92ZTogMiwgdG91Y2hlbmQ6IDIs
IHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3RhcnQ6IDIsIGdlc3R1cmVjaGFu
Z2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9jdXM6IDIsIGJsdXI6IDIsIGNo
YW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAyLCBwYXN0ZTogMiwgaW5wdXQ6
IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6IDEsIGJlZm9yZXVubG9hZDog
MiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVkOiAxLCByZWFkeXN0YXRlY2hh
bmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3BzdGF0ZTogMiwgcGFnZXNob3c6
IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAxLCBhYm9ydDogMSwgc2Nyb2xs
OiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5FdmVudHMgPSB7XG5cdG1vdXNl
d2hlZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1lbnQgPyAnd2hlZWwnIDogJ29u
bW91c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcgOiAnRE9NTW91c2VTY3JvbGwn
XG5cdH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIHJlbGF0ZWQg
PSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9PSBudWxsKSByZXR1cm4gdHJ1
ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAocmVsYXRlZCAhPSB0
aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVPZih0aGlzKSAhPSAnZG9jdW1l
bnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5cbmlmICgnb25tb3VzZWVudGVy
JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5t
b3VzZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VsZWF2ZSA9IDI7XG5cdEVsZW1l
bnQuTW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xuXHRFbGVtZW50LkV2ZW50cy5t
b3VzZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogY2hl
Y2tcblx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZlID0ge1xuXHRcdGJhc2U6ICdt
b3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xufVxuXG4vKjxsdElFOT4qL1xu
aWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLnBy
b3BlcnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hhbmdlID0ge1xuXHRcdGJhc2U6
IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0XHRcdHJldHVybiAo
dGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09
ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hhbmdlJztcblx0XHR9LFxuXHRc
dGNvbmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGV2ZW50LnR5cGUgIT0g
J3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0eU5hbWUgPT0gJ2NoZWNrZWQn
O1xuXHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxu
XG5uYW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEVs
ZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxlZ2F0ZSBtZXRob2QgZm9yIG1v
cmUgZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5E
ZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZXZlbnRMaXN0ZW5l
clN1cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xuXG5FbGVtZW50Lk5hdGl2ZUV2
ZW50cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNvdXQgPSAyO1xuXG52YXIg
YnViYmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHR3
aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRpZiAobWF0Y2godGFyZ2V0LCBl
dmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRhcmdldCk7XG5cdFx0dGFyZ2V0
ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9XG59O1xuXG52YXIgbWFwID0g
e1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9u
OiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3VzZWxlYXZlOiB7XG5cdFx0YmFz
ZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrXG5c
dH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChldmVudExpc3RlbmVyU3VwcG9y
dCA/ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9LFxuXHRibHVyOiB7XG5cdFx0
YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAnZm9jdXNvdXQnLFxuXHRcdGNh
cHR1cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZhciBfa2V5ID0gJyRkZWxlZ2F0
aW9uOic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cblx0cmV0dXJuIHtc
blxuXHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTogZnVuY3Rpb24oc2VsZiwgdWlk
KXtcblx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5l
cnMnLCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3QuZm9ybXMpIGZvciAodmFyIGkg
PSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8vIHRoZSBmb3JtIG1heSBoYXZl
IGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxuXHRcdFx0XHQvLyByZW1vdmVF
dmVudCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBldmVudCB3YXNcblx0XHRcdFx0
Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVu
dCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0LmZuc1tpXSk7XG5cdFx0XHR9
XG5cdFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwg
dGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0LmdldCgndGFnJykgPT0gJ2Zv
cm0nKSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQoJ2Zvcm0nKTtcblx0XHRcdGlm
ICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJzID0gc2VsZi5yZXRyaWV2ZShf
a2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRcdGxpc3RlbmVyID0gbGlzdGVu
ZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0XHRcdGZvcm1zID0gbGlzdGVu
ZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0aWYgKGZvcm1zLmluZGV4T2Yo
Zm9ybSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2goZm9ybSk7XG5cblx0XHRcdHZh
ciBfZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9ybS5hZGRFdmVudCh0eXBlLCBf
Zm4pO1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlzdGVuZXJzW3VpZF0gPSBsaXN0
ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywgbGlzdGVu
ZXJzKTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNlcnZlciA9IGZ1bmN0aW9uKHR5
cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxcblx0XHRsaXN0ZW46IGZ1bmN0
aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdFx0XHR2YXIgZXZlbnRzID0g
e2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRzKGV2ZW50cyk7XG5c
dFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0
YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0
XHRldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0fVxuXHR9O1xufTtcblxuaWYg
KCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZChtYXAsIHtcblx0c3VibWl0OiBm
b3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9ic2VydmVyKCdyZXNldCcpLFxu
XHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRzZWxlY3Q6IGlucHV0T2JzZXJ2
ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIgcHJvdG8gPSBFbGVtZW50LnBy
b3RvdHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxcblx0cmVtb3ZlRXZlbnQgPSBw
cm90by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rpb24ob2xkLCBtZXRob2Qpe1xu
XHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUpe1xuXHRcdGlmICh0eXBlLmlu
ZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVz
ZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0eXBlKS5leHByZXNzaW9u
c1swXVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5ICE9ICdyZWxheScpIHJldHVy
biBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIG5ld1R5cGUg
PSBwYXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNlKDEpLmVhY2goZnVuY3Rpb24o
cHNldWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRvLmtleSArIChwc2V1ZG8udmFs
dWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5cdFx0fSk7XG5cdFx0b2xkLmNh
bGwodGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBuZXdUeXBl
LCBwYXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xufTtcblxudmFyIGRlbGVnYXRp
b24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbil7XG5cdFx0dmFy
IHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9y
YWdlW3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91aWQgaW4gc3RvcmVkKXtcblx0
XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVkW191aWRdLm1hdGNoID09IG1h
dGNoKSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5cGUgPSB0eXBlLCBfbWF0Y2gg
PSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0dHlwZSA9IF9t
YXAuYmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0KXtcblx0XHRc
dHJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5cdFx0fTtcblxuXHRcdHZhciBl
bGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5cdFx0aWYgKF9tYXAuY29uZGl0
aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29uZGl0aW9uKXtcblx0XHRcdHZh
ciBfX21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRF
dmVudC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnQpe1xu
XHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAmJiBjb25kaXRpb24uY2FsbCh0
YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIHNlbGYgPSB0
aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIgZGVsZWdhdG9yID0gX21hcC5s
aXN0ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2
ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRh
cmdldCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpO1xu
XHRcdH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2
ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRh
cmdldCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHR9O1xu
XG5cdFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0b3JlZFt1aWRdID0ge1xuXHRc
dFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0XHRkZWxlZ2F0b3I6IGRlbGVn
YXRvclxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0cmV0dXJuIGFk
ZEV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHR9LFxu
XG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4sIF91aWQpe1xuXHRcdHZh
ciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3Rv
cmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRoaXM7XG5cblx0XHRpZiAoX3Vp
ZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3IgPSBzdG9yZWRbX3VpZF0uZGVs
ZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0dHlwZSA9IF9tYXAuYmFzZSB8
fCBfdHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5yZW1vdmUodGhpcywgX3VpZCk7
XG5cdFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9y
ZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3Is
IF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlkLCBzO1xuXHRcdGlmIChmbikg
Zm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRp
ZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1cm4gZGVsZWdhdGlvbi5yZW1v
dmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191aWQpO1xuXHRcdH0gZWxzZSBm
b3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlm
IChzLm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlw
ZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xu
XHRhZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24uYWRkRXZlbnQpLFxuXHRyZW1v
dmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQpXG59KTtc
blxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0eWxlXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdHlsZXMgb2YgRWxl
bWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxlbWVudC5TdHlsZVxuXG4uLi5c
biovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3VtZW50Lmh0bWwsIGVsO1xuXG4v
LzxsdElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9lcyBub3QgcmVtb3ZlIHN0eWxl
cyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5bGUuY29sb3IgPSBudWxsO1xu
dmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xvciA9PSAncmVkJztcblxuLy8g
Y2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciogc2hvcnRoYW5kIHN0eWxlcyBp
biB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGluc3RlYWQgb2Ygd2lkdGgtc3R5
bGUtY29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIzYWJjJztcbmVsLnN0eWxlLmJv
cmRlciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciA9IGVsLnN0eWxl
LmJvcmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJRTk+XG5cbnZhciBoYXNHZXRD
b21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSxcblx0c3VwcG9ydEJvcmRl
clJhZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlLmJvcmRlclJhZGl1
cyAhPSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVzID0ge3NldDogZnVuY3Rpb24o
c3R5bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19O1xuXG52YXIgaGFzT3BhY2l0
eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhhc0ZpbHRlciA9IChodG1sLnN0
eWxlLmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBoYVxcKG9wYWNpdHk9KFtcXGQu
XSspXFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0
eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0eSk7XG5cdGVsZW1lbnQuc3R5
bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkgPT0gbnVsbCA/ICd2aXNpYmxl
JyA6ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0RmlsdGVyID0gZnVuY3Rpb24o
ZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGUsXG5c
dFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmls
dGVyJykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAudGVzdChmaWx0ZXIpID8gZmls
dGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAnICcgKyB2YWx1ZSkudHJpbSgp
O1xuXHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTtc
bn07XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlv
bihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTtc
bn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGlmICghZWxl
bWVudC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0eWxlLmhhc0xheW91dCkgZWxl
bWVudC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCB8fCBvcGFjaXR5ID09
IDEpe1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnJyk7XG5cdFx0aWYgKG9wYWNp
dHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNldEZpbHRlcihlbGVtZW50LCBy
ZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0RmlsdGVy
KGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAob3BhY2l0eSAqIDEwMCkubGlt
aXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNldFZpc2liaWxpdHkpKTtcblxu
dmFyIGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIg
b3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5
bGUoJ29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcnKSA/IDEgOiBvcGFjaXR5LnRv
RmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBmaWx0
ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdm
aWx0ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikgb3BhY2l0eSA9IGZpbHRlci5t
YXRjaChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51bGwgfHwgZmlsdGVyID09IG51
bGwpID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5jdGlvbihlbGVtZW50KXtcblx0
dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0eScpO1xuXHRpZiAob3BhY2l0
eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9PSAnaGlkZGVu
JyA/IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5cbnZhciBmbG9hdE5hbWUgPSAo
aHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZsb2F0JyA6ICdjc3NGbG9hdCcs
XG5cdG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDogJzAlJywgY2VudGVyOiAnNTAl
JywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRoYXNCYWNrZ3JvdW5kUG9zaXRp
b25YWSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblggIT0gbnVsbCksXG5cdHByZWZp
eFBhdHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbihwcm9wZXJ0
eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBhdHRlcm4sICckMS0nKS5jYW1l
bENhc2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0eWxlID0gZnVuY3Rpb24oc3R5
bGUsIHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKXtc
blx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAnWCcpO1xuXHRcdHByb3BlcnR5
ICs9ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkpO1xufTtcbi8v
PC9sdElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldENvbXB1dGVkU3R5bGU6IGZ1
bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgdGhpcy5j
dXJyZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtjYW1lbENhc2UocHJvcGVydHkp
XTtcblx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERvY3VtZW50KHRoaXMpLmRlZmF1
bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJldHVybiAoY29tcHV0ZWQpID8g
Y29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0gZmxvYXROYW1lKSA/ICdmbG9h
dCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxcblxuXHRzZXRTdHlsZTogZnVu
Y3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKXtc
blx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuXHRc
dFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5c
dFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6
IHByb3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnc3RyaW5nJyl7XG5cdFx0XHR2
YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAnQCcpLnNwbGl0KCcgJyk7XG5c
dFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChmdW5jdGlvbih2YWwsIGkpe1xu
XHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0XHRyZXR1cm4gKHR5cGVPZih2
YWwpID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywgTWF0aC5yb3VuZCh2YWwpKSA6
IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09IFN0cmlu
ZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpO1xuXHRc
dH1cblx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdC8vPGx0SUU5PlxuXHRc
dGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgZG9lc05vdFJlbW92ZVN0eWxl
cyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0XHRyZW1vdmVTdHlsZSh0aGlz
LnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmIChwcm9w
ZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRoaXMpO1xuXHRcdHByb3BlcnR5
ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7
XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVydHkuaW5kZXhPZignYm9yZGVy
UmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdi
b3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJC
b3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7XG5cdFx0XHRcdHJldHVybiB0
aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0aGlzKS5qb2luKCcgJyk7XG5c
dFx0fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3BlcnR5XTtcblx0XHRpZiAoIXJl
c3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRpZiAoRWxlbWVudC5TaG9ydFN0
eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0XHRyZXN1bHQgPSBbXTtcblx0
XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVzW3Byb3BlcnR5XSkgcmVzdWx0
LnB1c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQuam9pbignICcp
O1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5
KTtcblx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZICYmIC9eYmFja2dyb3Vu
ZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJl
cGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0aW9uKHBvc2l0aW9uKXtcblx0
XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtcblx0XHRcdH0pIHx8ICcwcHgn
O1xuXHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBvc2l0
aW9uJykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0KXtcblx0XHRcdHJlc3VsdCA9
IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVzdWx0Lm1hdGNoKC9yZ2JhP1xc
KFtcXGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxh
Y2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRcdH1cblx0XHRpZiAoIWhhc0dl
dENvbXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHldKXtcblx0XHRcdGlmICgoL14o
aGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9weCQvLnRlc3QocmVzdWx0KSkp
e1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3aWR0aCcpID8gWydsZWZ0Jywg
J3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7XG5cdFx0XHRcdHZhbHVlcy5l
YWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9IHRoaXMuZ2V0U3R5bGUoJ2Jv
cmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRoaXMuZ2V0U3R5bGUoJ3BhZGRp
bmctJyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0cmV0dXJu
IHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCldIC0gc2l6ZSArICdweCc7XG5c
dFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRkaW5nLykudGVz
dChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQpKSl7XG5cdFx0XHRcdHJldHVy
biAnMHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKHJldHVybnNC
b3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdodHxCb3R0b218TGVmdCk/JC8u
dGVzdChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xuXHRcdFx0cmV0dXJuIHJlc3Vs
dC5yZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAkMyAkMScpO1xuXHRcdH1cblx0
XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHNldFN0eWxlczog
ZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBpbiBzdHlsZXMpIHRoaXMuc2V0
U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGdldFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0QXJyYXku
ZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdHJlc3VsdFtrZXld
ID0gdGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiByZXN1bHQ7
XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRsZWZ0OiAnQHB4JywgdG9wOiAn
QHB4JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3aWR0aDogJ0BweCcsIGhlaWdo
dDogJ0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAnQHB4JywgbWluV2lkdGg6ICdA
cHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoQCwgQCwgQCkn
LCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3NpdGlvbjogJ0BweCBAcHgnLCBj
b2xvcjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4JywgbGV0dGVyU3BhY2luZzog
J0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChAcHggQHB4IEBweCBAcHgpJyxc
blx0bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzogJ0BweCBAcHggQHB4IEBweCcs
IGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdi
KEAsIEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXJTdHls
ZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdi
KEAsIEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0AnLCAnem9vbSc6ICdAJywgZm9u
dFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0eTogJ0AnLCBib3JkZXJSYWRp
dXM6ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVsZW1lbnQuU2hvcnRTdHlsZXMg
PSB7bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30sIGJvcmRlcldpZHRoOiB7fSwg
Ym9yZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5bJ1RvcCcsICdSaWdodCcsICdC
b3R0b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9uKXtcblx0dmFyIFNob3J0ID0g
RWxlbWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1lbnQuU3R5bGVzO1xuXHRbJ21h
cmdpbicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7XG5cdFx0dmFyIHNkID0gc3R5
bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9IEFsbFtzZF0gPSAnQHB4Jztc
blx0fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9uO1xuXHRTaG9ydC5ib3JkZXJb
YmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xuXHR2YXIgYmR3ID0gYmQgKyAn
V2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsgJ0NvbG9yJztcblx0U2hvcnRb
YmRdID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBTaG9ydFtiZF1bYmR3XSA9IEFs
bFtiZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jkc10gPSBTaG9ydFtiZF1bYmRz
XSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xvcltiZGNdID0gU2hvcnRbYmRd
W2JkY10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7XG5cbmlmIChoYXNCYWNrZ3Jv
dW5kUG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNrZ3JvdW5kUG9zaXRpb24gPSB7
YmFja2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9zaXRpb25ZOiAnQCd9O1xufSko
KTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lvbnNcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNjcm9sbCwgb3IgcG9zaXRpb25p
bmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBvc2l0aW9uaW5nIGJhc2VkIG9u
IHRoZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29kZSBhbmQgc21hcnQgYnJvd3Nl
ciBmaXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwu
aHRtbCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBvbiBbWVVJXShodHRwOi8vZGV2
ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vuc2VdKGh0dHA6Ly9kZXZlbG9w
ZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEVs
ZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1lbnNpb25zXVxuXG4uLi5cbiov
XG5cbihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWxlbWVu
dC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcbnZhciBi
cm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50ID09PSBlbGVtZW50KTtcbmVs
ZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21wb25lbnRzID0gWydoZWlnaHQn
LCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRlclRvcFdpZHRoJywgJ2JvcmRl
ckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsnd2lkdGgnLCAncGFkZGluZ0xl
ZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRo
J107XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24oZWwpe1xuXG5cdHZhciBnQ1Mg
PSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91bmRzID0ge3g6IDAsIHk6IDB9
O1xuXG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5kcy55
ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lkdGhDb21wb25lbnRzLmVhY2go
ZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0
fSk7XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZzZXQgPSBmdW5jdGlvbihlbCl7
XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycgfHwgaXNC
b2R5KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0
dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkkL2kpLnRlc3QoZWwudGFnTmFt
ZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Nyb2xsVG86IGZ1bmN0aW9uKHgs
IHkpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhpcy5nZXRXaW5kb3coKS5zY3Jv
bGxUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zY3JvbGxMZWZ0ID0geDtcblx0
XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhp
cy5nZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElFOT5cblx0XHQvLyBUaGlzIGlm
IGNsYXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0ZSBnZXRCb3VuZGluZ0NsaWVu
dFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRlbi5cblx0XHRpZiAoIXdpbmRv
dy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zmc2V0V2lkdGgsIHk6IHRoaXMu
b2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQvLyBUaGlzIHN2ZyBzZWN0aW9u
IHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBjYW4gYmUgcmVtb3ZlZCB3aGVu
IEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVnIGluZm86IGh0dHBzOi8vYnVn
emlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4NVxuXHRcdGlmICh0aGlzLmdl
dCgndGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVTaXplKHRoaXMpO1xuXG5cdFx0
dHJ5IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xu
XHRcdFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5kcy5oZWlnaHR9O1xuXHRcdH0g
Y2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0XHR9XG5cdH0sXG5cblx0
Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4g
dGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNj
cm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBm
dW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygp
LmdldFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxMZWZ0LCB5OiB0aGlzLnNj
cm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxl
bWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0d2hp
bGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVs
ZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5zY3JvbGxUb3A7
XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdH1cblx0XHRyZXR1cm4g
cG9zaXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBicm9rZW5PZmZzZXRQYXJlbnQg
PyBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVs
ZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJl
dHVybiBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAoc3R5bGVTdHJpbmcoZWxlbWVu
dCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRTdGF0aWMgOiBpc09mZnNldDtc
blx0XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpKXtcblx0XHRcdGlmIChp
c09mZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdFx0cmV0dXJu
IG51bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRp
ZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09
ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlbGVtZW50
Lm9mZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0s
XG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIgaGFzR2V0Qm91bmRpbmdDbGll
bnRSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5cblx0XHRpZiAoaGFzR2V0Qm91
bmRpbmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0aGlzLmdldERvY3VtZW50KCku
ZG9jdW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9IGh0bWwuZ2V0U2Nyb2xsKCks
XG5cdFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxzKCksXG5cdFx0XHRcdGlzRml4
ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJyk7XG5cblx0XHRc
dHJldHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMu
eCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwuY2xpZW50TGVmdCxcblx0
XHRcdFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnkgKyAoKGlzRml4ZWQp
ID8gMCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxuXHRcdFx0fTtcblx0XHR9XG5c
blx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdGlm
IChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRcdHdoaWxlIChlbGVtZW50ICYm
ICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50Lm9mZnNldExl
ZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xuXG5cdFx0XHRlbGVt
ZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvc2l0aW9u
O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZSl7XG5cdFx0dmFyIG9m
ZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xsID0gdGhpcy5nZXRTY3JvbGxz
KCk7XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zmc2V0LnggLSBzY3JvbGwueCxc
blx0XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xuXG5cdFx0aWYgKHJlbGF0aXZl
ICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkpe1xuXHRcdFx0dmFyIHJlbGF0
aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xuXHRcdFx0cmV0dXJuIHt4OiBw
b3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJvcmRlcihyZWxhdGl2ZSksIHk6
IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BCb3JkZXIocmVsYXRpdmUpfTtc
blx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBm
dW5jdGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRX
aW5kb3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9z
aXRpb24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0dmFyIG9i
aiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0b3A6IHBvc2l0aW9uLnksXG5c
dFx0XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXplLnlcblx0XHR9O1xuXHRcdG9i
ai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9iai5ib3R0b20gPSBvYmoudG9w
ICsgb2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGNvbXB1dGVQb3NpdGlv
bjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGVmdDogb2JqLnggLSBzdHls
ZU51bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRvcDogb2JqLnkgLSBzdHlsZU51
bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxcblxuXHRzZXRQb3NpdGlvbjog
ZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHlsZXModGhpcy5jb21wdXRlUG9z
aXRpb24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50LCBXaW5kb3ddLmludm9rZSgn
aW1wbGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdl
dENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBkb2MuY2xpZW50V2lkdGgsIHk6
IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlz
KTtcblx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xsTGVmdCwgeTog
d2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbFNp
emU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyksXG5c
dFx0XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkgPSB0aGlzLmdldERvY3VtZW50
KCkuYm9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9jLnNjcm9sbFdpZHRoLCBib2R5
LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5zY3JvbGxIZWlnaHQsIGJvZHku
c2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHRyZXR1cm4ge3Rv
cDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXplLngsIGhlaWdodDogc2l6
ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8gcHJpdmF0ZSBtZXRob2RzXG5c
bnZhciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZTtcblxuZnVuY3Rpb24g
c3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWxlbWVu
dCwgc3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0aW9uIHRvcEJvcmRlcihlbGVt
ZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItdG9wLXdpZHRoJyk7
XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJl
cihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gaXNCb2R5KGVs
ZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSkudGVzdChlbGVtZW50LnRhZ05h
bWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVsZW1lbnQpe1xuXHR2YXIgZG9j
ID0gZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFkb2MuY29tcGF0TW9kZSB8fCBk
b2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcbn1c
blxufSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtwb3NpdGlvbjogJ3NldFBvc2l0
aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9jdW1lbnQsIEVsZW1lbnRdLmlu
dm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0aDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxUb3A6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtcblx0fSxcblxuXHRnZXRTY3Jv
bGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLng7XG5cdH0s
XG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNj
cm9sbFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRoOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFRvcDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7XG5cdH0sXG5cblx0Z2V0TGVm
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLng7XG5cdH1cblxu
fSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBi
YXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVyIEZ4IENsYXNz
ZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0NoYWluLCBF
dmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92aWRlczogRnhcblxuLi4uXG4q
L1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9IG5ldyBDbGFzcyh7XG5cblx0
SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxu
XHRvcHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWwsXG5cdFx0b25DYW5jZWw6IG5p
bCxcblx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRmcHM6IDYwLFxuXHRcdHVuaXQ6
IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVzOiBudWxsLFxuXHRcdGZyYW1l
U2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCB8fCB0aGlz
O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHRnZXRUcmFuc2l0aW9u
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtcblx0XHRcdHJldHVybiAtKE1h
dGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xuXHR9LFxuXG5cdHN0ZXA6IGZ1
bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFtZVNraXApe1xuXHRcdFx0dmFy
IGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRoaXMudGltZSkgOiAwLCBmcmFt
ZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0dGhpcy50aW1lID0gbm93O1xu
XHRcdFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJh
bWUrKztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKXtcblx0XHRc
dHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1lIC8gdGhpcy5mcmFtZXMpO1xu
XHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgZGVsdGEpKTtc
blx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhp
cy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpO1xuXHRcdFx0dGhpcy5z
dG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRyZXR1cm4g
bm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0
cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0fSxcblxuXHRjaGVjazogZnVu
Y3Rpb24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJldHVybiB0cnVlO1xuXHRcdHN3
aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5j
ZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5j
YWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKGZyb20sIHRvKXtcblx0XHRp
ZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLmZyb20gPSBm
cm9tO1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1lID0gKHRoaXMub3B0aW9ucy5m
cmFtZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0dGhpcy50cmFu
c2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFyIGZyYW1lcyA9IHRoaXMub3B0
aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0aW9uID0gdGhpcy5vcHRp
b25zLmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5EdXJhdGlvbnNbZHVyYXRpb25d
IHx8IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUludGVydmFsID0gMTAwMCAvIGZw
cztcblx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24g
LyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAh
PT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh0aGlzLnN1YmplY3QpO1xu
XHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1YmplY3QpO1xuXHRcdHB1
c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
c3RvcDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25z
LmZwcyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5mcmFtZSl7XG5cdFx0XHRcdHRo
aXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHRcdGlmICghdGhp
cy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0aGlzLnN1Ympl
Y3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ3N0b3AnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZlKHRoaXMuc3ViamVjdCA9PT0g
dGhpcyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0
dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCkuY2xlYXJDaGFpbigpO1xuXHRc
dFx0dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXN1
bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQoKSkgcHVzaEluc3RhbmNlLmNh
bGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0gaW5zdGFuY2VzW3RoaXMub3B0
aW9ucy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29udGFpbnModGhpcyk7XG5cdH0s
XG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmZyYW1lIDwgdGhp
cy5mcmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5cbn0pO1xuXG5GeC5jb21wdXRl
ID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJuICh0byAtIGZyb20pICogZGVs
dGEgKyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9ydCc6IDI1MCwgJ25vcm1hbCc6
IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVyc1xuXG52YXIgaW5zdGFuY2Vz
ID0ge30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0aW9uKCl7XG5cdHZhciBub3cg
PSBEYXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdHZh
ciBpbnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNlKSBpbnN0YW5jZS5zdGVwKG5v
dyk7XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIg
bGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9IFtdKTtcblx0bGlzdC5w
dXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNbZnBzXSA9IGxvb3AucGVyaW9k
aWNhbChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07XG5cbnZhciBwdWxsSW5zdGFu
Y2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdO1xuXHRpZiAo
bGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAoIWxpc3QubGVuZ3RoICYmIHRp
bWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBzXTtcblx0XHRcdHRpbWVyc1tm
cHNdID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0fVxuXHR9XG59O1xuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhl
IENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4sIEZ4Lk1vcnBoLCBGeC5FbGVt
ZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRngsIEVs
ZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4uXG4qL1xuXG5GeC5DU1MgPSBu
ZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJlcGFyZXMgdGhlIGJhc2UgZnJv
bS90byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFs
dWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVlcyk7XG5cdFx0dmFyIGZyb20g
PSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0byA9PSBudWxsKXtcblx0XHRc
dHRvID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0eWxlKHByb3BlcnR5KTtcblx0
XHRcdHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0XHQvLyBhZGFwdGVkIGZyb206
IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21hc3Rlci9meC5qcyNMMjk5XG5c
dFx0XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09ICdzdHJpbmcnICYmIGZyb20u
c2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxvYXQoZnJvbSkgIT0gMCl7XG5c
dFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsgdW5pdCk7XG5cdFx0XHRcdHZh
ciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHRcdC8v
IElFIGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhlbFdpZHRoXG5cdFx0XHRcdGlm
ICghKC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxl
WygncGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5cdFx0XHRcdFx0aWYgKHZhbHVl
ID09IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9tIERlYW4gRWR3YXJkcycgaHR0
cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEw
MjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0eWxlLmxlZnQ7XG5cdFx0XHRc
dFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9
IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0
ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZnJvbSA9ICh0byB8fCAx
KSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZsb2F0KGZyb20pIHx8IDApO1xu
XHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9tICsgdW5pdCk7XG5cdFx0XHR9
XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShmcm9tKSwgdG86IHRoaXMucGFy
c2UodG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGludG8gYW4gYXJyYXlcblxuXHRw
YXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVuY3Rpb24uY29udmVydCh2YWx1
ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpID8gdmFsdWUuc3Bs
aXQoJyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJldHVybiB2YWx1ZS5tYXAoZnVu
Y3Rpb24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xuXHRcdFx0dmFyIGZvdW5kID0g
ZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2VycywgZnVuY3Rpb24ocGFyc2Vy
KXtcblx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRcdHZhciBwYXJzZWQgPSBwYXJz
ZXIucGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBwYXJzZWQgPT09IDApIGZvdW5k
ID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0XHRcdH0pO1xuXHRcdFx0Zm91
bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5DU1MuUGFyc2Vycy5TdHJpbmd9
O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8vY29tcHV0ZXMgYnkg
YSBmcm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0aGVpciBwYXJzZXJzLlxuXG5c
dGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIGNvbXB1dGVkID0g
W107XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5ndGgpKS50aW1lcyhmdW5jdGlv
bihpKXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9tW2ldLnBhcnNlci5jb21wdXRl
KGZyb21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBhcnNlcjogZnJvbVtpXS5wYXJz
ZXJ9KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgn
Zng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xuXHR9LFxuXG5cdC8vc2VydmVz
IHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7
XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVlID0gdGhpcy5w
YXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5cdFx0dmFsdWUuZWFjaChmdW5j
dGlvbihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5jb25jYXQoYml0LnBhcnNlci5z
ZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmV0dXJuZWQ7XG5c
dH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxlbWVudFxuXG5cdHJlbmRlcjog
ZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0KXtcblx0XHRlbGVtZW50LnNl
dFN0eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0KSk7XG5cdH0sXG5cblx0Ly9z
ZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBmb3IgYSBzZWxl
Y3RvclxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRcdGlmIChGeC5DU1MuQ2Fj
aGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXTtcblx0XHR2YXIgdG8g
PSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBzZWxlY3Rvci5lc2NhcGVSZWdF
eHAoKSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0gZnVuY3Rpb24ocnVsZXMpe1xu
XHRcdFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7XG5cdFx0XHRcdGlmIChydWxl
Lm1lZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5ydWxlcyB8fCBydWxlLmNzc1J1
bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFydWxlLnN0
eWxlKSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3RvclRl
eHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysvLCBmdW5jdGlvbihtKXtcblx0
XHRcdFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9KSA6IG51bGw7XG5cdFx0
XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3QudGVzdChzZWxlY3RvclRleHQp
KSByZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBmdW5jdGlvbih2
YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHlsZVtzdHlsZV0gfHwgRWxlbWVu
dC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0XHR2YWx1ZSA9IFN0cmluZyhy
dWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVdID0gKCgvXnJnYi8pLnRlc3Qo
dmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9
KTtcblx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0cywgZnVuY3Rp
b24oc2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVmO1xuXHRcdFx0aWYgKGhyZWYg
JiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5kZXhPZihkb2N1bWVudC5kb21h
aW4pID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVl
dC5jc3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7XG5cdFx0fSk7XG5cdFx0cmV0
dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxuXG59KTtcblxuRnguQ1NTLkNh
Y2hlID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENvbG9yOiB7XG5cdFx0cGFyc2U6
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXiNbMC05YS1mXXszLDZ9
JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRcdFx0cmV0dXJuICgodmFsdWUg
PSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKS8pKSkgPyBbdmFsdWVb
MV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9LFxuXHRcdGNvbXB1dGU6IGZ1
bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4gZnJvbS5tYXAoZnVuY3Rpb24o
dmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChGeC5jb21wdXRlKGZyb21baV0s
IHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpO1xuXHRcdH1cblx0fSxcblxu
XHROdW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0XHRjb21wdXRlOiBGeC5jb21w
dXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0XHRyZXR1cm4gKHVu
aXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9LFxuXG5cdFN0cmluZzoge1xu
XHRcdHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0XHRjb21wdXRlOiBmdW5jdGlv
bih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5j
dGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1cblx0fVxuXG59O1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5
bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9mIENTUyBwcm9wZXJ0aWVzIGZv
ciBhbiBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywgb3IgQ1NTIGJhc2VkIHNlbGVj
dG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4
LkNTU1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xuXG5GeC5Nb3JwaCA9IG5ldyBD
bGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVs
ZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3Vt
ZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNl
dDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9PSAnc3RyaW5nJykgbm93ID0g
dGhpcy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5vdykgdGhpcy5yZW5kZXIodGhp
cy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZh
ciBub3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFyZW50
KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRzdGFy
dDogZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnRpZXMp
KSByZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRpZXMgPT0gJ3N0cmluZycpIHBy
b3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0XHR2YXIgZnJvbSA9IHt9LCB0
byA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7XG5cdFx0XHR2YXIgcGFyc2Vk
ID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7XG5cdFx0XHRm
cm9tW3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBhcnNlZC50bztcblx0XHR9XG5c
dFx0cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Q
cm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhp
cy5nZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG1vcnBoID0gdGhpcy5y
ZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0XHRcdG1vcnBoID0gbmV3IEZ4
Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbW9ycGgn
LCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0fVxuXG59O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3BzKXtcblx0XHR0aGlzLmdldCgn
bW9ycGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8q
XG4tLS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIGEg
c2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhlIEZ4
IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAt
IEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0dHA6Ly93d3cucm9iZXJ0cGVu
bmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXplZCB0byBiZSB1c2VkIHdpdGgg
TW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczogRnguVHJhbnNpdGlvbnNcblxu
Li4uXG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24gfHwgRnguVHJhbnNpdGlv
bnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFucyA9PSAnc3RyaW5nJyl7XG5c
dFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0XHR0cmFucyA9IEZ4LlRyYW5z
aXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8fCB0cmFuc1tkYXRhWzBdLmNh
cGl0YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMgPSB0cmFuc1snZWFzZScgKyBk
YXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsyXS5jYXBpdGFsaXplKCkgOiAn
JyldO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxufSk7XG5cbkZ4LlRyYW5zaXRp
b24gPSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRwYXJhbXMgPSBBcnJheS5jb252
ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihwb3Mpe1xuXHRcdHJldHVybiB0
cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hcHBlbmQoZWFz
ZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91dDogZnVuY3Rpb24ocG9zKXtc
blx0XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBwYXJhbXMpO1xuXHRcdH0sXG5c
dFx0ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIChwb3MgPD0gMC41ID8g
dHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFuc2l0aW9uKDIgKiAoMSAtIHBv
cyksIHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5cbkZ4LlRyYW5zaXRpb25zID0g
e1xuXG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0dXJuIHplcm87XG5cdH1cblxu
fTtcblxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0aW9uKHRyYW5zaXRpb25zKXtc
blx0Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykgRnguVHJhbnNpdGlvbnNbdHJh
bnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9uc1t0cmFuc2l0aW9uXSk7XG59
O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzogZnVuY3Rpb24ocCwgeCl7XG5c
dFx0cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtcblx0fSxcblxuXHRFeHBvOiBm
dW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAqIChwIC0gMSkpO1xuXHR9LFxu
XG5cdENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5zaW4oTWF0aC5hY29z
KHApKTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGgu
Y29zKHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazogZnVuY3Rpb24ocCwgeCl7XG5c
dFx0eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgMikgKiAo
KHggKyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1bmN0aW9uKHApe1xuXHRcdHZh
ciB2YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7IGEgKz0gYiwgYiAvPSAyKXtc
blx0XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRcdFx0XHR2YWx1ZSA9IGIgKiBi
IC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwgMik7XG5cdFx0XHRcdGJyZWFr
O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0RWxhc3RpYzog
ZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDEwICogLS1wKSAqIE1hdGgu
Y29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEpIC8gMyk7XG5cdH1cblxufSk7
XG5cblsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCddLmVhY2goZnVuY3Rpb24odHJh
bnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5z
aXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIGkgKyAyKTtcblx0fSk7
XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5kZXNjcmlwdGlvbjogRm9ybWVy
bHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVydHkgZm9yIGFu
IGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRngu
Q1NTXG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFkZSwgRWxlbWVudC5oaWdobGln
aHRdXG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4
LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0
aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0
aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBu
b3cpe1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdFx0bm93ID0gcHJvcGVy
dHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwgdGhpcy5vcHRpb25zLnByb3Bl
cnR5O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHByb3BlcnR5LCBub3cs
IHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdGFydDog
ZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVy
dHksIGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5mbGF0dGVu
KGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMub3B0aW9ucy5wcm9wZXJ0eSB8
fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1l
bnQsIHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0aGlzLnBhcmVudChwYXJzZWQu
ZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnR3ZWVu
ID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJyku
Y2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5yZXRyaWV2ZSgndHdlZW4n
KTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3IEZ4LlR3ZWVuKHRoaXMsIHts
aW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdlZW4nLCB0d2Vlbik7XG5cdFx0
fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5c
blx0dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0dGhpcy5nZXQoJ3R3
ZWVuJykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0gdGhpcy5nZXQoJ3R3ZWVuJyks
IG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1bWVudHMpLCB0b2dnbGU7XG5c
dFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dnbGUnO1xuXHRcdHN3aXRjaCAo
YXJnc1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAx
OyBicmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAw
OyBicmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDE7
IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMDsg
YnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2YXIgZmxhZyA9IHRoaXMucmV0
cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNpdHknKSA9PSAxKTtcblx0XHRc
dFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9IGZsYWcgPyAwIDogMTtcblx0
XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xuXHRcdFx0XHR0b2dnbGUgPSB0
cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1ldGhvZCA9ICdzdGFydCc7XG5c
dFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnZmFkZTpmbGFnJyk7XG5cdFx0
ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZhciB0byA9IGFyZ3NbYXJncy5s
ZW5ndGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcpe1xuXHRcdFx0dGhpcy5zZXRT
dHlsZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XG5cdFx0
fSBlbHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRjaGFpbi5sZW5ndGgpe1xuXHRc
dFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0
eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XHR0aGlzLmNhbGxDaGFpbigp
O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zp
c2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmYWRl
LmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ29w
YWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxp
dHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHR9KTtcblx0
XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdobGlnaHQ6IGZ1bmN0aW9uKHN0
YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9IHRoaXMucmV0cmlldmUoJ2hp
Z2hsaWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InKSk7XG5c
dFx0XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNmZmYnIDogZW5kO1xuXHRcdH1c
blx0XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0XHR0d2Vlbi5zdGFydCgnYmFj
a2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5kKS5jaGFpbihmdW5jdGlvbigp
e1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsIHRoaXMucmV0cmlldmUo
J2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNhbGxDaGFpbigpO1xuXHRcdH0u
YmluZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxu
bmFtZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwgYWxsIHB1cnBvc2UgUmVxdWVz
dCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFpbiwgRXZlbnRzLCBPcHRpb25z
LCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6IFJlcXVlc3RcblxuLi4uXG4q
L1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rpb24oKXt9LFxuXHRwcm9ncmVz
c1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2VyLlJlcXVlc3QpO1xuXG52YXIg
UmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0No
YWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7Lypc
blx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxvYWRzdGFydDogZnVuY3Rpb24o
ZXZlbnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxu
XHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNhbmNlbDogZnVuY3Rpb24oKXt9
LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0LCByZXNwb25zZVhNTCl7fSxc
blx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRvbkV4Y2VwdGlvbjogZnVuY3Rp
b24oaGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0OiBmdW5jdGlvbigpe30sXG5c
dFx0dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdpdGhDcmVkZW50aWFsczogZmFs
c2UsKi9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRc
dCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxcblx0XHRcdCdBY2NlcHQnOiAn
dGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICov
Kidcblx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1hdDogZmFsc2UsXG5cdFx0bWV0
aG9kOiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0aXNTdWNjZXNzOiBudWxsLFxu
XHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0cnVlLFxuXHRcdGVuY29kaW5n
OiAndXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0XHRldmFsUmVzcG9uc2U6IGZh
bHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFsc2Vcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJl
cXVlc3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpcy5oZWFkZXJz
ID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25TdGF0ZUNoYW5nZTogZnVuY3Rp
b24oKXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9
IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xu
XHRcdHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5c
dFx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRoaXMuc3RhdHVzID0gKHN0YXR1
cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHhoci5v
bnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIu
b25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdGlmICh0aGlzLnRpbWVy
KXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRp
bWVyO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4dDogdGhpcy54aHIucmVzcG9u
c2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1MfTtcblx0XHRpZiAodGhpcy5v
cHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVzKSlcblx0XHRcdHRoaXMuc3Vj
Y2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2UueG1sKTtcblx0XHRlbHNlXG5c
dFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVybiAoc3RhdHVzID49IDIwMCAm
JiBzdGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vzc1NjcmlwdHM6IGZ1bmN0aW9u
KHRleHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlIHx8ICgvKGVjbWF8amF2
YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LXR5cGUnKSkpIHJldHVybiBC
cm93c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3RyaXBTY3JpcHRzKHRoaXMub3B0
aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCwgeG1s
KXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRzKHRleHQpLCB4bWwpO1xu
XHRcdHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9KTtcblx0fSxcblxuXHRvblN1
Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgYXJndW1l
bnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNhbGxDaGFpbigpO1xuXHR9LFxu
XG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZhaWx1cmUoKTtcblx0XHR0aGlz
LnJlamVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRv
bkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJykuZmly
ZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5cdGxvYWRzdGFydDogZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3RhcnQnLCBbZXZlbnQsIHRoaXMu
eGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZp
cmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0dGltZW91
dDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIHRoaXMueGhyKTtc
blx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHhocjogdGhpcy54aHJ9KTtcblx0
fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR0aGlzLmhlYWRl
cnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRIZWFkZXI6
IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7
XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG5cdFx0fS5i
aW5kKHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMu
cnVubmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7XG5c
dFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRcdGNh
c2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykp
OyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRzZW5k
OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hlY2sob3B0aW9ucykpIHJldHVy
biB0aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1
Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuXHRc
dHZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0eXBlID09ICdzdHJpbmcnIHx8
IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9O1xuXG5cdFx0dmFy
IG9sZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2JqZWN0LmFwcGVuZCh7ZGF0YTog
b2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0aG9kfSwgb3B0aW9ucyk7XG5c
dFx0dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhvcHRpb25zLnVybCksIG1l
dGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRzd2l0Y2ggKHR5cGVP
ZihkYXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9IGRvY3VtZW50LmlkKGRhdGEp
LnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNo
JzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xuXHRcdH1cblxuXHRcdGlmICh0
aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQgPSAnZm9ybWF0PScgKyB0aGlz
Lm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IGZvcm1hdCArICcmJyArIGRh
dGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5lbXVsYXRpb24gJiYg
IVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBfbWV0aG9kID0g
J19tZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBfbWV0aG9kICsgJyYn
ICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9zdCc7XG5cdFx0fVxuXG5cdFx0
aWYgKHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcsICdwdXQnXS5jb250YWlucyht
ZXRob2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9wdGlvbnMuZW5jb2RpbmcpID8g
JzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJyc7XG5cdFx0XHR0aGlzLmhl
YWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2Rl
ZCcgKyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkgdXJsID0gZG9jdW1lbnQubG9j
YXRpb24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9uID0gdXJsLmxhc3RJbmRleE9m
KCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0cmltUG9zaXRpb24gPSB1cmwu
aW5kZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAsIHRyaW1Qb3NpdGlvbik7XG5c
blx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9m
KCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVlSUQoKTtcblxuXHRcdGlmIChk
YXRhICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdkZWxldGUnKSl7XG5cdFx0XHR1
cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBkYXRhO1xuXHRcdFx0
ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmIChw
cm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0ID0gdGhpcy5sb2Fkc3RhcnQu
YmluZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy5iaW5kKHRo
aXMpO1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgpLCB1cmwsIHRo
aXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMub3B0aW9ucy5wYXNzd29y
ZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAmJiAnd2l0aENyZWRl
bnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuXG5cdFx0eGhyLm9u
cmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpO1xuXG5cdFx0
T2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdHRy
eSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xuXHRcdFx0fSBj
YXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNlcHRpb24nLCBba2V5LCB2YWx1
ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhjZXB0aW9uJywgeGhyOiB4aHIs
IGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMu
Z2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5h
YmxlKHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgncmVxdWVz
dCcpO1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmFzeW5jKSB0
aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlzLm9wdGlvbnMudGltZW91dCkg
dGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9wdGlvbnMudGltZW91dCwgdGhp
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRc
dGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxz
ZTtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFib3J0KCk7XG5cdFx0aWYgKHRo
aXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRl
IHRoaXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtc
blx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFy
dCA9IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnY2FuY2Vs
JywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIG1ldGhv
ZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdoZWFk
JywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFUQ0gnLCAnSEVBRCddLmVhY2go
ZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0gZnVuY3Rpb24oZGF0YSl7XG5c
dFx0dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9kXG5cdFx0fTtcblx0XHRpZiAo
ZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0cmV0dXJuIHRoaXMuc2VuZChv
YmplY3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRc
dHZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtcblx0XHRzZW5kLnNldE9wdGlv
bnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigp
e1xuXHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcpO1xuXHRcdGlmICghc2VuZCl7
XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRkYXRhOiB0aGlzLCBsaW5rOiAn
Y2FuY2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwgJ3Bvc3QnLCB1cmw6IHRoaXMu
Z2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdzZW5kJywgc2VuZCk7
XG5cdFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBzZW5kZXIgPSB0aGlzLmdldCgn
c2VuZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8fCBzZW5kZXIu
b3B0aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhl
IGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGludGVyYWN0
aW5nIHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkhUTUxc
blxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJl
cXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFsc2UsXG5cdFx0YXBwZW5kOiBm
YWxzZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0ZXI6IGZhbHNlLFxuXHRcdGhl
YWRlcnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0
L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0
XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xu
XG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKHNjcmlwdCl7
XG5cdFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xuXHRcdH0pO1xuXG5cdFx0dmFy
IG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5dKj4oW1xcc1xcU10qPyk8XFwv
Ym9keT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1sID0gbWF0Y2hbMV07XG5cdFx0
dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7
XG5cblx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVzO1xuXHRcdHJlc3BvbnNlLmVs
ZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRlciB8fCAnKicpO1xuXG5cdFx0
aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVzcG9uc2UuZWxlbWVudHM7XG5c
dFx0aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRhdGUgPSBkb2N1bWVudC5pZChv
cHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgdXBkYXRl
LmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2UgdXBkYXRlLnNldCgnaHRtbCcs
IHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5hcHBlbmQpe1xuXHRcdFx0
dmFyIGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5kKTtcblx0XHRcdGlmIChvcHRp
b25zLmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgpLmluamVjdChhcHBlbmQpO1xu
XHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJlbigpKTtcblx0XHR9XG5cdFx0
aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhyZXNwb25zZS5qYXZhc2NyaXB0
KTtcblxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUsIHJlc3BvbnNlLmVsZW1lbnRz
LCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtcblx0XHR0aGlzLnJlc29sdmUo
e3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25zZS5lbGVtZW50cywgaHRtbDog
cmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2YXNjcmlwdH0pO1xuXHR9XG5c
bn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQnKS5jYW5jZWwoKTtcblx0XHRs
b2FkLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
OiBmdW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9hZCcpO1xuXHRc
dGlmICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3QuSFRNTCh7ZGF0YTogdGhpcywg
bGluazogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAnZ2V0J30pO1xuXHRcdFx0dGhp
cy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gbG9hZDtcblx0fVxuXG59
O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVuY3Rpb24oKXtcblx0XHR0aGlz
LmdldCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMsIHtkYXRhOiBUeXBlLmlzT2Jq
ZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7
XG5cbi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlvbjogSlNPTiBlbmNvZGVyIGFu
ZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuU2VlQWxzbzogPGh0
dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIE51bWJlciwg
RnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9cblxuaWYgKHR5cGVvZiBKU09O
ID09ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG52
YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdcXFxcdCcsICdcXG4nOiAnXFxc
XG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdcIicgOiAnXFxcXFwiJywgJ1xc
XFwnOiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0aW9uKGNocil7XG5cdHJldHVy
biBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBjaHIuY2hhckNvZGVBdCgwKS50
b1N0cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFsaWRhdGUgPSBmdW5jdGlvbihz
dHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXCg/OltcIlxcXFxcXC9iZm5y
dF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1wiW15cIlxc
XFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytc
XC1dP1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2UoLyg/Ol58OnwsKSg/Olxccypc
XFspKy9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxzXSokLykudGVzdChzdHJpbmcp
O1xufTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/IGZ1bmN0aW9uKG9iail7XG5c
dHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0aW9uKG9iail7XG5cdGlmIChv
YmogJiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xuXG5cdHN3aXRjaCAodHlwZU9m
KG9iaikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJ1wiJyArIG9iai5yZXBs
YWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAnXCInO1xuXHRcdGNhc2UgJ2Fy
cmF5Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04uZW5jb2RlKS5jbGVhbigpICsg
J10nO1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxuXHRcdFx0dmFyIHN0cmluZyA9
IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRc
dFx0dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0XHRcdGlmIChqc29uKSBzdHJp
bmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7XG5cdFx0XHR9KTtcblx0XHRc
dHJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAnbnVtYmVyJzogY2FzZSAnYm9v
bGVhbic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxsJzogcmV0dXJuICdudWxsJztc
blx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1cmUgPSB0cnVlO1xuXG5cbkpT
T04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xuXHRpZiAoIXN0cmluZyB8fCB0
eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG5cblx0aWYgKHNlY3VyZSA9
PSBudWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNlY3VyZSl7XG5cdFx0aWYgKEpT
T04ucGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5cdFx0aWYgKCFKU09OLnZhbGlk
YXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3VsZCBub3QgZGVjb2RlIHRoZSBp
bnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBzZWN1cmUuJyk7
XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAnKScpO1xufTtcblxufSkoKTtc
blxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVzY3JpcHRpb246IEV4dGVuZHMg
dGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNlbmRp
bmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkpTT05c
blxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJl
cXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjogZnVuY3Rpb24odGV4dCwgZXJy
b3Ipe30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlv
bihvcHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0XHRPYmplY3QuYXBwZW5k
KHRoaXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0
XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5j
dGlvbih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xuXHRcdFx0anNvbiA9IHRoaXMu
cmVzcG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMub3B0aW9ucy5zZWN1cmUpO1xu
XHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdlcnJvcicsIFt0ZXh0
LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoanNvbiA9PSBudWxsKXtc
blx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9uU3VjY2Vz
cyhqc29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNvbjoganNvbiwgdGV4dDogdGV4
dH0pO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBDb29raWVcblxuZGVz
Y3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIGRlbGV0aW5nIGJyb3dz
ZXIgQ29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4g
IC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVsIEtvY2ggKGh0dHA6Ly9xdWly
a3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJvd3Nlcl1cblxucHJvdmlkZXM6
IENvb2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxl
bWVudHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBhdGg6ICcvJyxcblx0XHRkb21h
aW46IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRzZWN1cmU6IGZhbHNlLFxuXHRc
dGRvY3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0aHR0cE9ubHk6IGZh
bHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0XHR0
aGlzLmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0
d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmVuY29kZSkgdmFs
dWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZG9t
YWluKSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9ucy5kb21haW47XG5cdFx0aWYg
KHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScgKyB0aGlzLm9wdGlvbnMucGF0
aDtcblx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0XHRcdHZhciBkYXRlID0gbmV3
IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHRoaXMub3B0aW9u
cy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRcdFx0dmFsdWUgKz0gJzsgZXhw
aXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vcHRpb25z
LnNlY3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAodGhpcy5vcHRpb25zLmh0dHBP
bmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5vcHRpb25zLmRvY3VtZW50LmNv
b2tpZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZG9jdW1l
bnQuY29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMua2V5LmVzY2FwZVJlZ0V4cCgp
ICsgJz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBkZWNvZGVVUklDb21wb25lbnQo
dmFsdWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdG5l
dyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7ZHVyYXRp
b246IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuQ29v
a2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9ucyl7XG5cdHJldHVybiBuZXcg
Q29va2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtcblxuQ29va2llLnJlYWQgPSBm
dW5jdGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkpLnJlYWQoKTtcbn07XG5cbkNv
b2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29r
aWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxuLS0tXG5cbm5hbWU6IERPTVJl
YWR5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9tIGV2ZW50IGRvbXJlYWR5Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtCcm93c2VyLCBFbGVt
ZW50LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJlYWR5LCBEb21SZWFkeV1cblxu
Li4uXG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7XG5cbnZhciByZWFkeSxcblx0
bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxcblx0dGltZXIsXG5cdHRlc3RF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbnZhciBkb21yZWFkeSA9
IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghcmVhZHkpe1xuXHRc
dEJyb3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRvY3VtZW50LnJlbW92ZUxpc3Rl
bmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92ZUxpc3RlbmVyKCdyZWFkeXN0
YXRlY2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVFdmVudCgnZG9tcmVhZHknKTtc
blx0XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9XG5cdC8vIGNsZWFudXAgc2Nv
cGUgdmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVtZW50ID0gbnVsbDtcbn07XG5c
bnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkgPSBjaGVja3MubGVuZ3RoOyBp
LS07KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwgPSBmdW5jdGlvbigpe1xuXHRj
bGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRpbWVyID0gc2V0VGltZW91dChw
b2xsLCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcs
IGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xsIHRlY2huaXF1ZSBieSBEaWVn
byBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC9cbi8v
IHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhlIERPTSBpcyBub3QgcmVhZHks
IG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdvcmtzID0gZnVuY3Rpb24oKXtc
blx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xuXHRcdHJldHVybiB0cnVlO1xu
XHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4vLyBJZiBkb1Njcm9sbCB3b3Jr
cyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWluZSBkb21yZWFkeVxuLy8gICBl
LmcuIGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Nyb2xsICYmICFkb1Njcm9sbFdv
cmtzKCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtcblx0c2hvdWxkUG9sbCA9IHRy
dWU7XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUpIGNoZWNrcy5w
dXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGU7XG5cdHJl
dHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7XG59KTtcblxu
aWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1bWVudC5hZGRMaXN0ZW5l
cigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hvdWxkUG9sbCA9IHRydWU7XG5c
bmlmIChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0ge1xu
XHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkgZm4uY2FsbCh0aGlzKTtcblx0
fVxufTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmlyZXMgYmVmb3JlIGxvYWRcbkVs
ZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxcblx0b25BZGQ6IGZ1bmN0aW9u
KGZuKXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93KSBmbi5jYWxsKHRoaXMpO1xu
XHR9LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMgPT0gd2luZG93KXtc
blx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVudC5FdmVudHMubG9hZDtcblx0
XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRoaXMgaXMgYmFzZWQgb24gdGhl
IGN1c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xvYWQnLCBmdW5jdGlvbigpe1xu
XHRsb2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9jdW1lbnQpO1xuIgorbW9kdWxl
LmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yay4gbGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTcg
W1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0LykuKi8gXG4vKiFcbldlYiBC
dWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVyL2U0MjZhOWFlNzE2N2M1ODA3
YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1lOiBDb3JlXG5cbmRlc2NyaXB0aW9u
OiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRpXSho
dHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0aG9yczogVGhlIE1vb1Rvb2xzIHBy
b2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZlbG9wZXJzLylcblxuaW5zcGly
YXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgW0Jhc2UuanNdKGh0
dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9iYXNlLykgQ29weXJpZ2h0IChj
KSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZV0o
aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGljZW5zZS5waHApXG4gIC0gU29t
ZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUuanNdKGh0dHA6Ly9wcm90b3R5
cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBTdGVwaGVuc29uLCBbTUlUIExp
Y2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApXG5c
bnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVPZiwgaW5zdGFuY2VPZiwgTmF0
aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yay4g
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2
LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLiov
XG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtcblx0dmVyc2lvbjogJzEuNi4wJyxc
blx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2YzdjYTUxMTRlZTk1ZTJiJ1xufTtc
blxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBlT2YgPSB0aGlzLnR5cGVPZiA9IGZ1
bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gJ251bGwnO1xuXHRpZiAo
aXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRmYW1pbHkoKTtcblxuXHRpZiAoaXRl
bS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0gMSkgcmV0dXJuICdlbGVtZW50
Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4gKC9cXFMvKS50ZXN0KGl0ZW0u
bm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7XG5cdH0gZWxzZSBpZiAodHlw
ZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRpZiAoJ2NhbGxlZScgaW4gaXRlbSkg
cmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScgaW4gaXRlbSkgcmV0dXJuICdjb2xs
ZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRlbTtcbn07XG5cbnZhciBpbnN0YW5j
ZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwgb2JqZWN0KXtcblx0aWYgKGl0
ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29uc3RydWN0b3IgPSBpdGVtLiRjb25z
dHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGlsZSAoY29uc3RydWN0b3Ipe1xuXHRc
dGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4gdHJ1ZTtcblx0XHRjb25zdHJ1Y3Rv
ciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxsdElFOD4qL1xuXHRpZiAoIWl0ZW0u
aGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8L2x0SUU4PiovXG5cdHJldHVybiBp
dGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJRTg+Ki9cbnZhciBlbnVtZXJhYmxl
cyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0pIGVudW1lcmFibGVzID0gbnVs
bDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hhc093blByb3BlcnR5JywgJ3Zh
bHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICd0b0xvY2Fs
ZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddO1xuZnVuY3Rpb24gZm9yRWFjaE9i
amVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQpe1xuXHRpZiAoZW51bWVyYWJsZXMp
IGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTspe1xuXHRcdHZhciBrID0gZW51
bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBrZXktdmFsdWUsIHNvIG92ZXJsb2Fk
U2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8vIG1ldGhvZCBmdW5jdGlvbiwgd2l0
aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2Jq
ZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10pO1xuXHR9XG59XG4vKjwvbHRJRTg+
Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFyIEZ1bmN0aW9uID0gdGhpcy5GdW5j
dGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0dGVyID0gZnVuY3Rpb24odXNl
UGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSwgYil7XG5c
dFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHVzZVBsdXJhbCB8fCB0eXBl
b2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBrIGluIGEpIHNlbGYuY2FsbCh0aGlz
LCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0XHRmb3JFYWNoT2JqZWN0RW51bWJl
cmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwvbHRJRTg+Ki9cblx0XHR9IGVsc2Ug
e1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztc
blx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9hZEdldHRlciA9IGZ1bmN0aW9u
KHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0dXJuIGZ1bmN0aW9uKGEpe1xu
XHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVvZiBhICE9ICdzdHJpbmcnKSBhcmdz
ID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgYXJncyA9IGFyZ3VtZW50
cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBbYV07XG5cdFx0aWYgKGFyZ3Mpe1xu
XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3Ro
OyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHR9
IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMsIGEpO1xuXHRcdH1cblx0XHRy
ZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0
ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7
XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5BcnJh
eS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBb
XTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlb2YgaXRlbSAhPSAn
c3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8gaXRlbSA6IHNsaWNlLmNhbGwo
aXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7
XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicpID8gaXRlbSA6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5cbk51bWJlci5jb252ZXJ0ID0gZnVu
Y3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KGl0ZW0pO1xuXHRyZXR1cm4g
aXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59O1xuXG5TdHJpbmcuY29udmVydCA9
IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcnO1xufTtcblxuXG5cbkZ1bmN0aW9u
LmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZyb20gPSBOdW1iZXIuY29udmVydDtc
blN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8vIGhpZGUsIHByb3RlY3RcblxuRnVu
Y3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGhpZGRl
biA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJvdGVjdDogZnVuY3Rpb24o
KXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5UeXBlID0gZnVuY3Rpb24obmFtZSwg
b2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dlciA9IG5hbWUudG9Mb3dlckNhc2Uo
KTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gKHR5
cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRcdFR5cGVbJ2lzJyArIG5hbWVdID0g
dHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7XG5cdFx0XHRvYmplY3QucHJvdG90
eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0cmV0dXJuIGxvd2VyO1xuXHRcdFx0
fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9iamVjdCA9PSBudWxsKSBy
ZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMpO1xuXHRvYmplY3QuJGNvbnN0cnVj
dG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29uc3RydWN0b3IgPSBvYmplY3Q7XG5c
blx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVy
biAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyAmJiB0b1N0
cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9uXScgKTtcbn07XG5cbnZhciBob29r
cyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9iamVjdCl7XG5cdHZhciB0eXBlID0g
dHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4gaG9va3NbdHlwZV0gfHwgKGhvb2tz
W3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhv
ZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblxuXHR2YXIgaG9v
a3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3Ro
OyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5cdFx0aWYgKHR5cGVPZihob29rKSA9
PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUsIG1ldGhvZCk7XG5cdFx0ZWxzZSBo
b29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxuXG5cdHZhciBwcmV2aW91cyA9IHRo
aXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMu
JHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cblx0aWYgKHRoaXNb
bmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAnZnVuY3Rpb24nKSBleHRlbmQuY2Fs
bCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KGl0
ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0pO1xufTtcblxudmFyIGV4dGVuZCA9
IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4p
IHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTtcblx0aWYgKHByZXZpb3VzID09
IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNbbmFtZV0gPSBtZXRob2Q7XG59O1xu
XG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBpbXBsZW1lbnQub3ZlcmxvYWRTZXR0
ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRlcigpLFxuXG5cdGFsaWFzOiBm
dW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVtZW50LmNhbGwodGhpcywgbmFtZSwg
dGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVybG9hZFNldHRlcigpLFxuXG5cdG1p
cnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0aGlzKS5wdXNoKGhvb2spO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlwZSgnVHlwZScsIFR5cGUpO1xuXG4v
LyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCwgbWV0
aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9iamVjdCksXG5cdFx0cHJvdG90eXBl
ID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBlKSBvYmplY3QgPSBuZXcgVHlwZShu
YW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ldLFxuXHRcdFx0Z2VuZXJpYyA9IG9i
amVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVba2V5XTtcblxuXHRcdGlmIChnZW5l
cmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNUeXBlICYmIHByb3RvKSBvYmplY3Qu
aW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0fVxuXG5cdGlmIChpc1R5cGUpe1xu
XHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJs
ZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1ldGhvZCA9IGZ1bmN0aW9uKGZuKXtc
blx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9k
cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5jYWxsKHByb3RvdHlwZSwgcHJvdG90
eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRcdH1cblx0XHRcdGZvciAodmFyIGtl
eSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVba2V5XSwga2V5KTtc
blx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtcblxuZm9yY2UoJ1N0cmluZycsIFN0
cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29uY2F0JywgJ2NvbnRhaW5zJywg
J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVvdGUnLCAncmVwbGFjZScsICdz
ZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywgJ3N1YnN0cmluZycsICd0cmlt
JywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSkoJ0FycmF5JywgQXJyYXksIFtcblx0
J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5z
aGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5cdCdpbmRleE9mJywgJ2xhc3RJbmRl
eE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21hcCcsICdzb21lJywgJ3JlZHVj
ZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdOdW1iZXInLCBOdW1iZXIsIFtcblx0
J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2FsZVN0cmluZycsICd0b1ByZWNpc2lv
bidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdhcHBseScsICdjYWxsJywgJ2JpbmQn
XG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywgJ3Rlc3QnXG5dKSgnT2JqZWN0Jywg
T2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVydHknLCAnZGVmaW5lUHJvcGVydGll
cycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRv
cicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZlbnRFeHRlbnNpb25zJywgJ2lzRXh0
ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScsICdpc0Zyb3plbidcbl0pKCdE
YXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRlbmQgPSBleHRlbmQub3ZlcmxvYWRT
ZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiArKG5l
dyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbicsIEJvb2xlYW4pO1xuXG4vLyBmaXhl
cyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIucHJvdG90eXBlLiRmYW1pbHkgPSBm
dW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAnbnVtYmVyJyA6ICdudWxsJztc
bn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51bWJlci5leHRlbmQoJ3JhbmRvbScs
IGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAq
IChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8gZm9yRWFjaCwgZWFjaCwga2V5c1xu
XG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0Zm9yRWFjaDogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlz
KTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0ZWFjaDogZnVuY3Rpb24oZm4sIGJp
bmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJpbmQpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRrZXlzOiBmdW5jdGlvbihvYmpl
Y3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2YXIgayBpbiBvYmplY3Qpe1xuXHRc
dFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkga2V5cy5wdXNoKGspO1xuXHRc
dH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmpl
Y3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGspO1xuXHRcdH0pO1xuXHRcdC8qPC9s
dElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5cdGZvckVhY2g6IGZ1bmN0aW9uKG9i
amVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlv
bihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xu
XHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9IE9iamVjdC5mb3JFYWNoO1xuXG5c
bi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBtZXJnaW5nIGFuZCBhcHBlbmRpbmdc
blxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0c3dpdGNoICh0eXBlT2YoaXRlbSkp
e1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xvbmUoKTtcblx0XHRjYXNlICdvYmpl
Y3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRcdGRlZmF1bHQ6IHJldHVybiBpdGVt
O1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywgZnVuY3Rpb24oKXtcblx0dmFy
IGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXkoaSk7XG5cdHdoaWxlIChpLS0pIGNs
b25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJuIGNsb25lO1xufSk7XG5cbnZhciBt
ZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50KXtcblx0c3dpdGNoICh0eXBl
T2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRpZiAodHlwZU9mKHNvdXJj
ZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJjZVtrZXldLCBjdXJyZW50KTtc
blx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUoY3VycmVudCk7XG5cdFx0XHRi
cmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0gY3VycmVudC5jbG9uZSgpOyBi
cmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1cnJlbnQ7XG5cdH1cblx0cmV0dXJu
IHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdG1lcmdlOiBmdW5jdGlvbihzb3Vy
Y2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0cmluZycpIHJldHVybiBtZXJnZU9u
ZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0
Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNlLCBrZXksIG9iamVjdFtrZXld
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24o
b2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0
KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7XG5cdFx0cmV0dXJuIGNsb25lO1xu
XHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwpe1xuXHRcdGZvciAodmFyIGkgPSAx
LCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZXh0ZW5kZWQg
PSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gZXh0ZW5kZWQpIG9y
aWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1cblx0XHRyZXR1cm4gb3JpZ2luYWw7
XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVzXG5cblsnT2JqZWN0JywgJ1doaXRl
U3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1bWVudHMnXS5lYWNoKGZ1bmN0
aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xuXG4vLyBVbmlxdWUgSURcblxudmFy
IFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQoJ3VuaXF1ZUlEJywgZnVuY3Rpb24o
KXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xufSk7XG5cblxuXG59KSgpO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBBcnJheSBQcm90
b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFzZS5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxucHJvdmlkZXM6IEFycmF5XG5cbi4u
LlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1PiovXG5cdGV2ZXJ5OiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4g
MDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykgJiYgIWZuLmNhbGwoYmluZCwg
dGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMg
PSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4gMDsg
aSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2YWx1ZSA9IHRoaXNbaV07XG5cdFx0
XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykpIHJlc3VsdHMucHVzaCh2YWx1ZSk7
XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGluZGV4T2Y6IGZ1bmN0aW9u
KGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4gMDtcblx0XHRm
b3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxlbmd0aCArIGZyb20pIDogZnJv
bSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJl
dHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihm
biwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwLCByZXN1bHRzID0g
QXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0
XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGks
IHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRzb21lOiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4g
MDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykgJiYgZm4uY2FsbChiaW5kLCB0
aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtc
blx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbSAhPSBudWxsO1xu
XHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24obWV0aG9kTmFtZSl7XG5cdFx0dmFy
IGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xuXHRcdHJldHVybiB0aGlzLm1hcChm
dW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21ldGhvZE5hbWVdLmFwcGx5KGl0ZW0s
IGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0ZTogZnVuY3Rpb24oa2V5cyl7XG5c
dFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0aGlzLmxlbmd0aCwga2V5cy5sZW5n
dGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIG9ialtrZXlzW2ldXSA9
IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRsaW5rOiBmdW5jdGlvbihvYmpl
Y3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMu
bGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmplY3Qpe1xuXHRc
dFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRcdFx0XHRcdHJlc3VsdFtrZXldID0g
dGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tleV07XG5cdFx0XHRcdFx0YnJlYWs7
XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxu
XHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXhP
ZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKGFycmF5KXtc
blx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0aCkgPyB0
aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxuXG5cdGdldFJhbmRvbTogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbTnVtYmVyLnJhbmRvbSgwLCB0
aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0aW5jbHVkZTogZnVuY3Rpb24oaXRl
bSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlzLnB1c2goaXRlbSk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGZv
ciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLmluY2x1ZGUo
YXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5jdGlvbihp
dGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdFx0aWYgKHRo
aXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmxlbmd0aCA9IDA7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjogZnVuY3Rpb24oKXtcblx0XHR2YXIg
YXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNbaV0pO1xuXHRcdFx0aWYgKHR5cGUg
PT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0gYXJyYXkuY29uY2F0KCh0eXBlID09
ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwgdHlwZSA9PSAnYXJndW1lbnRzJyB8
fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJheS5mbGF0dGVuKHRoaXNbaV0pIDog
dGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0fSxcblxuXHRwaWNrOiBmdW5j
dGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysp
e1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRoaXNbaV07XG5cdFx0fVxuXHRc
dHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0
aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xuXHRcdHZhciByZ2IgPSB0aGlzLm1h
cChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubGVuZ3RoID09IDEpIHZhbHVlICs9
IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxNik7XG5cdFx0fSk7XG5cdFx0
cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2IgKyAnKSc7XG5cdH0sXG5cblx0cmdi
VG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5sZW5ndGggPCAzKSByZXR1cm4g
bnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0aGlzWzNdID09IDAgJiYgIWFycmF5
KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4ID0gW107XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9ICh0aGlzW2ldIC0gMCkudG9TdHJp
bmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGggPT0gMSkgPyAnMCcgKyBiaXQgOiBi
aXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhleCA6ICcjJyArIGhleC5qb2luKCcn
KTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnVuY3Rpb25cblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlrZSBjcmVhdGUsIGJpbmQsIHBh
c3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5cbiovXG5cbkZ1bmN0aW9uLmV4dGVu
ZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFy
Z3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJu
IGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXHRcdH1cblx0XHRyZXR1cm4g
bnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRhdHRlbXB0OiBm
dW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXBwbHko
YmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0cmV0
dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiovXG5cdGJpbmQ6IGZ1bmN0aW9uKHRo
YXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFyZ3MgPSBhcmd1bWVudHMubGVuZ3Ro
ID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxsLFxuXHRcdFx0RiA9IGZ1bmN0
aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgY29udGV4
dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRpZiAodGhpcyBpbnN0
YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSBzZWxmLnByb3RvdHlwZTtcblx0
XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHJlc3VsdCA9ICghYXJn
cyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChjb250ZXh0KVxuXHRcdFx0XHQ6IHNl
bGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBhcmdzLmNvbmNhdChBcnJheS5zbGlj
ZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0XHRcdHJldHVybiBjb250ZXh0
ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07XG5cdFx0cmV0dXJuIGJvdW5kO1xu
XHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczogZnVuY3Rpb24oYXJncywgYmluZCl7
XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdzICE9IG51bGwpIGFyZ3MgPSBBcnJh
eS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHNl
bGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH0sXG5cblx0ZGVs
YXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0VGltZW91dCh0
aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBkZWxheSk7XG5cdH0s
XG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNhbCwgYmluZCwgYXJncyl7XG5cdFx0
cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwg
YmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBO
dW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJlciBQcm90b3R5cGVzIGxpa2UgbGlt
aXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVtYmVyXG5cbi4uLlxuKi9cblxuTnVt
YmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0XHRyZXR1
cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTtcblx0fSxcblxuXHRyb3VuZDog
ZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24gPSBNYXRoLnBvdygxMCwgcHJlY2lz
aW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVjaXNpb24gOiAwKTtcblx0XHRy
ZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcblx0fSxcblxu
XHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
czsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1
bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0
fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVzJyk7XG5cbihmdW5jdGlvbiht
YXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xu
XHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChBcnJheS5jb252ZXJ0KGFy
Z3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG59
KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFuMicsICdjZWlsJywgJ2Nvcycs
ICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAncG93JywgJ3NpbicsICdzcXJ0
JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJpbmdcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxDYXNlLCBjYXBpdGFsaXplLCB0ZXN0
LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczog
W1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5cbi4uLlxuKi9cblxuU3RyaW5nLmlt
cGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKHN0cmluZywgaW5k
ZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhpcykuc2xpY2UoaW5kZXgpIDogU3Ry
aW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0fSxcblx0Ly88LyFFUzY+XG5cblx0
dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0cmV0dXJuICgodHlwZU9mKHJlZ2V4
KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAoJycgKyByZWdleCwgcGFyYW1zKSku
dGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJp
bmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHR9LFxuXG5cdGNsZWFuOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXFxzKy9nLCAnICcp
LnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0
cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVy
biBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRoeXBo
ZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9bQS1a
XS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gKCctJyArIG1hdGNoLmNoYXJBdCgw
KS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxuXHRjYXBpdGFsaXplOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXFxiW2Etel0vZywgZnVuY3Rp
b24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5c
dH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhp
cykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcblx0
fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMs
IGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtc
blx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8oXFx3ezEsMn0pKFxcd3sxLDJ9
KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8gaGV4LnNsaWNlKDEpLmhleFRvUmdi
KGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0
XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7MSwzfS9nKTtcblx0XHRyZXR1cm4g
KHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRzdWJzdGl0dXRl
OiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBs
YWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0vZyksIGZ1bmN0aW9uKG1hdGNoLCBu
YW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xcXFwnKSByZXR1cm4gbWF0Y2gu
c2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1lXSAhPSBudWxsKSA/IG9iamVjdFtu
YW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBC
cm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmplY3QuIENvbnRhaW5zIEJyb3dz
ZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQsIGFuZCB0aGUgQnJvd3NlciBI
YXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtBcnJheSwg
RnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRlczogW0Jyb3dzZXIsIFdpbmRvdywg
RG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBkb2N1bWVudCA9IHRo
aXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQud2luZG93ID0gdGhpcztcblxudmFy
IHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0dWEgPSB1YS50b0xvd2VyQ2FzZSgp
O1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRvTG93ZXJDYXNlKCkgOiAnJyk7
XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBlZGdlIFVBLCBzbyBuZWVkIHRvIGNo
ZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hlY2tpbmcgaWYgaXQncyBjaHJvbWUu
XG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwvOl0oW1xcd1xcZFxcLl0rKS8pO1xu
XHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3BlcmF8aWV8ZmlyZWZveHxjaHJvbWV8
dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3XFxkXFwuXSspPy4qPyhzYWZhcml8
KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xcd1xcZFxcLl0rKXwkKS8pIHx8IFtu
dWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVBWzFdID09ICd0cmlkZW50Jyl7XG5c
dFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFbMl0gPSBVQVs0XTtcblx0fSBlbHNl
IGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9ICdjaHJvbWUnO1xuXHR9XG5cblx0
cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8pID8gJ2lvcycgOiAodWEubWF0
Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2goL21hY3x3aW58bGludXgvKSB8fCBb
J290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dpbicpIHBsYXRmb3JtID0gJ3dpbmRv
d3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5k
LFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8gVUFbM10gOiBVQVsxXSxcblx0XHR2
ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYmIFVBWzRdKSA/IFVBWzRdIDog
VUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9O1xufTtcblxudmFyIEJyb3dzZXIg
PSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFnZW50LCBuYXZpZ2F0b3IucGxh
dGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYgZG9jdW1lbnQuZG9jdW1lbnRN
b2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufVxuXG5C
cm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0eHBhdGg6ICEhKGRvY3VtZW50LmV2
YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSxcblx0XHRxdWVyeTogISEoZG9j
dW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEod2luZG93LkpTT04pXG5cdH0sXG5c
dHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVlc3RcblxuQnJvd3Nlci5SZXF1ZXN0
ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2YXIgTVNYTUwyID0gZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01TWE1MMi5YTUxIVFRQJyk7XG5cdH07
XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmpl
Y3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVt
cHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0cmV0dXJuIFhNTEhUVFA7XG5cdH0s
IGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0dXJuIE1TWE1MMjtcblx0fSwgZnVu
Y3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBNU1hNTDtcblx0fSk7XG5cbn0pKCk7
XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nlci5SZXF1ZXN0KTtcblxuXG5cbi8v
IFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1bmN0aW9uKHRleHQpe1xuXHRpZiAo
IXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4ZWNTY3JpcHQpe1xuXHRcdHdpbmRv
dy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzY3JpcHQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBl
JywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50ZXh0ID0gdGV4dDtcblx0XHRkb2N1
bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0ZG9jdW1lbnQuaGVhZC5yZW1vdmVD
aGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xufTtcblxuU3RyaW5nLmltcGxlbWVu
dCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5cdHZhciBzY3JpcHRzID0gJyc7XG5c
dHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+KFtcXHNcXFNdKj8pPFxcL3Nj
cmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0c2NyaXB0cyArPSBjb2RlICsgJ1xc
bic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4ZWMgPT09IHRydWUpIEJyb3dzZXIu
ZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4ZWMpID09ICdmdW5jdGlvbicpIGV4
ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xufSk7XG5cbi8vIFdpbmRvdywgRG9j
dW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVudDogdGhpcy5Eb2N1bWVudCxcblx0
V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhpcy5FbGVtZW50LFxuXHRFdmVudDog
dGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhpcy4kY29uc3RydWN0b3IgPSBuZXcg
VHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhpcy4kZmFtaWx5ID0gRnVuY3Rpb24u
Y29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cubWlycm9yKGZ1bmN0aW9uKG5hbWUs
IG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG50aGlzLkRvY3VtZW50
ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ0RvY3VtZW50JywgZnVuY3Rpb24o
KXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2RvY3VtZW50Jyku
aGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0ZG9j
dW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkgZG9jdW1lbnQuaGVhZCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5cbmlmIChkb2N1bWVudC5leGVj
Q29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0JhY2tncm91bmRJbWFnZUNh
Y2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxuXG4vKjxsdElFOT4qL1xuaWYgKHRo
aXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciB1bmxvYWRF
dmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxv
YWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC53
aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2luZG93ID0gZG9jdW1lbnQgPSBudWxs
O1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtcbn1c
blxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxlY3Q+Lm9wdGlvbnMgKHJlZmVy
cyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJheS5jb252ZXJ0O1xudHJ5IHtcblx0
YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7XG59IGNhdGNoIChlKXtcblx0QXJy
YXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICh0eXBlb2YgaXRlbSAhPSAnc3Ry
aW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlT2YoaXRlbSkgIT0gJ2FycmF5
Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9IG5ldyBBcnJheShpKTtcblx0
XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtcblx0XHRcdHJldHVybiBhcnJheTtc
blx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtcblx0fTtcblxuXHR2YXIgcHJvdG90
eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0gcHJvdG90eXBlLnNsaWNlO1xuXHRb
J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5z
aGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2goZnVuY3Rpb24obmFtZSl7XG5c
dFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0XHRBcnJheVtuYW1lXSA9IGZ1bmN0
aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBseShBcnJheS5jb252ZXJ0KGl0ZW0p
LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07XG5cdH0pO1xufVxuLyo8L2x0SUU5
PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2lseSBjcmVhdGluZywgZXh0ZW5k
aW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIEZ1bmN0aW9uLCBOdW1i
ZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
Q2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNzJywgZnVuY3Rpb24ocGFyYW1zKXtc
blx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBhcmFtcyA9IHtpbml0aWFsaXpl
OiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0aW9uKCl7XG5cdFx0cmVzZXQodGhp
cyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykgcmV0dXJuIHRoaXM7XG5cdFx0dGhp
cy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkgPSBudWxsO1xuXHRcdHZhciB2YWx1
ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRoaXMuY2FsbGVyID0gbnVsbDtcblx0
XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmltcGxlbWVudChwYXJhbXMpO1xuXG5c
dG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRuZXdDbGFzcy5wcm90b3R5cGUuJGNv
bnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS5wYXJlbnQgPSBwYXJl
bnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZhciBwYXJlbnQgPSBmdW5jdGlvbigp
e1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwicGFy
ZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5hbWUgPSB0aGlzLiRjYWxsZXIuJG5h
bWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25lci5wYXJlbnQsXG5cdFx0cHJldmlv
dXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFtZV0gOiBudWxsO1xuXHRpZiAoIXBy
ZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCInICsgbmFtZSArICdcIiBoYXMg
bm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtc
bn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7XG5cdGZvciAodmFyIGtleSBpbiBv
YmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdHN3aXRjaCAodHlwZU9m
KHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0XHR2YXIgRiA9IGZ1bmN0aW9u
KCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtcblx0XHRcdFx0b2JqZWN0W2tleV0g
PSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYXJyYXknOiBvYmpl
Y3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb2Jq
ZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBrZXksIG1ldGhvZCl7XG5cdGlm
IChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRvcmlnaW47XG5cdHZhciB3cmFwcGVy
ID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90ZWN0ZWQgJiYgdGhpcy4kY2FsbGVy
ID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBrZXkgKyAnXCIgY2Fu
bm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0gdGhpcy5jYWxsZXIsIGN1cnJlbnQg
PSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBjdXJyZW50OyB0aGlzLiRjYWxsZXIg
PSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNhbGxlciA9IGNhbGxlcjtcblx0
XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVyOiBzZWxmLCAkb3JpZ2luOiBtZXRo
b2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7XG59O1xuXG52YXIgaW1wbGVtZW50
ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0aWYgKENsYXNzLk11dGF0b3JzLmhh
c093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xhc3MuTXV0YXRvcnNba2V5XS5jYWxs
KHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdH1c
blxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24nKXtcblx0XHRpZiAodmFsdWUuJGhp
ZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5cGVba2V5XSA9IChyZXRhaW4pID8g
dmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5t
ZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztc
bn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGtsYXNzKXtcblx0a2xhc3MuJHByb3Rv
dHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGtsYXNzO1xuXHRkZWxldGUga2xhc3Mu
JHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xuXG5DbGFzcy5pbXBsZW1lbnQoJ2lt
cGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTtcblxuQ2xhc3MuTXV0YXRvcnMg
PSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtcblx0XHR0aGlzLnBhcmVudCA9IHBh
cmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3RhbmNlKHBhcmVudCk7XG5cdH0sXG5c
blx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRcdEFycmF5LmNvbnZlcnQoaXRlbXMp
LmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5zdGFuY2UgPSBuZXcgaXRlbTtcblx0
XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50LmNhbGwodGhpcywga2V5LCBp
bnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtcblx0fVxufTtcblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIFV0
aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIgb3duIENsYXNz
ZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9uIHRhc2tzLlxuXG5saWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xh
c3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxuXG4uLi5cbiovXG5cbihmdW5jdGlv
bigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxuXHQkY2hhaW46IFtdLFxuXG5cdGNo
YWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFwcGVuZChBcnJheS5mbGF0dGVuKGFy
Z3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbGxDaGFpbjogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkgPyB0aGlzLiRjaGFpbi5zaGlm
dCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtcblx0fSxcblxuXHRjbGVhckNoYWlu
OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5KCk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHJldHVy
biBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9uKGZ1bGwsIGZpcnN0KXtcblx0
XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7XG59O1xuXG50aGlzLkV2ZW50cyA9
IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5
cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXG5cdFx0XG5c
blx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRzW3R5cGVdIHx8IFtdKS5pbmNs
dWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVybmFsID0gdHJ1ZTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9y
ICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFy
Z3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9
IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0
YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZlbnRzLmVhY2goZnVuY3Rpb24oZm4p
e1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRl
bHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dHlwZSA9
IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5c
dFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRcdFx0dmFyIGluZGV4ID0gZXZlbnRz
LmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0xKSBkZWxldGUgZXZlbnRzW2luZGV4
XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnRzOiBmdW5j
dGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2YoZXZlbnRzKSA9PSAn
b2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5
cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKGV2
ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0XHRmb3IgKHR5cGUgaW4gdGhpcy4k
ZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRzICE9IHR5cGUpIGNvbnRpbnVlO1xu
XHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRcdGZvciAodmFyIGkgPSBm
bnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50
KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xuXG5cdHNldE9wdGlvbnM6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBPYmplY3QubWVyZ2UuYXBw
bHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1bWVudHMpKTtcblx0XHRpZiAo
dGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpe1xuXHRcdFx0aWYgKHR5
cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicgfHwgISgvXm9uW0EtWl0vKS50ZXN0
KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRFdmVudChvcHRpb24sIG9wdGlvbnNb
b3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRpb25dO1xuXHRcdH1cblx0XHRyZXR1
cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5U
aGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBVdGlsaXR5IENsYXNzIHRoYXQgY2Fu
IGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBtYWtlIHRoZW0gXCJ0aGVu
YWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNz
XG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVfRlVMRklMTEVEID0gMSxcblx0U1RB
VEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBDbGFzcy5UaGVuYWJsZSA9IG5ldyBD
bGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJTkcsXG5cdCR0aGVuYWJsZVJl
c3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBbXSxcblxuXHRyZXNvbHZlOiBmdW5j
dGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCBy
ZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFRoZW5hYmxlU3RhdGU6IGZ1
bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJsZVN0YXRlKXtcblx0XHRcdGNhc2Ug
U1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5kaW5nJztcblxuXHRcdFx0Y2FzZSBT
VEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVsZmlsbGVkJztcblxuXHRcdFx0Y2Fz
ZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdyZWplY3RlZCc7XG5cdFx0fVxuXHR9
LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMs
IHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuXHRcdGlmICh0eXBlb2Yg
b25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmlsbGVkID0gJ0lkZW50aXR5Jztcblx0
XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicpIG9uUmVqZWN0ZWQgPSAnVGhy
b3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblxuXHRcdHRoaXMu
JHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhlbmFibGU6IHRoZW5hYmxlLFxuXHRc
dFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRcdFx0cmVqZWN0SGFuZGxlcjogb25S
ZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRF
X1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoZW5h
YmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpe1xuXHRcdHJldHVy
biB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1cblxufSk7XG5cblRoZW5hYmxlLmV4
dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGhlbmFibGU7XG5c
dFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xuXHRcdFx0dGhlbmFibGUgPSB2YWx1
ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblx0XHRc
dHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xu
XHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0dmFyIHRoZW5hYmxlID0gbmV3
IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdHJldHVybiB0
aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIHJl
c29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09
PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUgPT09IHZhbHVlKXtcblx0XHRcdHJl
amVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gcmVzb2x2ZSBhIHRoZW5hYmxl
IHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUg
PT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpe1xuXHRcdFx0dmFy
IHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0gdmFsdWUudGhlbjtcblx0XHRcdH0g
Y2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9uKTtc
blx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJyl7XG5cdFx0XHRc
dHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZlcihmdW5jdGlvbigpe1xuXHRcdFx0
XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdHZhbHVlLFxu
XHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xuXHRcdFx0XHRcdFx0XHRcdGlmICgh
cmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRc
dFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHR9
XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0
XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9
IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0
XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRc
dH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRc
dFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFibGUs
IGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0
XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTtcblx0XHRcdH1c
blx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0
fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlmICh0aGVuYWJs
ZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9G
VUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVq
ZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09
IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHJlYXNvbjtc
blx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JFSkVDVEVEO1xuXG5cdFx0cmVh
Y3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc2V0KHRoZW5hYmxlKXtcblx0aWYg
KHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0g
U1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiByZWFjdCh0aGVuYWJsZSl7XG5cdHZh
ciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxuXHRcdHJlc3VsdCA9IHRoZW5hYmxl
LiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0aGVuYWJsZS4kdGhlbmFibGVSZWFj
dGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09IFNUQVRFX0ZVTEZJTExFRCl7XG5c
dFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdmdWxmaWxs
SGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfUkVKRUNURUQpe1xuXHRcdHRo
ZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5cGUgPSAncmVqZWN0SGFuZGxl
cic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIoaGFuZGxlLnBhc3MoW3Jlc3VsdCwg
cmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZShyZXN1bHQsIHJl
YWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBsID0gcmVhY3Rpb25zLmxlbmd0aDsg
aSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVhY3Rpb25zW2ldLFxuXHRcdFx0aGFu
ZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhhbmRsZXIgPT09ICdJZGVudGl0eScp
e1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0KTtcblx0XHR9IGVsc2Ug
aWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFi
bGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc29sdmUo
cmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7XG5cdFx0XHR9IGNhdGNoIChleGNl
cHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFibGUsIGV4Y2VwdGlvbik7XG5c
dFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtcbmlmICh0eXBlb2YgcHJvY2VzcyAh
PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbicp
e1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2UgaWYgKHR5cGVvZiBzZXRJbW1l
ZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBzZXRJbW1lZGlhdGU7XG59IGVsc2Ug
e1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRUaW1lb3V0KGZuLCAwKTtcblx0fTtc
bn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmplY3RcblxuZGVzY3JpcHRpb246IE9i
amVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBIYXNoXVxuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRzdWJzZXQ6IGZ1bmN0aW9uKG9iamVj
dCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9
IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRc
dGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVjdFtrXTtcblx0XHR9XG5cdFx0cmV0
dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtc
blx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0
KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFy
IGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0gPSBmbi5jYWxsKGJpbmQsIG9iamVj
dFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxu
XG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMg
PSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldLCB2
YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGtleSwg
b2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRz
O1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIg
a2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlz
Lmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKCFmbi5j
YWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJl
dHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsg
aSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRp
ZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0dXJuIHRydWU7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGsg
PSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2tdKTtcblx0XHR9XG5cdFx0cmV0
dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xuXHR9LFxuXG5cdGtleU9mOiBmdW5j
dGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7
XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBr
ZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXldID09PSB2YWx1ZSkgcmV0dXJuIGtl
eTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9u
KG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5T2Yob2JqZWN0LCB2YWx1ZSkg
IT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbihvYmplY3QsIGJhc2Up
e1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0T2JqZWN0LmVhY2gob2JqZWN0LCBm
dW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNlKSBrZXkgPSBiYXNlICsgJ1snICsg
a2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdHN3aXRjaCAodHlwZU9mKHZhbHVl
KSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5n
KHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0XHRcdHZh
ciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVuY3Rpb24odmFsLCBpKXtcblx0XHRc
dFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJlc3VsdCA9IE9i
amVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRk
ZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xu
XHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5U3RyaW5nLnB1c2gocmVzdWx0
KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxu
fSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBTbGljay5QYXJzZXJcbmRlc2NyaXB0
aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2VyXG5wcm92aWRlczogU2xpY2suUGFy
c2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIHBhcnNlZCxcblx0c2VwYXJhdG9y
SW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJzZWQsXG5cdGNhY2hlID0ge30sXG5c
dHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0gL1xcXFwvZztcblxudmFyIHBhcnNl
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7XG5cdGlmIChleHByZXNzaW9uID09
IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lvbi5TbGljayA9PT0gdHJ1ZSkgcmV0
dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycgKyBleHByZXNzaW9uKS5yZXBsYWNl
KC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0gISFpc1JldmVyc2VkO1xuXHR2YXIg
Y3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VDYWNoZSA6IGNhY2hlO1xuXHRpZiAo
Y3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVudENhY2hlW2V4cHJlc3Npb25d
O1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5cdFx0ZXhwcmVzc2lvbnM6IFtdLFxu
XHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0
dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5cdH07XG5cdHNlcGFyYXRvckluZGV4
ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHByZXNzaW9uID0gZXhwcmVzc2lvbi5y
ZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQubGVuZ3RoID0gcGFyc2VkLmV4cHJl
c3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNoZVtwYXJzZWQucmF3XSA9IChyZXZl
cnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59O1xuXG52YXIgcmV2ZXJzZUNvbWJp
bmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYgKGNvbWJpbmF0b3IgPT09ICchJykg
cmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9PT0gJyAnKSByZXR1cm4gJyEnO1xu
XHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkgcmV0dXJuIGNvbWJpbmF0b3IucmVw
bGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyArIGNvbWJpbmF0b3I7XG59O1xuXG52
YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBl
eHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb25z
Lmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVzc2lvbnNbaV07XG5cdFx0dmFyIGxh
c3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRvcjogcmV2ZXJzZUNvbWJpbmF0b3Io
ZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgZXhwLmxlbmd0
aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xuXHRcdFx0aWYgKCFjZXhwLnJldmVy
c2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9yID0gJyAnO1xuXHRcdFx0Y2V4cC5j
b21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHRcdGRlbGV0ZSBjZXhwLnJl
dmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5yZXZlcnNlKCkucHVzaChsYXN0KTtc
blx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZhciBlc2NhcGVSZWdFeHAgPSBmdW5j
dGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYuMSAoYykgMjAwNy0yMDA4IFN0ZXZl
biBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNvbS9yZWdleC94cmVnZXhwLz4gTUlU
IExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LlxcXFxeJHws
I1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVybiAnXFxcXCcgKyBtYXRjaDtcblx0
fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChcbi8qXG4jIS91c3IvYmluL2VudiBy
dWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1YigvXFwoXFw/eFxcKXxcXHMrIy4q
JHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0XCIoP3gpXig/OlxcXG5cdCAgXFxc
XHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2VwYXJhdG9yICAgICAgICAgIFxcblxc
XG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxzKiAgICMgQ29tYmluYXRvciAgICAg
ICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAgICAgICAgICAgICAjIENvbWJpbmF0
b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29kZT4rIHwgXFxcXCogKSAgICAgIyBU
YWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAgKCA8dW5pY29kZT4rICAgICAgICkg
ICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxcXC4gICggPHVuaWNvZGU+KyAg
ICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5cXFxuXHR8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAgIFxcblxcXG5cdFxcXFxbICBcXFxu
XHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5cdFx0XHRcXFxccyogKFsqXiQhfnxd
Pz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxuXHRcdFx0XHRcdChbXFxcIiddPyko
Lio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAgXFxcblx0XHQpPyAgXFxcXHMqICBc
XFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisgKCA8dW5pY29kZT4rICkoPzpcXFxu
XHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxcXFwxMl0qKVxcXFwxMil8KCg/Olxc
XFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwpXFxcblx0KT9cXFxuXHQpXCJcbiov
XG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNvbWJpbmF0b3I+KylcXFxccyp8KFxc
XFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmljb2RlPispfFxcXFwuKDx1bmljb2Rl
PispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxzKihbKl4kIX58XT89KSg/OlxcXFxz
Kig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxcXFxdKD8hXFxcXF0pfCg6KykoPHVu
aWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxcXFwxM10qKVxcXFwxMyl8KCg/Olxc
XFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxuXHQucmVwbGFjZSgvPGNvbWJpbmF0
b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4mPXt9XFxcXDs8LycpICsgJ10nKVxu
XHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18
XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFjZSgvPHVuaWNvZGUxPi9nLCAnKD86
WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFteXFxcXHMwLTlhLWZdKScpXG4p
O1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxuXG5cdHNlcGFyYXRvcixcblx0Y29t
YmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5cdHRhZ05hbWUsXG5cdGlkLFxuXHRj
bGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRyaWJ1dGVPcGVyYXRvcixcblx0YXR0
cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5cdHBzZXVkb01hcmtlcixcblx0cHNl
dWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlLFxuXHRw
c2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9yIHx8IHNlcGFyYXRvckluZGV4ID09
PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJhdG9ySW5kZXhdID0gW107XG5c
dFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNlcGFyYXRvcikgcmV0dXJuICcnO1xu
XHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNoaWxkcmVuIHx8IGNvbWJpbmF0
b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yIHx8ICcgJztcblx0
XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRl
eF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4
XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4XS5yZXZlcnNlQ29tYmlu
YXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpO1xuXHRcdGN1cnJlbnRTZXBhcmF0
b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6IGNvbWJpbmF0b3IsIHRhZzogJyon
fTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFy
YXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlmICh0YWdOYW1lKXtcblx0XHRjdXJy
ZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0fSBl
bHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9IGlkLnJlcGxhY2UocmVVbmVzY2Fw
ZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtcblx0XHRjbGFzc05hbWUgPSBjbGFz
c05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQu
Y2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtdO1xuXHRcdGlmICghY3VycmVu
dFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNzZXMgPSBbXTtcblx0XHRjdXJyZW50
UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFz
c2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxcblx0XHRcdHJlZ2V4cDogbmV3IFJl
Z0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgJyhcXFxcc3wkKScp
XG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFzcyl7XG5cdFx0cHNldWRvQ2xhc3NW
YWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NRdW90ZWRWYWx1ZTtcblx0XHRw
c2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/IHBzZXVkb0NsYXNzVmFsdWUucmVw
bGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLnBz
ZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQucHNl
dWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3MucmVwbGFjZShyZVVuZXNjYXBlLCAn
JyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxcblx0XHRcdHR5cGU6IHBzZXVkb01h
cmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCdcblx0XHR9KTtcblxuXHR9IGVs
c2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRlS2V5ID0gYXR0cmlidXRlS2V5LnJl
cGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0ZVZhbHVlID0gKGF0dHJpYnV0ZVZh
bHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdHZhciB0ZXN0LCByZWdl
eHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9yKXtcblx0XHRcdGNhc2UgJ149JyA6
IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZh
bHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnJD0nIDogcmVnZXhwID0gbmV3
IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnJCcgICAg
ICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAnKF58
XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyhcXFxcc3wkKScgKTsgYnJl
YWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVz
Y2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICApOyBicmVhaztcblx0XHRcdGNh
c2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiBhdHRyaWJ1
dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnKj0nIDogdGVz
dCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIHZhbHVlICYmIHZhbHVlLmluZGV4
T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGNhc2UgJyE9
JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiBhdHRyaWJ1dGVWYWx1
ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdCAgIDogdGVzdCA9IGZ1
bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFsdWU7XG5cdFx0XHR9O1xuXHRcdH1c
blxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAoL15bKiReXT0kLykudGVzdChhdHRy
aWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xu
XHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRy
ZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xuXHRcdH07XG5cblx0XHRpZiAoIWN1
cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzID0gW107XG5c
dFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0a2V5OiBhdHRyaWJ1dGVL
ZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3IsXG5cdFx0XHR2YWx1ZTogYXR0
cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0fSk7XG5cblx0fVxuXG5cdHJldHVy
biAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9
KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0cmV0dXJuIHBhcnNl
KGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVnRXhwID0gZXNjYXBlUmVnRXhwO1xu
XG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHkoLyo8Q29t
bW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6IC8qPC9D
b21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBTbGljay5GaW5kZXJcbmRlc2NyaXB0
aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVuZ2luZS5cbnByb3ZpZGVzOiBT
bGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJcbi4uLlxuKi9cblxuOyhmdW5jdGlv
bigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXNDYWNoZSA9IHt9LFxuXHR0b1N0cmlu
ZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIEZlYXR1cmUgLyBCdWcgZGV0ZWN0
aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZuKXtcblx0cmV0dXJuICgvXFx7
XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3QoJycgKyBmbik7XG59O1xuXG5sb2Nh
bC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0dXJuICghIWRvY3VtZW50LnhtbFZl
cnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5nLmNhbGwoZG9jdW1lbnQpID09
ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1bWVudC5ub2RlVHlwZSA9PSA5ICYm
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAnSFRNTCcpO1xufTtcblxubG9j
YWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5cblx0Ly8gY29udmVydCBlbGVt
ZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQuIGlmIGRvY3VtZW50IGNhbm5vdCBi
ZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxuXHR2YXIgbm9kZVR5cGUgPSBk
b2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09IDkpOyAvLyBkb2N1bWVudFxuXHRl
bHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVudC5vd25lckRvY3VtZW50OyAvLyBu
b2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9jdW1lbnQgPSBkb2N1bWVudC5k
b2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xuXG5cdC8vIGNoZWNrIGlmIGl0J3Mg
dGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3VtZW50ID09PSBkb2N1bWVudCkgcmV0
dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cblx0Ly8gY2hlY2sgaWYgd2UgaGF2
ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9jdW1lbnQgYmVmb3JlXG5cblx0dmFy
IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0cm9vdFVpZCA9IHRoaXMuZ2V0
VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSxcblx0
XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0Zm9yIChmZWF0dXJlIGluIGZlYXR1
cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0XHR9XG5c
dFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdID0g
e307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZlYXR1cmVzLmlzWE1MRG9jdW1lbnQg
PSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE5cblx0
PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9IGZlYXR1cmVzLmlkR2V0c05hbWVc
blx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0PSBmZWF0dXJlcy5icm9rZW5HRUJD
TlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0PSBmZWF0dXJlcy5icm9rZW5FbXB0
eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERvY3VtZW50XG5cdD0gZmVhdHVyZXMu
bmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5cblx0dmFyIHN0YXJTZWxlY3RzQ2xv
c2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNO
LCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVH
ZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191bmlxdWVpZCc7XG5cdHZhciB0
ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG5cdHZhciB0ZXN0Um9v
dCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHkn
KVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0ZXN0Tm9kZSk7XG5cblx0Ly8g
b24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0RWxlbWVudHNCeUlkIGRvZXNu
dCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGlk
PVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgPSAhIWRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAoZSl7fVxuXG5cdGlmIChmZWF0dXJl
cy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUn
O1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIGZvciBnZXRFbGVtZW50c0J5VGFn
TmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRlc3ROb2RlLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFyU2VsZWN0c0NvbW1lbnRzID0gKHRl
c3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3RoID4gMSk7XG5cblx0XHQvLyBJ
RSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9yIGdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2Rl
LmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNlbGVjdHNDbG9zZWQgPSAoc2VsZWN0
ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDAp
ID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdGZlYXR1cmVzLmJyb2tlblN0YXJH
RUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNlbGVjdHNDbG9zZWQ7XG5cblx0XHQv
LyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5zdGVhZCBvZiBqdXN0IGlkIGZv
ciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5IHtcblx0XHRcdHRl
c3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQgKydcIj48L2E+PGIgaWQ9XCInKyBp
ZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRzTmFtZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSl7XG5cblx0XHRcdC8v
IFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYWNoZXMgcmVzdWx0c1xuXHRcdFx0
dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiZlwiPjwvYT48
YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUuZmlyc3RDaGlsZC5jbGFzc05hbWUg
PSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSAodGVzdE5vZGUu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2gg
KGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGRvZXNu
dCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJzdCBvbmVcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cImFcIj48L2E+PGEgY2xh
c3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiA9
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJykubGVuZ3RoICE9IDIpO1xuXHRc
dFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5icm9rZW5HRUJDTiA9IGNhY2hlZEdl
dEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ047XG5cdFx0
fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwpe1xuXHRcdFx0Ly8gSUUgOCBy
ZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9yIHF1ZXJ5U2VsZWN0b3JBbGwo
JyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlu
bmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLnF1ZXJ5
U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRRU0Eg
PSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUu
Y2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFNhZmFy
aSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRoIG1peGVkY2FzZSBvbiBxdWly
a3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xh
c3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNlUVNBID0g
IXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5sZW5ndGg7XG5cdFx0XHR9IGNhdGNo
IChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEgZG9udCByZXR1cm4gc2VsZWN0ZWQg
b3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9k
ZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPVwic2VsZWN0ZWRcIj5hPC9v
cHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQSA9ICh0
ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxlbmd0aCA9PSAwKTtcblx0XHRc
dH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMg
Zm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0
cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJcIj48L2E+Jztc
blx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgPSAodGVzdE5vZGUucXVl
cnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0aCAhPSAwKTtcblx0XHRcdH0gY2F0
Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBpZiBhIGZvcm0gaGFzIGFuIGlucHV0
IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhl
IGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8Zm9ybSBhY3Rp
b249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9ybT4nO1xuXHRcdFx0YnJva2VuRm9y
bUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgnYWN0
aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHQvLyBuYXRpdmUgbWF0Y2hl
c1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ig
PSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1NlbGVjdG9yIHx8Ki8gcm9vdC5tb3pN
YXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cdFx0aWYgKGZl
YXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtcblx0XHRcdC8vIGlmIG1hdGNoZXNT
ZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNpbnRheGVzIHdlIGNhbiB1c2UgaXRc
blx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKHJvb3QsICc6c2xpY2sn
KTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IG51bGw7XG5cdFx0fSBj
YXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJvb3Quc2xpY2tfZXhwYW5kbyA9IDE7
XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0
aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRo
aXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVtb3ZlQ2hpbGQodGVzdE5vZGUpO1xu
XHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBudWxsO1xuXG5cdC8vIGdldEF0dHJp
YnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChmZWF0dXJlcy5pc0hUTUxEb2N1bWVu
dCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xu
XHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0aWYgKG1l
dGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0g
bm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSkg
PyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBu
YW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xuXHRc
dHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUpIDogbm9kZS5nZXRBdHRyaWJ1dGUo
bmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5cblx0ZmVhdHVyZXMuaGFzQXR0cmli
dXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5oYXNBdHRyaWJ1dGUpKSA/IGZ1
bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKGF0
dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRcdG5vZGUgPSBu
b2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0XHRyZXR1cm4gISEobm9kZSAmJiAo
bm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtcblx0fTtcblxuXHQvLyBjb250YWlu
c1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlucyBzaG91bGQgYmUgZGlmZmVy
ZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2YXIgbmF0aXZlUm9vdENvbnRhaW5z
ID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRhaW5zKSxcblx0XHRuYXRpdmVE
b2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05hdGl2ZUNvZGUoZG9jdW1lbnQu
Y29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0gKG5hdGl2ZVJvb3RDb250YWlucyAm
JiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRc
dHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKG5hdGl2ZVJvb3RDb250YWlu
cyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtc
blx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24gZG9jdW1lbnQuXG5cdFx0cmV0
dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09PSBkb2N1bWVudCkgPyBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlucyhub2RlKTtcblx0fSA6IChyb290
ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oY29udGV4dCwgbm9k
ZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgISEoY29udGV4dC5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUp
e1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9kZSA9PT0gY29udGV4dCkgcmV0dXJu
IHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKTtcblx0XHRyZXR1
cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHQvLyBjcmVk
aXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pXG5cblx0ZmVhdHVyZXMuZG9jdW1l
bnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihhLCBi
KXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xuXHR9IDogKCdzb3VyY2VJbmRleCcg
aW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuc291cmNlSW5kZXggfHwgIWIu
c291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5zb3Vy
Y2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5nZSkgPyBmdW5jdGlvbihhLCBiKXtc
blx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRvY3VtZW50KSByZXR1cm4gMDtc
blx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCksIGJSYW5nZSA9
IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdGFSYW5nZS5zZXRTdGFydChhLCAw
KTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJSYW5nZS5zZXRTdGFydChiLCAwKTtc
blx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVybiBhUmFuZ2UuY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdlKTtcblx0fSA6IG51bGw7XG5cblx0
cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0XHR0aGlzW2Zl
YXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07XG5cbi8vIE1haW4gTWV0aG9kXG5c
bnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/OltcXHctXSt8XFwqKSkkLyxcblx0
cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/OlwiXCJ8JycpP1xcXS8sXG5cdHFzYUZh
aWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHBy
ZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91bmQgPSB0aGlzLmZvdW5kID0gKGZp
cnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRpZiAoIWNvbnRleHQpIHJldHVybiBm
b3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNvbnRleHQgPSBjb250ZXh0LmRv
Y3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5kb3cgdG8gYSBkb2N1bWVudFxu
XHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZvdW5kO1xuXG5cdC8vIHNldHVw
XG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5cdFx0dW5pcXVlcyA9IHRoaXMudW5p
cXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVuZCAmJiBhcHBlbmQubGVuZ3RoKSxc
blx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVUeXBlID09IDkpO1xuXG5cdGlm
ICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1lbnQgPyBjb250ZXh0IDogY29udGV4
dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChjb250ZXh0KTtcblxuXHQvLyBhdm9p
ZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBhcHBlbmQgYXJyYXlcblx0aWYgKGhh
c090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1bmlxdWVzW3RoaXMuZ2V0VUlE
KGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Npb24gY2hlY2tzXG5cblx0aWYgKHR5
cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHN0cmluZ1xu
XG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXHRcdHZhciBzaW1wbGVTZWxl
Y3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rvcik7XG5cdFx0c2ltcGxlU2Vs
ZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0XHR2YXIgc3ltYm9sID0gc2ltcGxl
U2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVTZWxlY3RvclsyXTtcblxuXHRcdFx0
aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09ICcqJyAmJiB0aGlzLmJyb2tlblN0
YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlcyA9IGNvbnRleHQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5v
ZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSld
KSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJv
bCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAhY29udGV4
dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0bm9kZSA9IGNvbnRl
eHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlmICghbm9kZSkgcmV0dXJuIGZvdW5k
O1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5vZGUuZ2V0QXR0cmlidXRlTm9kZSgn
aWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRp
ZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAm
JiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cblx0XHRc
dH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERv
Y3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCB0aGlzLmJyb2tl
bkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSBicmVhayBzaW1wbGVTZWxlY3Rv
cnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgIXRoaXMu
YnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51
bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5k
LnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZh
ciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJysgU2xpY2suZXNjYXBlUmVnRXhw
KG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2kr
K107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lO1xuXHRcdFx0XHRc
dFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChjbGFzc05hbWUpKSkgY29udGlu
dWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlO1xuXHRcdFx0XHRcdFx0aWYg
KCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChu
b2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGFz
T3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJuIChmaXJzdCkgPyBudWxsIDog
Zm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxlY3RvcnMtb3ZlcnJpZGU+Ki9cblxu
XHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cdFx0cXVlcnlTZWxlY3RvcjogaWYg
KGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1
bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl1cblx0XHRcdFx0Ly9U
T0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVhbGx5IG1peGVkIGNhc2Vcblx0
XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0XHRcdFx0fHwgKHRoaXMuYnJva2Vu
Q2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpjaGVja2VkJykgPiAtMSlcblx0XHRc
dFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYgcmVFbXB0eUF0dHJpYnV0ZS50
ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRleHRJc0RvY3VtZW50IC8vQWJvcnQg
d2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0XHRcdFx0Ly8gIHRoZXJlIGFyZSBt
dWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jcblx0XHRcdFx0XHQvLyAgc2luY2Ug
d2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCByb290ZWQgUVNBIGZvciBzaW5nbGUg
ZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBleHByZXNzaW9uLmluZGV4T2YoJywn
KSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2suZGlzYWJsZVFTQVxuXHRcdFx0KSBi
cmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4cHJlc3Npb24gPSBleHByZXNzaW9u
LCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0XHRcdGlmICghY29udGV4dElzRG9j
dW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9vdGVkIFFTQVxuXHRcdFx0XHQvLyBj
cmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3VycmVudElkID0gX2NvbnRleHQuZ2V0
QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRfXyc7XG5cdFx0XHRcdF9jb250ZXh0
LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRcdFx0X2V4cHJlc3Npb24gPSAnIycg
KyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0XHRcdGNvbnRleHQgPSBfY29udGV4
dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoZmlyc3Qp
IHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Npb24pIHx8IG51bGw7XG5cdFx0
XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoX2V4cHJlc3Npb24pO1xu
XHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXSA9
IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRc
dFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0XHRpZiAoY3VycmVudElkKSBf
Y29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTtcblx0XHRcdFx0XHRlbHNlIF9j
b250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdFx0XHRjb250ZXh0ID0gX2NvbnRl
eHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc3RhclNlbGVjdHNDbG9z
ZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdGlmIChub2Rl
Lm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxzZSBmb3IgKGkgPSAwOyBub2RlID0g
bm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdl
dFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGFz
T3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXG5cdFx0fVxu
XHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXG5cdFx0cGFyc2VkID0gdGhpcy5T
bGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBhcnNlZC5sZW5ndGgpIHJldHVybiBm
b3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51bGwpeyAvLyB0aGVyZSBpcyBubyBl
eHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24uU2xp
Y2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNrIG9iamVjdFxuXHRcdHBhcnNlZCA9
IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250YWlucyhjb250ZXh0LmRvY3VtZW50
RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8vIGV4cHJlc3Npb24gaXMgYSBub2Rl
XG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikgOiBmb3VuZCA9IGV4cHJlc3Np
b247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAvLyBvdGhlciBqdW5rXG5cdFx0cmV0
dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1wc2V1ZG8t
c2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMgZm9yIHRoZSBudGggc2VsZWN0b3Jz
XG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NOVEhMYXN0ID0ge307XG5cdHRoaXMu
cG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVMYXN0ID0ge307XG5cblx0Lyo8L250
aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBpZiBh
cHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBzZWxlY3RvciB3aXRoIG9u
ZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1c2hVSURcblx0dGhpcy5wdXNo
ID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVuZ3RoID09IDEgJiYgcGFyc2Vk
LmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5wdXNoQXJyYXkgOiB0aGlzLnB1
c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5kID0gW107XG5cblx0Ly8gZGVmYXVs
dCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNvbWJpbmF0b3IsIHRhZywgaWQsIGNs
YXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcztcblx0dmFyIGN1cnJlbnRJdGVt
cywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RCaXQsIGV4cHJlc3Npb25zID0g
cGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9yIChpID0gMDsgKGN1cnJlbnRFeHBy
ZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9IDA7IChjdXJyZW50Qml0ID0g
Y3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0Y29tYmluYXRvciA9ICdjb21iaW5h
dG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0aWYgKCF0aGlzW2NvbWJpbmF0b3Jd
KSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAgID0gKHRoaXMuaXNYTUxEb2N1bWVu
dCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRvVXBwZXJDYXNlKCk7XG5cdFx0
aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xhc3NMaXN0ICA9IGN1cnJlbnRCaXQu
Y2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50Qml0LmNsYXNzZXM7XG5cdFx0YXR0
cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0XHRwc2V1ZG9zICAgID0gY3VycmVu
dEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9PT0gKGN1cnJlbnRFeHByZXNzaW9u
Lmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVlcyA9IHt9O1xuXG5cdFx0aWYgKGxh
c3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVlcztcblx0XHRcdHRoaXMuZm91bmQg
PSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bmlxdWVzID0ge307XG5cdFx0XHR0
aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGogPT09IDApe1xuXHRcdFx0dGhpc1tj
b21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
LCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQgJiYgZm91bmQubGVuZ3Ro
KSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChmaXJzdCAmJiBsYXN0Qml0
KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0rKyl7XG5cdFx0
XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0XHRpZiAoZm91bmQubGVuZ3Ro
KSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVt
cy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdH1c
blxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5cdH1cblxuXHQvLyBzaG91bGQgc29y
dCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5b3UgcGFzcyBtdWx0aXBsZSBl
eHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0
aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVybiAoZmlyc3QpID8gKGZvdW5kWzBd
IHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xuXG5sb2NhbC51aWR4ID0gMTtcbmxv
Y2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2NhbC5nZXRVSURYTUwgPSBmdW5jdGlv
bihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRlKHRoaXMudWlkayk7XG5cdGlm
ICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0XHRub2RlLnNldEF0dHJpYnV0ZSh0
aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtcbn07XG5cbmxvY2FsLmdldFVJREhU
TUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUudW5pcXVlTnVtYmVyIHx8IChub2Rl
LnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5cbi8vIHNvcnQgYmFzZWQgb24gdGhl
IHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5cblxubG9jYWwuc29ydCA9IGZ1bmN0
aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRTb3J0ZXIpIHJldHVybiByZXN1bHRz
O1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7XG5cdHJldHVybiByZXN1bHRz
O1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiov
XG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1hdGNoTlRIID0gL14oWystXT9cXGQq
KT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5wYXJzZU5USEFyZ3VtZW50ID0gZnVu
Y3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJndW1lbnQubWF0Y2godGhpcy5tYXRj
aE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cdHZhciBzcGVjaWFsID0gcGFy
c2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsxXSB8fCAxO1xuXHRpZiAoYSA9PSAn
LScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7XG5cdHBhcnNlZCA9XG5cdFx0
KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxuXHRcdChzcGVjaWFsID09ICdvZGQn
KVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09ICdldmVuJylcdD8ge2E6IDIsIGI6
IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhpcy5jYWNoZU5USFthcmd1bWVudF0g
PSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNldWRvID0gZnVuY3Rpb24oY2hpbGQs
IHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIGFy
Z3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0aWYgKCF0aGlz
W3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xu
XHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRcdHZhciBlbCA9IHBhcmVudFtj
aGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUpe1xuXHRcdFx0XHR2YXIgbm9kZU5h
bWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKGVsLm5vZGVO
YW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhp
cy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hpbGUgKChlbCA9IGVsW3NpYmxp
bmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKGVsLm5v
ZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdl
dFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10p
KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBhcmd1bWVudCB8fCAnbic7XG5cdFx0
dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8IHRoaXMucGFyc2VOVEhBcmd1
bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0XHR2YXIg
YSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNbcG9zaXRpb25zXVt1aWRdO1xu
XHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0XHRpZiAoYSA+IDApe1xuXHRcdFx0
aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGIgPCBw
b3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICgocG9zIC0gYikgJSBhKSA9PSAw
O1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxl
Y3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcykpIHRoaXMuZm91bmQucHVz
aChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5v
ZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMubWF0Y2hTZWxlY3Rvcihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSl7XG5cdFx0dGhpcy51bmlx
dWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVzaChub2RlKTtcblx0fVxufTtcblxu
bG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAodGhpcy5p
c0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvcil7XG5cdFx0dHJ5IHtc
blx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKG5vZGUsIHNlbGVj
dG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxcXV0rPylcXHMqXFxdL2csICdbJDE9
XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9yKXt9XG5cdH1cblxuXHR2YXIgcGFy
c2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5cdGlmICghcGFyc2VkKSByZXR1cm4g
dHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3JzXG5cdHZhciBleHByZXNzaW9u
cyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291bnRlciA9IDAsIGksIGN1cnJlbnRF
eHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBleHByZXNzaW9u
c1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCA9PSAxKXtcblx0
XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtcblx0XHRcdGlmICh0aGlzLm1hdGNo
U2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBleHAudGFnIDogZXhwLnRhZy50
b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAuYXR0cmlidXRlcywgZXhwLnBz
ZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4cENvdW50ZXIrKztcblx0XHR9XG5c
dH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJzZWQubGVuZ3RoKSByZXR1cm4gZmFs
c2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5kb2N1bWVudCwgcGFyc2VkKSwg
aXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107KXtcblx0XHRpZiAoaXRlbSA9
PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxubG9jYWwu
bWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBhcmd1bWVudCl7XG5cdHZhciBwc2V1
ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRoaXNbcHNldWRvTmFtZV0pIHJldHVy
biB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtcblx0dmFyIGF0dHJpYnV0ZSA9IHRo
aXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1cm4gKGFyZ3VtZW50KSA/IGFyZ3Vt
ZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtcblxubG9jYWwubWF0Y2hTZWxlY3Rv
ciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
e1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/
IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG5cdFx0aWYgKHRh
ZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0AnKSByZXR1cm4gZmFsc2U7IC8vIEZp
eCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVzXG5cdFx0fSBlbHNlIHtcblx0XHRc
dGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpZiAo
aWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQpIHJldHVybiBmYWxzZTtcblxuXHR2
YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9yIChpID0gY2xhc3Nlcy5sZW5ndGg7
IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsICdjbGFzcycpO1xuXHRc
dGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0KGNscykpKSByZXR1cm4gZmFsc2U7
XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpLS07
KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRpZiAocGFydC5vcGVyYXRvciA/ICFw
YXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSA6ICF0aGlzLmhhc0F0
dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAocHNldWRv
cykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xuXHRcdHBhcnQgPSBwc2V1ZG9zW2ld
O1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBwYXJ0LmtleSwgcGFydC52YWx1ZSkp
IHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBjb21iaW5hdG9y
cyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGlsZCBub2RlcywgYW55IGxldmVsXG5c
blx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRpZiAodGhpcy5pc0hUTUxEb2N1bWVu
dCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0XHRpdGVtID0gdGhpcy5kb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgoIWl0ZW0gJiYgbm9kZS5hbGwpIHx8
ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyku
bm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxsW2lkXSByZXR1cm5zIGFsbCB0aGUg
ZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5vZGVcblx0XHRcdFx0XHQvLyBp
ZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVsZW1lbnQsIGVsc2UgaXQgd2ls
bCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJlbiA9IG5vZGUuYWxsW2lkXTtcblx0
XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJlblsw
XSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBj
aGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWROb2RlID0gaXRlbS5nZXRBdHRyaWJ1
dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9kZSAmJiBpZE5vZGUubm9kZVZhbHVl
ID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRc
dFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0
aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyBpbiB0aGUgZG9tIHdl
IHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtpbmcgdGhlIGdldEJ5SWQgbGFi
ZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlzLnJvb3QsIG5vZGUpKSByZXR1cm47
XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMu
ZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMobm9kZSwgaXRlbSkpIHJldHVybjtc
blx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGdldEJ5Q2xhc3M6IGlm
IChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5H
RUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNs
YXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5s
ZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hp
bGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBudWxsLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRnZXRCeVRhZzog
e1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG5cdFx0
XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeVRhZztcblx0
XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51bGw7XG5cdFx0XHRmb3IgKGkg
PSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0Jz4nOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0
IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENoaWxkKSkgZG8ge1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2li
bGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ1xuXHRcdHdoaWxlICgobm9kZSA9
IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0XHRcdHRoaXMu
cHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRc
dGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBjaGlsZFxuXHRcdG5vZGUgPSBu
b2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUg
PT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0J34nOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBz
aWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKXtcblx0XHRcdGlm
IChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVpZCA9IHRoaXMuZ2V0
VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBicmVhaztcblx0XHRc
dHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0Jysr
JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7
IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZ1xuXHRcdHRoaXNbJ2NvbWJpbmF0
b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRc
dHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5ncyBhbmQgcHJldmlvdXMg
c2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiF+J10obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyEnOiBm
dW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8g
YWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUu
cGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1c2gobm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyE+Jzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xu
XHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyErJzogZnVuY3Rpb24o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHByZXZpb3Vz
IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIGlmIChu
b2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5c
dCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUubGFzdENoaWxkO1xuXHRcdGlmIChu
b2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1snY29t
YmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ3Ncblx0XHR3aGlsZSAo
KG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUg
IT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0
XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRVbmlxdWVz
W3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59O1xuXG5mb3IgKHZhciBjIGluIGNv
bWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10gPSBjb21iaW5hdG9yc1tjXTtcblxu
dmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdlbXB0eSc6
IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRy
ZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAxKSAmJiAhKG5vZGUuaW5uZXJUZXh0
IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtcblx0fSxcblxuXHQnbm90JzogZnVu
Y3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICF0aGlzLm1hdGNoTm9kZShub2Rl
LCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMnOiBmdW5jdGlvbihub2RlLCB0ZXh0
KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycp
LmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmlyc3QtY2hpbGQnOiBmdW5jdGlvbihu
b2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIGlmIChub2Rl
Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxu
XHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUu
bmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0
cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxp
bmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIG5leHQg
PSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBpZiAobmV4dC5u
b2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0
Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRoLWNoaWxkJzogbG9jYWwuY3JlYXRl
TlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USCcpLFxuXG5cdCdu
dGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZp
b3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250aC1vZi10eXBlJzogbG9jYWwuY3Jl
YXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USFR5cGUnLCB0
cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnbGFz
dENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBlTGFzdCcsIHRydWUpLFxuXG5c
dCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRv
Om50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkpO1xuXHR9LFxuXG5cdCdldmVuJzog
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2Rl
LCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRo
aXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpO1xuXHR9LFxuXG5cdC8qPC9udGgt
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1lID0g
bm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykp
IGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJu
IHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZh
ciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0
U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5c
dFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUp
e1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdo
aWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZU5hbWUgPT0g
bm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5cdFx0d2hpbGUg
KChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVOYW1lID09IG5vZGVOYW1l
KSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Lyo8L29mLXR5cGUt
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBwc2V1ZG9zXG5cblx0J2VuYWJsZWQn
OiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUuZGlzYWJsZWQ7XG5cdH0sXG5cblx0
J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuZGlzYWJsZWQ7XG5c
dH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5jaGVj
a2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2ZvY3VzJzogZnVuY3Rpb24obm9kZSl7
XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5kb2N1bWVudC5hY3RpdmVF
bGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50eXBlIHx8IHRoaXMuaGFzQXR0
cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxuXHQncm9vdCc6IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290KTtcblx0fSxcblxuXHQnc2VsZWN0
ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5zZWxlY3RlZDtcblx0fVxuXG5c
dC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3IgKHZhciBwIGluIHBzZXVkb3MpIGxv
Y2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxuLy8gYXR0cmlidXRlcyBtZXRob2Rz
XG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0cmlidXRlR2V0dGVycyA9IHtcblxu
XHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdodG1sRm9yJyBpbiB0aGlzKSA/IHRo
aXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3InKTtcblx0fSxcblxuXHQnaHJlZic6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4gdGhpcykgPyB0aGlzLmdldEF0dHJp
YnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblx0fSxcblxuXHQn
c3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5zdHlsZSkgPyB0aGlzLnN0eWxl
LmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblx0fSxcblxuXHQndGFiaW5k
ZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1
dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1
dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0s
XG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgn
dHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRy
aWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdtYXhMZW5ndGgnKTtcblx0XHRyZXR1
cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0cmlidXRl
Tm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5cbmF0dHJpYnV0ZUdldHRlcnMuTUFY
TEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGggPSBhdHRyaWJ1dGVHZXR0ZXJzLm1h
eGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0gbG9jYWwuU2xpY2sgPSAodGhpcy5T
bGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4xLjcnO1xuXG4vLyBTbGljayBmaW5k
ZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5k
KXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpO1xu
fTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24pe1xuXHRyZXR1
cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIG51bGwsIHRydWUpO1xufTtcblxu
Ly8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGljay5jb250YWlucyA9IGZ1bmN0aW9u
KGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KGNvbnRhaW5lcik7XG5cdHJl
dHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpO1xufTtcblxuLy8gU2xpY2sgYXR0
cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbihub2RlLCBuYW1l
KXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5nZXRBdHRyaWJ1
dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRyaWJ1dGUgPSBmdW5jdGlvbihub2Rl
LCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5oYXNB
dHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGljayBtYXRjaGVyXG5cblNsaWNrLm1h
dGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAoIShub2RlICYmIHNlbGVjdG9y
KSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBub2RlKSBy
ZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5t
YXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8gU2xpY2sgYXR0cmlidXRlIGFjY2Vz
c29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtc
blx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuO1xuXHRyZXR1cm4gdGhpcztcbn07
XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpe1xuXHRyZXR1
cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07XG5cbi8vIFNsaWNrIHBzZXVkbyBh
Y2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxv
Y2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xuXHRcdHJl
dHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIHRoaXM7XG59O1xu
XG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1lKXtcblx0dmFyIHBzZXVkbyA9IGxv
Y2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRvKSByZXR1cm4gZnVuY3Rpb24oYXJn
dW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBhcmd1bWVudCk7XG5cdH07XG5c
dHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJpZGVzIGFjY2Vzc29yXG5cblNsaWNr
Lm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5cdGxvY2FsLm92ZXJyaWRlKHJlZ2V4
cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmlzWE1MID0gbG9jYWwuaXNYTUw7
XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiBsb2NhbC5nZXRVSURI
VE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNrID0gU2xpY2s7XG5c
bn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1bmRlZmluZWQnKSA/
IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVt
ZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGl0ZW1zIGluIE1v
b1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0aGUgZG9sbGFycyBmdW5jdGlv
biwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGltZS1zYXZlciBtZXRob2RzIHRv
IGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRzLlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgU3Ry
aW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNrLlBhcnNlciwgU2xpY2suRmluZGVy
XVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAkLCAkJCwgSUZyYW1lLCBTZWxlY3Rv
cnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlzLkVsZW1lbnQgPSBmdW5jdGlvbih0
YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxlbWVudC5Db25zdHJ1Y3RvcnNbdGFn
XTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0b3IocHJvcHMpO1xuXHRpZiAo
dHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3VtZW50LmlkKHRhZykuc2V0KHByb3Bz
KTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5cdGlmICghKC9eW1xcdy1dKyQvKS50
ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0YWcpLmV4cHJlc3Npb25z
WzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcqJykgPyAnZGl2JyA6IHBhcnNlZC50
YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9PSBudWxsKSBwcm9wcy5pZCA9IHBh
cnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFyc2VkLmF0dHJpYnV0ZXM7XG5cdFx0
aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAwLCBsID0gYXR0cmlidXRlcy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJpYnV0ZXNbaV07XG5cdFx0XHRpZiAo
cHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoYXR0ci52YWx1
ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBwcm9wc1thdHRyLmtleV0gPSBhdHRy
LnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUgJiYgIWF0dHIub3BlcmF0b3IpIHBy
b3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnNlZC5jbGFzc0xpc3Qg
JiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNzJ10gPSBwYXJzZWQuY2xhc3NM
aXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KHRhZywg
cHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wcm90b3R5
cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQvLyBJRTggYW5kIElFOSByZXF1aXJl
IHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUuX2ZpcmVFdmVudCA9IChmdW5jdGlv
bihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRy
ZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZlbnQpO1xuXHRcdH07XG5cdH0pKEVs
ZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5ldyBUeXBlKCdFbGVtZW50JywgRWxl
bWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoQXJyYXkucHJvdG90eXBlW25hbWVd
KSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpbbmFtZV0gPSBmdW5jdGlvbigpe1xu
XHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMsIGVsZW1lbnRzID0gdHJ1ZTtc
blx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVzdWx0c1tpXSA9IGVsZW1lbnRbbmFt
ZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVtZW50cyA9IChlbGVtZW50cyAmJiB0
eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGVsZW1lbnRz
KSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7XG5cdH07XG5cblx0RWxlbWVudHMu
aW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50
LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3RvdHlwZSA9IHtcblx0XHQnJGNvbnN0
cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1bmN0aW9uLmNvbnZlcnQoJ2VsZW1l
bnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRo
b2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0aG9kO1xuXHR9KTtcbn1cblxu
RWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZhciBJRnJhbWUgPSBuZXcgVHlwZSgn
SUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRz
LCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxcblx0XHRpZnJhbWU6IGZ1bmN0aW9u
KG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtcblx0XHR9XG5cdH0pO1xuXG5cdHZh
ciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBpZnJhbWU7XG5cdGlmIChwYXJhbXMu
aWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZyYW1lKTtcblx0dmFyIG9ubG9h
ZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5cdGRlbGV0ZSBwcm9wcy5vbmxvYWQ7
XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwgcHJvcHMubmFtZSwgaWZyYW1l
ID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1lXycgKyBTdHJpbmcudW5pcXVl
SUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVudChpZnJhbWUgfHwgJ2lmcmFtZScs
IHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24oKXtcblx0XHRvbmxvYWQuY2FsbChp
ZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYgKHdpbmRvdy5mcmFtZXNbcHJvcHMu
aWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQp
O1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVtZW50cyA9IHRoaXMuRWxlbWVudHMg
PSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGgpe1xuXHRcdHZh
ciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IG5vZGUgPSBub2Rlc1tp
KytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9kZSk7XG5cdFx0XHRpZiAoIXVu
aXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHRcdHRoaXMu
cHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkVsZW1lbnRzLnByb3RvdHlw
ZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0gQXJyYXk7XG5cbm5ldyBUeXBlKCdF
bGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5cdGZpbHRlcjogZnVuY3Rpb24oZmls
dGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJuIHRoaXM7XG5cdFx0cmV0dXJuIG5l
dyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVPZihmaWx0ZXIpID09ICdzdHJpbmcn
KSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0ubWF0Y2goZmlsdGVyKTtcblx0
XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHB1c2g6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHRcdGZvciAodmFyIGkgPSAwLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGRvY3Vt
ZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgdGhpc1tsZW5ndGgrK10gPSBp
dGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoID0gbGVuZ3RoKTtcblx0fS5wcm90
ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgaXRlbXMgPSBbXTtcblx0
XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0aWYgKGl0ZW0p
IGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUudW5z
aGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGNvbmNhdDogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxlbWVudHModGhpcyk7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKFR5cGUuaXNFbnVtZXJhYmxlKGl0
ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0XHRlbHNlIG5ld0VsZW1lbnRzLnB1
c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVtZW50cztcblx0fS5wcm90ZWN0KCks
XG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtcblx0XHRmb3IgKHZhciBpID0gMCwg
bCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLnB1c2goY29sbGVjdGlvbltp
XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGVtcHR5OiBmdW5jdGlv
bigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbLS10aGlzLmxlbmd0aF07
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5cbn0pO1xuXG5cblxuKGZ1bmN0aW9u
KCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UsIG9i
amVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtcblxuc3BsaWNlLmNhbGwob2JqZWN0
LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVudHMuaW1wbGVtZW50KCdzcGxpY2Un
LCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdHZhciByZXN1bHQg
PSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0d2hpbGUgKGxlbmd0aCA+PSB0aGlz
Lmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRyZXR1cm4gcmVzdWx0O1xufS5wcm90
ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0aW9uKG1ldGhvZCwgbmFtZSl7XG5c
dEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xufSk7XG5cbkFycmF5Lm1pcnJvcihF
bGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MO1xu
dHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xufSBjYXRjaCAoZSl7fVxuXG52YXIg
ZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJldHVybiAoJycgKyBodG1sKS5yZXBs
YWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbn07XG4vKjwvbHRJ
RTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRNTCBvZiBz
dHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7XG5cdHZh
ciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcgPSBmYWxz
ZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdpbjogMHB4
O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0
dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5c
blx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdFx0aWYgKHByb3BzKXtcblx0
XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3BzLmRlZmF1bHRDaGVja2VkID0gcHJv
cHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9PSAnY2hlY2tib3gnIHx8IHByb3Bz
LnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0gbnVsbCkgcHJvcHMudmFsdWUgPSAn
b24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMgdGhlIHR5cGUgdG8gYmUgc2V0IGJl
Zm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1lbnRcblx0XHRcdGlmICghY2FuQ2hh
bmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0XHRcdFx0dmFyIHN0eWxlRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cdFx0XHRcdHN0eWxlRWxlbWVu
dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0XHRcdFx0aWYgKHByb3BzLnR5
cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZChzdHlsZUVsZW1l
bnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdC8qPGx0
SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBlIHByb3BlcnRpZXMgaW4gSUUg
PCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MKXtcblx0XHRcdFx0dGFnID0g
JzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkgdGFnICs9ICcgbmFtZT1cIicgKyBl
c2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkg
dGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMudHlwZSkgKyAnXCInO1xuXHRc
dFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMubmFtZTtcblx0XHRcdFx0ZGVs
ZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTg+Ki9cblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRhZykpLnNldChwcm9wcyk7XG5cdH1c
blxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5TbGljay51aWRPZih3aW5kb3cpO1xu
U2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld1Rl
eHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVUZXh0Tm9kZSh0
ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMud2lu
ZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxuXHRcdHZhciB0eXBlcyA9IHtcblxu
XHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0XHRpZCA9IFNs
aWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpO1xuXHRc
dFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQsIG5vY2FzaCkgOiBudWxsO1xuXHRc
dFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWwsIG5vY2FzaCl7XG5cdFx0XHRcdFNs
aWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2ggJiYgIWVsLiRmYW1pbHkgJiYgISgv
Xig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkpe1xuXHRcdFx0XHRcdHZhciBm
aXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0Ly8gd3JhcHBpbmcgbmVlZGVkIGlu
IElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9maXJlRXZlbnQgPSBmdW5jdGlvbih0
eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyZUV2ZW50KHR5cGUsIGV2ZW50KTtc
blx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBlbmQoZWwsIEVsZW1lbnQuUHJvdG90
eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHR9LFxuXG5cdFx0XHRv
YmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0XHRpZiAob2JqLnRvRWxl
bWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxlbWVudChkb2MpLCBub2Nhc2gpO1xu
XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHR0eXBlcy50ZXh0
bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cgPSB0eXBlcy5kb2N1bWVudCA9
IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5cdFx0fTtcblxuXHRcdHJldHVy
biBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0aWYgKGVsICYmIGVsLiRmYW1pbHkg
JiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVPZihl
bCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5cGVzW3R5cGVdKGVsLCBub2Nhc2gs
IGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5cblx0fSkoKVxuXG59KTtcblxuaWYg
KHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQnLCBmdW5jdGlvbihlbCwgbmMp
e1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlzLmRvY3VtZW50KTtcbn0pO1xuXG5X
aW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdp
bXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lvbiwgbmV3IEVsZW1lbnRzKTtcblx0
fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9uKSk7XG5cdH1cblxufSk7XG5cbnZh
ciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHJldHVybiBTbGlj
ay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5pZiAoIWRvY3VtZW50LmNvbnRhaW5z
KSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYgKCFkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuXG5cblxu
Ly8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5hdG9yID0gZnVuY3Rpb24oZXhwcmVz
c2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lvbikgcmV0dXJuIGNvbWJpbmF0b3I7
XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5wYXJzZShleHByZXNzaW9uKSk7
XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztcblx0Zm9yICh2
YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0XHRleHByZXNzaW9uc1tpXVswXS5j
b21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbk9i
amVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRnZXRQcmV2aW91czogJyF+Jyxcblx0
Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1l
bnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtc
blx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXRBbGxOZXh0OiAnficsXG5cdGdl
dEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczogJ35+Jyxcblx0Z2V0Q2hpbGRyZW46
ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlvbihjb21iaW5hdG9yLCBtZXRob2Qp
e1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29t
YmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0Z2V0Rmly
c3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5z
ZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKVswXSk7XG5cdH0s
XG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50
LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+Jykp
LmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7XG5cdH0sXG5cblx0Z2V0RWxl
bWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmlu
ZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxcVykvZywgJ1xcXFwkMScpKSk7XG5c
dH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiAhZXhwcmVz
c2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTtcblx0fVxuXG59KTtcblxuXG5c
bmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCQnLCBmdW5jdGlvbihz
ZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdGlmICh0eXBlb2Yg
c2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFyY2godGhpcy5kb2N1bWVudCwg
c2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBpZiAoVHlwZS5pc0VudW1lcmFibGUo
c2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVjdG9yKTtcblx0fVxuXHRyZXR1cm4g
bmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8gSW5zZXJ0ZXJzXG5cbnZhciBpbnNl
cnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHR2
YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBhcmVudC5p
bnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9u
KGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7
XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50Lm5l
eHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQp
e1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7XG5cdH0sXG5cblx0dG9wOiBmdW5j
dGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50Lmluc2VydEJlZm9yZShjb250ZXh0
LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5cbmluc2VydGVycy5pbnNpZGUgPSBp
bnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVydHkgLyBzZXRQcm9wZXJ0eVxuXG52
YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVycyA9IHt9O1xuXG4vLyBwcm9w
ZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJheS5mb3JFYWNoKFtcblx0J3R5cGUn
LCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tleScsICdjZWxsUGFkZGluZycsICdj
ZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9yZGVyJywgJ3Jvd1NwYW4nLCAndGFi
SW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRwcm9wZXJ0aWVzW3By
b3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59KTtcblxucHJvcGVydGllcy5odG1s
ID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJUZXh0JzogJ3RleHRDb250ZW50
JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocmVhbCwga2V5KXtcblx0
cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVty
ZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xufSk7XG5cbi8qPGx0SUU5PiovXG5w
cm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9k
ZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykgbm9kZS5zZXQo
J2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3BlcnRpZXMudGV4dF0gPSB2YWx1ZTtc
blx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxucHJvcGVydHlHZXR0ZXJzLnRleHQg
PSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVy
biAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9kZS5pbm5lckhUTUwgOiBnZXR0ZXIo
bm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7XG4vKjwvbHRJRTk+Ki9cblxu
Ly8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29tcGFjdCcsICdub3dyYXAnLCAnaXNt
YXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQnLFxuXHQnZGlzYWJsZWQnLCAncmVh
ZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9yZXNpemUnLFxuXHQnZGVmZXInLCAn
ZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xzJywgJ2F1dG9wbGF5Jyxcblx0
J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFycmF5LmZvckVhY2goYm9vbHMsIGZ1
bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRvTG93ZXJDYXNlKCk7XG5cdGJvb2xl
YW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihu
b2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFsdWU7XG5cdH07XG5cdHByb3BlcnR5
R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gISFub2RlW2Jvb2xd
O1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxuT2JqZWN0LmFwcGVuZChwcm9wZXJ0
eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdj
bGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgPSAodmFsdWUgfHwgJycpIDogbm9k
ZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdmb3InOiBmdW5jdGlv
bihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBub2RlKSA/IG5vZGUuaHRtbEZvciA9
IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVlKTtcblx0fSxcblxuXHQnc3R5
bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5vZGUuc3R5bGUpID8gbm9kZS5zdHls
ZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB2YWx1ZSk7XG5c
dH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGUudmFsdWUg
PSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9XG5cbn0pO1xuXG5wcm9wZXJ0eUdl
dHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuICgnY2xhc3NOYW1lJyBp
biBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBub2RlLmdldEF0dHJpYnV0ZSgnY2xh
c3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyByZWFkb25seSBhbmQgdGhyb3dzXG50
cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUpe31cbmlmIChlbC50eXBlICE9ICdi
dXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0
bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59O1xuZWwgPSBudWxsO1xuLyogPC93
ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3OSAtIElFOCBDYW5u
b3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0eWxlSFRNTCA9IChm
dW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSxc
blx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRNTCA9ICcjanVzdFRl
c2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJIVE1MO1xuXHR9IGNh
dGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4qL1xuXG52YXIgaW5w
dXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2b2xhdGlsZUlucHV0VmFsdWUs
IGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5wdXQudmFsdWUgPSAndCc7XG5pbnB1
dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZSAhPSAn
dCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxpZCBBcmd1bWVudFwiIHdoZW4gdHJ5
aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtcblx0aW5wdXQudmFsdWUgPSAnJztc
blx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5wdXRTdXBwb3J0ID0gaW5wdXQudHlw
ZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1dCA9IG51bGw7XG5cbmlmICh2b2xh
dGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0KSBwcm9wZXJ0eVNldHRlcnMudHlw
ZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xuXHRcdHZhciB2YWx1ZSA9IG5vZGUu
dmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRub2RlLnZhbHVlID0gdmFsdWU7XG5c
dH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyogZ2V0UHJvcGVydHksIHNldFByb3Bl
cnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRlc0dldEF0dHJpYnV0ZSA9IChmdW5j
dGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0ZSc7XG5cdHJldHVybiAoZGl2Lmdl
dEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpO1xufSkoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcgPSAoZnVuY3Rpb24odGVzdCl7XG5c
dHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5hbWU9XCJzaG91bGRfZml4XCIgdmFs
dWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0cmV0dXJuIHRlc3QuY2xvbmVOb2Rl
KHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0gMTtcbn0pKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICovXG5cbnZhciBoYXNDbGFzc0xpc3Qg
PSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblxudmFyIGNsYXNz
ZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xhc3NOYW1lcyA9IChjbGFzc05hbWUg
fHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9IHt9O1xuXHRyZXR1cm4gY2xhc3NO
YW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRpZiAoY2xhc3NOYW1lICE9PSAn
JyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5pcXVlc1tjbGFzc05hbWVdID0gY2xh
c3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUp
e1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xuXG52YXIgcmVtb3ZlRnJvbUNsYXNz
TGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5yZW1vdmUobmFtZSk7XG59
O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUs
IHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlTZXR0ZXJzW25hbWUudG9Mb3dlckNh
c2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0ZXIodGhpcywgdmFsdWUpO1xuXHRc
dH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHR2YXIgYXR0cmlidXRlQWxsb3dM
aXN0O1xuXHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBhdHRyaWJ1dGVBbGxvd0xpc3Qg
PSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywge30pO1xuXHRcdFx0LyogPC9s
dElFOT4gKi9cblxuXHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHR0aGlzLnJlbW92
ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0XHRpZiAocG9s
bHV0ZXNHZXRBdHRyaWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV07XG5cdFx0
XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJp
YnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0XHRp
ZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSA9IHRydWU7
XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpe1xuXHRcdGZv
ciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNldFByb3BlcnR5KGF0dHJpYnV0
ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRn
ZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGdldHRlciA9IHByb3BlcnR5R2V0
dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChnZXR0ZXIpIHJldHVybiBnZXR0ZXIo
dGhpcyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSl7
XG5cdFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZShuYW1lKSwgYXR0cmlidXRl
QWxsb3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFsbG93TGlzdCcsIHt9KTtcblx0
XHRcdGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAoYXR0ci5leHBhbmRvICYmICFh
dHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0pe1xuXHRcdFx0XHR2YXIgb3V0ZXIgPSB0aGlzLm91dGVy
SFRNTDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3BlbmluZyB0YWcgYW5kIGZpbmQgbWVu
dGlvbiBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAob3V0ZXIuc3Vic3RyKDAsIG91dGVy
LnNlYXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkvKSkuaW5kZXhPZihuYW1lKSA8IDAp
IHJldHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0gPSB0cnVlO1xu
XHRcdFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdHZhciByZXN1bHQgPSBTbGlj
ay5nZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0dXJuICghcmVzdWx0ICYmICFTbGlj
ay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJlc3VsdDtcblx0fSxcblxuXHRn
ZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuY29udmVydChh
cmd1bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlzLmdldFByb3BlcnR5LCB0aGlzKS5h
c3NvY2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUp
e1xuXHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUsIG51bGwpO1xuXHR9LFxuXG5cdHJl
bW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXkuZWFjaChhcmd1bWVudHMsIHRo
aXMucmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNl
dDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJv
cGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVydHkuc2V0KSA/IHByb3BlcnR5
LnNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJvcGVydHkocHJvcCwgdmFsdWUpO1xu
XHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5jdGlvbihwcm9wKXtcblx0XHR2YXIg
cHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0cmV0dXJuIChwcm9wZXJ0
eSAmJiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFwcGx5KHRoaXMpIDogdGhpcy5nZXRQ
cm9wZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigpLFxuXG5cdGVyYXNlOiBmdW5jdGlv
bihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5c
dFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3BlcnR5LmVyYXNlLmFwcGx5KHRo
aXMpIDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRy
ZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcblx0fSA6IGZ1bmN0aW9u
KGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhpcy5jbGFzc05hbWUpLmNvbnRhaW5z
KGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9u
KGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goYWRkVG9DbGFzc0xp
c3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NOYW1lICsgJyAnICsgdGhpcy5jbGFz
c05hbWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFz
czogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRjbGFzc2VzKGNsYXNz
TmFtZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dmFyIGNsYXNzTmFtZXMgPSBjbGFz
c2VzKHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChjbGFz
c05hbWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFt
ZXMuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBm
dW5jdGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAoZm9yY2UgPT0gbnVsbCkgZm9yY2Ug
PSAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJldHVybiAoZm9yY2UpID8gdGhpcy5h
ZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhjbGFzc05hbWUpO1xuXHR9LFxu
XG5cdGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJlbnQgPSB0aGlzLCBmcmFnbWVudCwg
ZWxlbWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyksIGxlbmd0aCA9IGVsZW1lbnRzLmxl
bmd0aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJhZ21lbnQgPSBkb2N1bWVudC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudHNbaV0sIHRy
dWUpO1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblx0
XHR9XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4dDogZnVuY3Rpb24odGV4dCwgd2hl
cmUpe1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1bWVudCgpLm5ld1RleHROb2Rl
KHRleHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0
XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3VtZW50LmlkKGVsLCB0cnVlKSwgdGhp
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5qZWN0OiBmdW5jdGlvbihlbCwgd2hl
cmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10odGhpcywgZG9jdW1lbnQuaWQo
ZWwsIHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXBsYWNlczogZnVuY3Rp
b24oZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdGVsLnBhcmVudE5v
ZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3
cmFwczogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9IGRvY3VtZW50LmlkKGVsLCB0cnVl
KTtcblx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihlbCwgd2hlcmUpO1xuXHR9LFxu
XG5cdGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc2VsZWN0ZWRJbmRleDsgLy8g
U2FmYXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5jb252ZXJ0KHRoaXMu
b3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5cdFx0XHRyZXR1cm4gb3B0aW9uLnNl
bGVjdGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbigpe1xu
XHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMuZ2V0RWxlbWVudHMoJ2lucHV0LCBz
ZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7XG5cdFx0XHR2YXIgdHlwZSA9IGVs
LnR5cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlzYWJsZWQgfHwgdHlwZSA9PSAnc3Vi
bWl0JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAnZmlsZScgfHwgdHlwZSA9PSAnaW1h
Z2UnKSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChlbC5nZXQoJ3RhZycpID09ICdzZWxl
Y3QnKSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKG9wdCl7XG5cdFx0XHRcdC8vIElF
XG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgndmFsdWUnKTtcblx0XHRcdH0p
IDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSAmJiAhZWwuY2hlY2tl
ZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0XHRBcnJheS5jb252ZXJ0KHZhbHVl
KS5lYWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsICE9ICd1bmRlZmlu
ZWQnKSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChlbC5uYW1lKSArICc9JyAr
IGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHJldHVy
biBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5cblxuLy8gYXBwZW5kSFRNTFxu
XG52YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6ICdiZWZvcmVCZWdpbicsXG5cdGFm
dGVyOiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVFbmQnLFxuXHR0b3A6ICdhZnRlckJl
Z2luJyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoJ2Fw
cGVuZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR0aGlzLmluc2VydEFkamFjZW50
SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddLCBodG1sKTtcblx0cmV0dXJu
IHRoaXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR2YXIgdGVtcCA9IG5ldyBFbGVt
ZW50KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxkcmVuID0gdGVtcC5jaGlsZE5vZGVz
LFxuXHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xuXG5cdGlmICghZnJhZ21lbnQpIHJl
dHVybiB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSl7XG5cdFx0ZnJhZ21lbnQgPSBk
b2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0ZnJhZ21lbnQuYXBwZW5kQ2hp
bGQoY2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGluc2VydGVyc1t3aGVyZSB8fCAnYm90
dG9tJ10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn0pO1xuXG52YXIgY29sbGVj
dGVkID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9IGZ1bmN0aW9uKHVpZCl7XG5cdHJl
dHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7fSkpO1xufTtcblxudmFyIGNs
ZWFuID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBpdGVtLnVuaXF1ZU51bWJlcjtcblx0
aWYgKGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2ZW50cygpO1xuXHRpZiAoaXRlbS5j
bGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdGlmICh1aWQgIT0gbnVs
bCl7XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRcdGRlbGV0ZSBzdG9yYWdlW3VpZF07
XG5cdH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9ybVByb3BzID0ge2lucHV0OiAnY2hl
Y2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2YWx1ZSd9O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKXtcblx0XHR2YXIgY2hpbGRyZW4g
PSBjbGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdEFycmF5LmVhY2go
Y2hpbGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bvc2UodGhpcyk7XG5cdFx0cmV0dXJu
IG51bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXkuY29udmVydCh0
aGlzLmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3NlKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5wYXJlbnRO
b2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKSA6IHRoaXM7XG5cdH0sXG5c
blx0Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQpe1xuXHRcdGNvbnRlbnRzID0gY29u
dGVudHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGNvbnRlbnRz
KSwgY2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxuXHRcdGlmIChjb250ZW50cyl7XG5c
dFx0XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
KicpKSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVydCh0aGlzLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSBjZS5sZW5ndGg7IGktLTspe1xu
XHRcdFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRlW2ldO1xuXHRcdFx0aWYgKCFrZWVw
aWQpIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRc
dGlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRcdG5vZGUuY2xlYXJBdHRyaWJ1dGVz
KCk7XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1lbnQpO1xuXHRcdFx0XHRub2Rl
LnJlbW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5cdFx0XHRcdGlmIChub2RlLm9wdGlv
bnMpe1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9ucywgZW8gPSBlbGVtZW50Lm9wdGlv
bnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0aDsgai0tOykgbm9bal0uc2VsZWN0
ZWQgPSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU5
PiovXG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNh
c2UoKV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3Byb3BdKSBub2RlW3Byb3BdID0gZWxl
bWVudFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmIChoYXNDbG9uZUJ1
Zyl7XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0Jyks
IHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0Jyk7XG5cdFx0XHRmb3IgKGkg
PSBjby5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9IHRvW2ldLm91dGVySFRNTDtcblx0
XHR9XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKGNsb25lKTtcblx0
fVxuXG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50
Jywge1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYgKHdpbmRv
dy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRcdFx0Y29sbGVj
dGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmFkZEV2
ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNb
Ml0pO1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7
XG5cdFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhpcy5yZW1vdmVFdmVudExpc3Rl
bmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxzZSB0aGlzLmRldGFjaEV2ZW50
KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmV0cmlldmU6
IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51
aWRPZih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRpZiAoZGZsdCAhPSBu
dWxsICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldID0gZGZsdDtcblx0
XHRyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7XG5cdH0sXG5cblx0c3RvcmU6IGZ1
bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlk
T2YodGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0dmFyIHN0
b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdGRlbGV0ZSBzdG9yYWdlW3Byb3Bl
cnR5XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLyo8bHRJRTk+Ki9cbmlmICh3
aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIGdj
ID0gZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xsZWN0ZWQsIGNsZWFuKTtcblx0XHRp
ZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFnZSgpO1xuXHRcdHdpbmRvdy5y
ZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xuXHR3aW5kb3cuYWRkTGlzdGVuZXIo
J3VubG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5FbGVtZW50LlByb3BlcnRpZXMgPSB7
fTtcblxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9u
KHN0eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHlsZTtcblx0fSxcblxuXHRnZXQ6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUuY3NzVGV4dDtcblx0fSxcblxuXHRl
cmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSAnJztcblx0fVxuXG59
O1xuXG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxufTtcblxuRWxlbWVu
dC5Qcm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihodG1sKXtcblx0XHRpZiAo
aHRtbCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBpZiAodHlwZU9mKGh0bWwpID09ICdh
cnJheScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0Lyo8bHRJRTk+Ki9cblx0XHRpZiAo
dGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwpIHRoaXMuc3R5bGVTaGVldC5j
c3NUZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4qL3RoaXMuaW5uZXJIVE1MID0gaHRt
bDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZXQoJ2h0bWwnLCAnJyk7
XG5cdH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVtZW50cyA9IHRydWUsIHN1cHBvcnRz
VGFibGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5uZXJIVE1MID0gdHJ1ZTtcblxuLyo8
bHRJRTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQgLSBodHRwOi8vamRiYXJ0bGV0dC5j
b20vaW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xu
dmFyIGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2PjwvbmF2Pic7XG5zdXBwb3J0c0hU
TUw1RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID09IDEpO1xuaWYgKCFzdXBwb3J0
c0hUTUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJyIGFydGljbGUgYXNpZGUgYXVkaW8g
Y2FudmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBo
Z3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNlY3Rpb24gc3VtbWFyeSB0aW1l
IHZpZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGlsZSAobC0tKSBmcmFnbWVudC5jcmVh
dGVFbGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtcbi8qPC9sdElFOT4qL1xuXG4vKjxJ
RT4qL1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24o
KXtcblx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcblx0dGFi
bGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7XG5cdHJldHVybiB0cnVlO1xufSk7
XG5cbi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpLCBo
dG1sID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBodG1sO1xuc3VwcG9ydHNUUklubmVy
SFRNTCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9IG51bGw7XG4vKjwvbHRGRjQ+Ki9c
blxuaWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFzdXBwb3J0c1RSSW5uZXJIVE1MIHx8
ICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1lbnQuUHJvcGVydGllcy5odG1sLnNl
dCA9IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5zbGF0aW9ucyA9IHtcblx0XHRcdHRh
YmxlOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0XHRcdHNlbGVjdDogWzEsICc8c2Vs
ZWN0PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBbMiwgJzx0YWJsZT48dGJvZHk+Jywg
JzwvdGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywgJzx0YWJsZT48dGJvZHk+PHRyPics
ICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5cblx0XHR0cmFuc2xhdGlvbnMudGhl
YWQgPSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlvbnMudGJvZHk7XG5cblx0XHRyZXR1
cm4gZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAodGhpcy5z
dHlsZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7XG5cdFx0XHQvKjwvbHRJRTk+
Ki9cblx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3RoaXMuZ2V0KCd0YWcnKV07XG5cdFx0
XHRpZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgd3JhcCA9IFswLCAnJywgJydd
O1xuXHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7XG5cblx0XHRc
dHZhciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRz
KSBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIuaW5uZXJIVE1M
ID0gW3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4oKS5qb2luKCcnKTtcblx0XHRcdHdo
aWxlIChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RDaGlsZDtcblx0XHRcdHRoaXMuZW1w
dHkoKS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0XHRpZiAoIXN1cHBvcnRzSFRNTDVF
bGVtZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG5cdFx0XHR3cmFwcGVyID0g
bnVsbDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVydGllcy5odG1sLnNldCk7XG59XG4v
KjwvSUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRpb24+czwv
b3B0aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5maXJzdENoaWxkLnZhbHVlICE9ICdz
JykgRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5cdHNldDogZnVuY3Rpb24odmFsdWUp
e1xuXHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5cdFx0aWYgKHRhZyAhPSAnc2VsZWN0
JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFsdWUpO1xuXHRcdHZhciBvcHRp
b25zID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5cdFx0dmFsdWUgPSBTdHJpbmcodmFs
dWUpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0
XHR2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0YXR0ciA9IG9wdGlvbi5nZXRBdHRy
aWJ1dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25WYWx1ZSA9IChhdHRyICYmIGF0dHIu
c3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0XHRcdGlm
IChvcHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xu
XHRcdH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbiA9IHRoaXMs
IHRhZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYgKHRhZyAhPSAnc2VsZWN0JyAmJiB0
YWcgIT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3BlcnR5KCd2YWx1ZScpO1xuXG5cdFx0
aWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlvbi5nZXRTZWxlY3RlZCgpWzBd
KSkgcmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgn
dmFsdWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQpID8gb3B0aW9uLnZh
bHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07XG50ZXN0Rm9ybSA9IG51bGw7XG4v
KjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlByb3BlcnRpZXMuaWQgPSB7XG5cdHNl
dDogZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lk
JykudmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LmlkIHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuaWQgPSB0
aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAnJztcblx0fVxufTtcbi8qPC9JRT4q
L1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50XG5cbmRlc2NyaXB0aW9uOiBDb250
YWlucyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZlbnQgb2JqZWN0IGNyb3NzLWJyb3dz
ZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywg
RG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmplY3RdXG5cbnByb3ZpZGVzOiBF
dmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgX2tleXMgPSB7fTtcbnZhciBu
b3JtYWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgbm9ybWFsaXplZDtc
blx0aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1hbGl6ZWQgPSBldmVudC53aGVlbERl
bHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIwIDogZXZlbnQud2hlZWxEZWx0
YSAvIDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91bnQgPSBldmVudC5kZWx0YVkgfHwg
ZXZlbnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9IC0ocmF3QW1vdW50ICUgMyA9PSAw
ID8gcmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtcblx0fVxuXHRyZXR1cm4gbm9ybWFs
aXplZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9NRXZlbnQgPSBuZXcgVHlwZSgnRE9N
RXZlbnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYgKCF3aW4pIHdpbiA9IHdpbmRvdztc
blx0ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlmIChldmVudC4kZXh0ZW5kZWQpIHJl
dHVybiBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xuXHR0aGlzLiRleHRlbmRlZCA9IHRy
dWU7XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcblx0dGhpcy5jb250cm9sID0gZXZl
bnQuY3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRLZXk7XG5cdHRoaXMubWV0YSA9IGV2
ZW50Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBlID0gZXZlbnQudHlwZTtcblx0dmFy
IHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuXHR3aGlsZSAodGFy
Z2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtc
blx0dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpO1xuXG5cdGlmICh0eXBlLmluZGV4
T2YoJ2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhpcy5jb2RlID0gKGV2ZW50LndoaWNo
IHx8IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5zaGlmdCB8fCB0eXBlICE9ICdrZXlw
cmVzcycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0aWYgKHR5cGUgPT0gJ2tleWRvd24n
IHx8IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29kZSA+IDExMSAmJiBjb2RlIDwgMTI0
KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0XHRcdGVsc2UgaWYgKGNvZGUgPiA5
NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5Njtcblx0XHR9XG5cdFx0aWYgKHRo
aXMua2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKS50b0xv
d2VyQ2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNrJyB8fCB0eXBlID09ICdkYmxj
bGljaycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBl
ID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9mKCdtb3VzZScpID09IDApe1xuXHRc
dHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0gKCFkb2MuY29tcGF0TW9kZSB8fCBk
b2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcblx0
XHR0aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBldmVudC5w
YWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCxcblx0XHRcdHk6IChldmVudC5w
YWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSArIGRvYy5zY3JvbGxU
b3Bcblx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRcdFx0eDogKGV2ZW50LnBhZ2VYICE9
IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQgOiBldmVudC5jbGllbnRYLFxu
XHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgLSB3aW4ucGFnZVlP
ZmZzZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRpZiAodHlwZSA9PSAnRE9NTW91c2VT
Y3JvbGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdtb3VzZXdoZWVsJykgdGhpcy53
aGVlbCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xuXHRcdHRoaXMucmlnaHRDbGljayA9
IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAyKTtcblx0XHRpZiAodHlwZSA9
PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcgfHwgdHlwZSA9PSAnbW91c2VlbnRl
cicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0dmFyIG92ZXJUYXJnZXQgPSB0eXBl
ID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInO1xuXHRcdFx0dmFyIHJlbGF0
ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50WyhvdmVyVGFyZ2V0ID8gJ2Zyb20nIDog
J3RvJykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJlbGF0ZWQgJiYgcmVsYXRlZC5ub2Rl
VHlwZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnROb2RlO1xuXHRcdFx0dGhpcy5yZWxh
dGVkVGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5
cGUuaW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5kZXhPZignZ2VzdHVyZScpID09IDAp
e1xuXHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtcblx0XHR0aGlzLnNjYWxlID0g
ZXZlbnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVzID0gZXZlbnQudGFyZ2V0VG91Y2hl
cztcblx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG5cdFx0
dmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3VjaGVzO1xuXHRcdGlmICh0b3Vj
aGVzICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNoID0gdG91Y2hlc1swXTtcblx0XHRc
dHRoaXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91Y2gucGFnZVl9O1xuXHRcdFx0dGhp
cy5jbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2guY2xpZW50WX07XG5cdFx0fVxu
XHR9XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQgPSB7fTtcblx0aWYgKCF0aGlz
LnBhZ2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2ZW50LmltcGxlbWVudCh7XG5cblx0
c3RvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5wcmV2ZW50RGVmYXVsdCgpLnN0b3BQ
cm9wYWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKXtcblx0
XHRpZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtc
blx0XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5ID0gZnVuY3Rpb24oY29kZSwga2V5
KXtcblx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRE9NRXZlbnQu
ZGVmaW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVybG9hZFNldHRlcih0cnVlKTtcblxu
RE9NRXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcsICc0MCc6ICdkb3duJywgJzM3Jzog
J2xlZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNjJywgJzMyJzogJ3NwYWNlJywgJzgn
OiAnYmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2JzogJ2RlbGV0ZScsICcxMyc6ICdlbnRl
cidcbn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5FdmVu
dFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRob2RzIGZvciBkZWFsaW5nIHdp
dGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3VzZWVudGVyIGFuZCBtb3VzZWxl
YXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNzYXJ5LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFdmVudF1cblxucHJvdmlkZXM6
IEVsZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuRWxlbWVudC5Qcm9w
ZXJ0aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdHRoaXMuYWRkRXZlbnRz
KGV2ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1w
bGVtZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dmFyIGV2
ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtcblx0XHRpZiAoIWV2ZW50c1t0eXBl
XSkgZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6IFtdfTtcblx0XHRpZiAoZXZlbnRz
W3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhpcztcblx0XHRldmVudHNbdHlwZV0u
a2V5cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0eXBlLFxuXHRcdFx0Y3VzdG9tID0g
RWxlbWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRpb24gPSBmbixcblx0XHRcdHNlbGYg
PSB0aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vbkFkZCkgY3VzdG9t
Lm9uQWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1c3RvbS5jb25kaXRpb24p
e1xuXHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdFx0aWYgKGN1
c3RvbS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlwZSkpIHJldHVybiBmbi5jYWxsKHRo
aXMsIGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH1c
blx0XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBGdW5jdGlvbi5jb252ZXJ0KGN1c3Rv
bS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHR2YXIgZGVmbiA9IGZ1bmN0aW9u
KCl7XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0XHR9O1xuXHRcdHZhciBuYXRpdmVF
dmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTtcblx0XHRpZiAobmF0aXZlRXZl
bnQpe1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xuXHRcdFx0XHRkZWZuID0gZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERPTUV2ZW50KGV2ZW50LCBzZWxmLmdl
dFdpbmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9uLmNhbGwoc2VsZiwgZXZlbnQpID09
PSBmYWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5h
ZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJdKTtcblx0XHR9XG5cdFx0ZXZl
bnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMu
cmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJl
dHVybiB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuXHRcdHZhciBpbmRleCA9
IGxpc3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5kZXggPT0gLTEpIHJldHVybiB0aGlz
O1xuXHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC5r
ZXlzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdHZhciBjdXN0
b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAoY3VzdG9tKXtcblx0XHRcdGlmIChj
dXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRoaXMsIGZuLCB0eXBlKTtcblx0
XHRcdGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2Up
LmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiAoRWxlbWVudC5OYXRpdmVFdmVu
dHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2YWx1ZSwgYXJndW1lbnRzWzJd
KSA6IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZv
ciAodmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudChldmVudCwgZXZlbnRzW2V2ZW50
XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihl
dmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0
Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2
ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0dmFyIGF0dGFjaGVk
ID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFhdHRhY2hlZCkgcmV0dXJuIHRo
aXM7XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGF0dGFjaGVkKSB0aGlz
LnJlbW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxpbWluYXRlKCdldmVudHMnKTtcblx0
XHR9IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRcdFx0YXR0YWNoZWRbZXZlbnRzXS5r
ZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50KGV2ZW50cywg
Zm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUgYXR0YWNoZWRbZXZlbnRzXTtcblx0
XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBl
LCBhcmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycp
O1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRcdGFy
Z3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChm
dW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdz
KTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6IGZ1bmN0aW9uKGZyb20sIHR5cGUp
e1xuXHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0XHR2YXIgZXZlbnRzID0gZnJvbS5y
ZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGlm
ICghdHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUgaW4gZXZlbnRzKSB0aGlzLmNsb25l
RXZlbnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNlIGlmIChldmVudHNbdHlwZV0pe1xu
XHRcdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMu
YWRkRXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0
aGlzO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50cyA9IHtcblx0Y2xpY2s6IDIs
IGRibGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIsIGNvbnRleHRtZW51OiAyLCAv
L21vdXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hlZWw6IDIsIERPTU1vdXNlU2Nyb2xs
OiAyLCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwgbW91c2VvdXQ6IDIsIG1vdXNlbW92
ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9tb3VzZSBtb3ZlbWVudFxuXHRr
ZXlkb3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8va2V5Ym9hcmRcblx0b3JpZW50YXRp
b25jaGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0OiAyLCB0b3VjaG1vdmU6IDIsIHRv
dWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hcblx0Z2VzdHVyZXN0YXJ0OiAyLCBn
ZXN0dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBnZXN0dXJlXG5cdGZvY3VzOiAyLCBi
bHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIsIHN1Ym1pdDogMiwgcGFzdGU6
IDIsIGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9hZDogMiwgdW5sb2FkOiAxLCBiZWZv
cmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29udGVudExvYWRlZDogMSwgcmVh
ZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNoYW5nZTogMSwgcG9wc3RhdGU6IDIs
IHBhZ2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9yeVxuXHRlcnJvcjogMSwgYWJvcnQ6
IDEsIHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07XG5cbkVsZW1lbnQuRXZlbnRzID0g
e1xuXHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hlZWwnIGluIGRvY3VtZW50ID8gJ3do
ZWVsJyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8gJ21vdXNld2hlZWwnIDogJ0RPTU1v
dXNlU2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbihldmVudCl7XG5cdHZh
ciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0aWYgKHJlbGF0ZWQgPT0gbnVsbCkg
cmV0dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gKHJl
bGF0ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAneHVsJyAmJiB0eXBlT2YodGhpcykg
IT0gJ2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxhdGVkKSk7XG59O1xuXG5pZiAoJ29u
bW91c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtcblx0RWxlbWVudC5OYXRp
dmVFdmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlbGVhdmUgPSAy
O1xuXHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrO1xufSBlbHNlIHtcblx0RWxlbWVu
dC5FdmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25k
aXRpb246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVudHMubW91c2VsZWF2ZSA9IHtcblx0
XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogY2hlY2tcblx0fTtcbn1cblxuLyo8
bHRJRTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRFbGVtZW50Lk5hdGl2
ZUV2ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1lbnQuRXZlbnRzLmNoYW5nZSA9IHtc
blx0XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdFx0
XHRyZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQnICYmICh0eXBlID09ICdyYWRpbycg
fHwgdHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHljaGFuZ2UnIDogJ2NoYW5nZSc7XG5c
dFx0fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdHJldHVybiBldmVu
dC50eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQuZXZlbnQucHJvcGVydHlOYW1lID09
ICdjaGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5cbn0pKCk7XG5c
bi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uXG5cbmRlc2NyaXB0aW9uOiBFeHRl
bmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSB0aGUgZGVsZWdhdGUgbWV0
aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczog
W0VsZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGV2
ZW50TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcjtcblxuRWxlbWVu
dC5OYXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3Vzb3V0ID0g
MjtcblxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFy
Z2V0KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2VsZil7XG5cdFx0aWYgKG1hdGNo
KHRhcmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJnZXQsIGV2ZW50LCB0YXJnZXQpO1xu
XHRcdHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJlbnROb2RlKTtcblx0fVxufTtcblxu
dmFyIG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRc
dGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0bW91c2VsZWF2ZTog
e1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50
ZXJDaGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6ICdmb2N1cycgKyAoZXZlbnRMaXN0
ZW5lclN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fSxcblx0Ymx1
cjoge1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJ2JsdXInIDogJ2ZvY3Vzb3V0
Jyxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8qPGx0SUU5PiovXG52YXIgX2tleSA9
ICckZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9IGZ1bmN0aW9uKHR5cGUpe1xuXG5c
dHJldHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cblx0XHRyZW1vdmU6IGZ1bmN0aW9u
KHNlbGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUg
KyAnbGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAobGlzdCAmJiBsaXN0LmZvcm1zKSBm
b3IgKHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTspe1xuXHRcdFx0XHQvLyB0aGUgZm9y
bSBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29uJ3QgaGF2ZSB0aGVcblx0XHRcdFx0
Ly8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQgY2FzZSB0aGUgZXZlbnQgd2Fz
XG5cdFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRcdFx0aWYgKGxpc3QuZm9ybXNbaV0u
cmVtb3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQodHlwZSwgbGlzdC5mbnNbaV0p
O1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBmb3JtID0gKHRhcmdldC5nZXQoJ3Rh
ZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQuZ2V0UGFyZW50KCdmb3JtJyk7
XG5cdFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0dmFyIGxpc3RlbmVycyA9IHNlbGYu
cmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pLFxuXHRcdFx0XHRsaXN0ZW5l
ciA9IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZuczogW119LFxuXHRcdFx0XHRmb3Jt
cyA9IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5mbnM7XG5cblx0XHRcdGlmIChmb3Jt
cy5pbmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0XHRmb3Jtcy5wdXNoKGZvcm0pO1xu
XG5cdFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChzZWxm
LCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGZvcm0uYWRkRXZl
bnQodHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7XG5cblx0XHRcdGxpc3RlbmVyc1t1
aWRdID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVy
cycsIGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxudmFyIGlucHV0T2JzZXJ2ZXIgPSBm
dW5jdGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cdFx0bGlz
dGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0dmFy
IGV2ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50cyhl
dmVudHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlwZV0gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0
XHR9O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhldmVudHMpO1xuXHRcdH1cblx0fTtc
bn07XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVjdC5hcHBlbmQobWFwLCB7XG5c
dHN1Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0cmVzZXQ6IGZvcm1PYnNlcnZlcign
cmVzZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFuZ2UnKSxcblx0c2VsZWN0OiBp
bnB1dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIHByb3RvID0g
RWxlbWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJvdG8uYWRkRXZlbnQsXG5cdHJlbW92
ZUV2ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciByZWxheSA9IGZ1bmN0aW9uKG9sZCwg
bWV0aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZuLCB1c2VDYXB0dXJlKXtcblx0XHRp
ZiAodHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5
cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodHlwZSku
ZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5wc2V1ZG9zWzBdLmtleSAhPSAncmVs
YXknKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpO1xuXHRcdHZh
ciBuZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQucHNldWRvcy5zbGljZSgxKS5lYWNo
KGZ1bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9ICc6JyArIHBzZXVkby5rZXkgKyAo
cHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJyknIDogJycpO1xuXHRcdH0pO1xu
XHRcdG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gbWV0aG9kLmNhbGwodGhp
cywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZuKTtcblx0fTtcbn07XG5cbnZh
ciBkZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4p
e1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3Rv
cmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVkKSBmb3IgKHZhciBfdWlkIGluIHN0
b3JlZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09IGZuICYmIHN0b3JlZFtfdWlkXS5t
YXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dmFyIF90eXBlID0gdHlw
ZSwgX21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRc
dHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdl
dCl7XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0LCBfbWF0Y2gpO1xuXHRcdH07XG5c
blx0XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNbX3R5cGVdO1xuXHRcdGlmIChf
bWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxlbWVudEV2ZW50LmNvbmRpdGlvbil7
XG5cdFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRpb24gPSBfbWFwLmNvbmRpdGlvbiB8
fCBlbGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQs
IGV2ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFyZ2V0LCBldmVudCkgJiYgY29uZGl0
aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZh
ciBzZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlEKCk7XG5cdFx0dmFyIGRlbGVnYXRv
ciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7XG5cdFx0XHRpZiAoIXRh
cmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0
XHRcdGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdl
dCwgdWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7XG5cdFx0XHRpZiAoIXRh
cmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0
XHRcdGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7
XG5cdFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQgPSB7fTtcblx0XHRzdG9yZWRbdWlk
XSA9IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRmbjogX2ZuLFxuXHRcdFx0ZGVsZWdh
dG9yOiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkO1xuXHRc
dHJldHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0dXJl
KTtcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuLCBfdWlk
KXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0
b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9yZWQpIHJldHVybiB0aGlzO1xuXG5c
dFx0aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlwZSwgZGVsZWdhdG9yID0gc3RvcmVk
W191aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHRcdHR5cGUgPSBf
bWFwLmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5yZW1vdmUpIF9tYXAucmVtb3ZlKHRo
aXMsIF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlkXTtcblx0XHRcdHN0b3JhZ2VbX3R5
cGVdID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwg
ZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxuXHRcdHZhciBfX3VpZCwgcztcblx0
XHRpZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRd
O1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5mbiA9PSBmbikgcmV0dXJuIGRlbGVn
YXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgZm4sIF9fdWlkKTtcblx0
XHR9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07
XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxs
KHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxl
bWVudCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBkZWxlZ2F0aW9uLmFkZEV2ZW50
KSxcblx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50LCBkZWxlZ2F0aW9uLnJlbW92ZUV2
ZW50KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5TdHlsZVxuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3R5
bGVzIG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxucHJvdmlkZXM6IEVsZW1lbnQuU3R5
bGVcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGh0bWwgPSBkb2N1bWVudC5odG1s
LCBlbDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xkSUUsIHdoaWNoIGRvZXMgbm90IHJl
bW92ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxsXG5lbCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAncmVkJztcbmVsLnN0eWxlLmNvbG9y
ID0gbnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0gZWwuc3R5bGUuY29sb3IgPT0gJ3Jl
ZCc7XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0dXJucyBib3JkZXIqIHNob3J0aGFu
ZCBzdHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13aWR0aC1zdHlsZSBpbnN0ZWFkIG9m
IHdpZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcxcHggc29saWQgIzEyM2FiYyc7XG5l
bC5zdHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJuc0JvcmRlcnNJbldyb25nT3JkZXIg
PSBlbC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBudWxsO1xuLy88L2x0SUU5PlxuXG52
YXIgaGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93LmdldENvbXB1dGVkU3R5bGUsXG5cdHN1
cHBvcnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZS5i
b3JkZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlcyA9IHtzZXQ6
IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVzKHN0eWxlcyk7XG59fTtcblxudmFy
IGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51bGwpLFxuXHRoYXNGaWx0ZXIg
PSAoaHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJlQWxwaGEgPSAvYWxwaGFcXChvcGFj
aXR5PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJpbGl0eSA9IGZ1bmN0aW9uKGVsZW1l
bnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3BhY2l0eScsIG9wYWNpdHkpO1xuXHRl
bGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4gMCB8fCBvcGFjaXR5ID09IG51bGwg
PyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0SUU5PlxudmFyIHNldEZpbHRlciA9
IGZ1bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xuXHR2YXIgc3R5bGUgPSBlbGVtZW50
LnN0eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVk
U3R5bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0ZXIgPSAocmVnZXhwLnRlc3QoZmls
dGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpIDogZmlsdGVyICsgJyAnICsgdmFs
dWUpLnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgn
ZmlsdGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0T3BhY2l0eSA9IChoYXNPcGFjaXR5
ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9
IG9wYWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xu
XHRpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVtZW50LmN1cnJlbnRTdHlsZS5oYXNM
YXlvdXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlmIChvcGFjaXR5ID09IG51bGwgfHwg
b3BhY2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJycpO1xuXHRc
dGlmIChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVtZW50KSAhPSAxKSBzZXRGaWx0ZXIo
ZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAwKScpO1xuXHR9IGVsc2Uge1xuXHRc
dHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0nICsgKG9wYWNpdHkg
KiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7XG5cdH1cbn0gOiBzZXRWaXNpYmls
aXR5KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlvbihlbGVtZW50
KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNpdHkgfHwgZWxlbWVudC5nZXRD
b21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAob3BhY2l0eSA9PSAnJykgPyAxIDog
b3BhY2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xu
XHR2YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0
ZWRTdHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5cdGlmIChmaWx0ZXIpIG9wYWNpdHkg
PSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAob3BhY2l0eSA9PSBudWxsIHx8IGZp
bHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7XG59IDogZnVuY3Rpb24oZWxl
bWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRyaWV2ZSgnJG9wYWNpdHknKTtcblx0
aWYgKG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkg
PT0gJ2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFjaXR5O1xufSkpO1xuXG52YXIgZmxv
YXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkgPyAnc3R5bGVGbG9hdCcgOiAn
Y3NzRmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0OiAnMCUnLCB0b3A6ICcwJScsIGNl
bnRlcjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTogJzEwMCUnfSxcblx0aGFzQmFja2dy
b3VuZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb25YICE9IG51bGwp
LFxuXHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52YXIgY2FtZWxDYXNlID0gZnVuY3Rp
b24ocHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVwbGFjZShwcmVmaXhQYXR0ZXJuLCAn
JDEtJykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5cbnZhciByZW1vdmVTdHlsZSA9IGZ1
bmN0aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBv
c2l0aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5ICsgJ1gnKTtcblx0
XHRwcm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5
KTtcbn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRDb21wdXRl
ZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxl
ICYmIHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJyZW50U3R5bGVbY2FtZWxDYXNl
KHByb3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0gRWxlbWVudC5nZXREb2N1bWVudCh0
aGlzKS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0
Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVsbDtcblx0XHRyZXR1cm4gKGNv
bXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHByb3BlcnR5ID09IGZsb2F0TmFt
ZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDogJyc7XG5cdH0sXG5cblx0c2V0
U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdv
cGFjaXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgdmFsdWUgPSBwYXJzZUZsb2F0KHZh
bHVlKTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUpO1xuXHRcdFx0cmV0dXJuIHRoaXM7
XG5cdFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBm
bG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ3N0cmluZycp
e1xuXHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9wZXJ0eV0gfHwgJ0AnKS5zcGxp
dCgnICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0KHZhbHVlKS5tYXAoZnVuY3Rpb24o
dmFsLCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVybiAnJztcblx0XHRcdFx0cmV0dXJu
ICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVwbGFjZSgnQCcsIE1hdGgucm91
bmQodmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7XG5cdFx0fSBlbHNlIGlmICh2YWx1
ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0dmFsdWUgPSBNYXRoLnJvdW5kKHZh
bHVlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHQvLzxs
dElFOT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVlID09IG51bGwpICYmIGRvZXNOb3RS
ZW1vdmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRyaWJ1dGUpe1xuXHRcdFx0cmVtb3Zl
U3R5bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1cblx0XHQvLzwvbHRJRTk+XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0
XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4gZ2V0T3BhY2l0eSh0aGlzKTtcblx0
XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDog
cHJvcGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFkaXVzICYmIHByb3BlcnR5LmluZGV4
T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJldHVybiBbJ2JvcmRlclRvcExlZnRS
YWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMn
LCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlvbihjb3JuZXIpe1xuXHRcdFx0
XHRyZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgnO1xuXHRcdFx0fSwgdGhpcykuam9p
bignICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhpcy5zdHlsZVtwcm9wZXJ0eV07XG5c
dFx0aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcpe1xuXHRcdFx0aWYgKEVsZW1l
bnQuU2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKXtcblx0XHRcdFx0cmVzdWx0
ID0gW107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1twcm9wZXJ0
eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0
LmpvaW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHls
ZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSAmJiAv
XmJhY2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9wZXJ0eSkpe1xuXHRcdFx0cmV0dXJu
IHJlc3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KS9nLCBmdW5jdGlvbihwb3Np
dGlvbil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9uc1twb3NpdGlvbl07XG5cdFx0XHR9
KSB8fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQgJiYgcHJvcGVydHkgPT0gJ2JhY2tn
cm91bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5cdFx0aWYgKHJlc3VsdCl7XG5cdFx0
XHRyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZhciBjb2xvciA9IHJlc3VsdC5tYXRj
aCgvcmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRpZiAoY29sb3IpIHJlc3VsdCA9IHJl
c3VsdC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hleCgpKTtcblx0XHR9XG5cdFx0
aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0eWxlW3Byb3BlcnR5XSl7XG5cdFx0
XHRpZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9wZXJ0eSkgJiYgISgvcHgkLy50ZXN0
KHJlc3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChwcm9wZXJ0eSA9PSAnd2lkdGgnKSA/
IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10sIHNpemUgPSAwO1xuXHRcdFx0
XHR2YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdFx0c2l6ZSArPSB0aGlzLmdl
dFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRvSW50KCkgKyB0aGlzLmdldFN0
eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0
XHRcdHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2FwaXRhbGl6ZSgpXSAtIHNpemUg
KyAncHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRlciguKylXaWR0aHxtYXJnaW58cGFk
ZGluZy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNlRmxvYXQocmVzdWx0KSkpe1xuXHRc
dFx0XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vPGx0SUU5PlxuXHRcdGlm
IChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRlcihUb3B8UmlnaHR8Qm90dG9t
fExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChyZXN1bHQpKXtcblx0XHRcdHJl
dHVybiByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxzKC4rKSQvLCAnJDIgJDMgJDEnKTtc
blx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHRz
ZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9yICh2YXIgc3R5bGUgaW4gc3R5bGVz
KSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xu
XHRcdEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGtleSl7XG5cdFx0XHRy
ZXN1bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1
cm4gcmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0eWxlcyA9IHtcblx0bGVmdDogJ0Bw
eCcsIHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0OiAnQHB4Jyxcblx0d2lkdGg6ICdA
cHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1heEhlaWdodDogJ0BweCcsIG1p
bldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0YmFja2dyb3VuZENvbG9yOiAncmdi
KEAsIEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBiYWNrZ3JvdW5kUG9zaXRpb246ICdA
cHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRmb250U2l6ZTogJ0BweCcsIGxldHRl
clNwYWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4JywgY2xpcDogJ3JlY3QoQHB4IEBweCBA
cHggQHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcsIHBhZGRpbmc6ICdAcHggQHB4
IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEAp
IEBweCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRoOiAnQHB4IEBweCBAcHggQHB4Jywg
Ym9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdyZ2IoQCwgQCwgQCkgcmdiKEAs
IEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxuXHR6SW5kZXg6ICdAJywgJ3pvb20n
OiAnQCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDogJ0BweCcsIG9wYWNpdHk6ICdAJywg
Ym9yZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtcblxuXG5cblxuXG5FbGVtZW50LlNo
b3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBib3JkZXI6IHt9LCBib3JkZXJX
aWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6IHt9fTtcblxuWydUb3AnLCAn
UmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9uKGRpcmVjdGlvbil7XG5cdHZh
ciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZhciBBbGwgPSBFbGVtZW50LlN0eWxl
cztcblx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rpb24oc3R5bGUpe1xuXHRcdHZh
ciBzZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0W3N0eWxlXVtzZF0gPSBBbGxbc2Rd
ID0gJ0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVyJyArIGRpcmVjdGlvbjtcblx0U2hv
cnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAsIEAsIEApJztcblx0dmFyIGJk
dyA9IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUnLCBiZGMgPSBiZCArICdDb2xvcic7
XG5cdFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJXaWR0aFtiZHddID0gU2hvcnRbYmRd
W2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5ib3JkZXJTdHlsZVtiZHNdID0gU2hv
cnRbYmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hvcnQuYm9yZGVyQ29sb3JbYmRjXSA9
IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAsIEApJztcbn0pO1xuXG5pZiAo
aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hvcnRTdHlsZXMuYmFja2dyb3VuZFBv
c2l0aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywgYmFja2dyb3VuZFBvc2l0aW9uWTog
J0AnfTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EaW1lbnNpb25zXG5cbmRl
c2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0aCBzaXplLCBzY3JvbGwsIG9y
IHBvc2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2luZG93IG9iamVjdC5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWxlbWVudCBwb3NpdGlvbmlu
ZyBiYXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294ZG9vLm9yZy8pIGNvZGUgYW5kIHNt
YXJ0IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl
bnNlcy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVuc2lvbnMgYmFzZWQgb24gW1lVSV0o
aHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29kZSwgW0JTRCBMaWNlbnNlXShodHRw
Oi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1sKS5cblxucmVxdWlyZXM6IFtF
bGVtZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGltZW5zaW9uc11c
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTtcbmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxlbWVudC5hcHBlbmRDaGlsZChjaGls
ZCk7XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9mZnNldFBhcmVudCA9PT0gZWxl
bWVudCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52YXIgaGVpZ2h0Q29tcG9uZW50cyA9
IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRvbScsICdib3JkZXJUb3BXaWR0
aCcsICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENvbXBvbmVudHMgPSBbJ3dpZHRoJywg
J3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVy
UmlnaHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6ZSA9IGZ1bmN0aW9uKGVsKXtcblxu
XHR2YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLFxuXHRcdGJvdW5kcyA9IHt4
OiAwLCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVhY2goZnVuY3Rpb24oY3NzKXtcblx0
XHRib3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0fSk7XG5cdHdpZHRoQ29tcG9u
ZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnggKz0gcGFyc2VGbG9hdChnQ1Nb
Y3NzXSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtcblxudmFyIGlzT2Zmc2V0ID0gZnVu
Y3Rpb24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWwsICdwb3NpdGlvbicpICE9ICdzdGF0
aWMnIHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZzZXRTdGF0aWMgPSBmdW5jdGlvbihl
bCl7XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFibGV8dGR8dGgpJC9pKS50ZXN0
KGVsLnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNjcm9sbFRvOiBm
dW5jdGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKXtcblx0XHRcdHRoaXMuZ2V0V2lu
ZG93KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2Nyb2xsTGVm
dCA9IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkg
cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xuXG5cdFx0Ly88bHRJRTk+XG5cdFx0
Ly8gVGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNhbm5vdCBjYWxjdWxhdGUgZ2V0Qm91
bmRpbmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlzaWJpbGl0eSBoaWRkZW4uXG5cdFx0
aWYgKCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJuIHt4OiB0aGlzLm9mZnNldFdpZHRo
LCB5OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0Ly8gVGhpcyBz
dmcgc2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3VsYXRlU2l6ZSgpYCwgY2FuIGJlIHJl
bW92ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVnLlxuXHRcdC8vIEJ1ZyBpbmZvOiBo
dHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01MzA5ODVcblx0XHRp
ZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3ZnQ2FsY3VsYXRlU2l6ZSh0aGlz
KTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndpZHRoLCB5OiBib3VuZHMuaGVpZ2h0
fTtcblx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdFx0fVxu
XHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlz
KSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6ZSgpO1xuXHRcdHJldHVybiB7
eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWlnaHR9O1xuXHR9LFxuXG5cdGdl
dFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5n
ZXRXaW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsTGVmdCwg
eTogdGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbHM6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9
O1xuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRp
b24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQu
c2Nyb2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHR9XG5c
dFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9mZnNldFBhcmVudDogYnJva2VuT2Zm
c2V0UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0aWYg
KGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAn
Zml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09mZnNldENoZWNrID0gKHN0eWxlU3Ry
aW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/IGlzT2Zmc2V0U3RhdGljIDog
aXNPZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSl7XG5c
dFx0XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxu
XHRcdHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRo
aXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50LCAncG9z
aXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1
cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXHRcdHJldHVybiBu
dWxsO1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGhhc0dldEJv
dW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0O1xuXG5cdFx0aWYg
KGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2YXIgYm91bmQgPSB0aGlzLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0gZG9jdW1lbnQuaWQodGhpcy5nZXRE
b2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRcdGh0bWxTY3JvbGwgPSBodG1sLmdl
dFNjcm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRoaXMuZ2V0U2Nyb2xscygpLFxuXHRc
dFx0XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3NpdGlvbicpID09ICdmaXhlZCcp
O1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3VuZC5sZWZ0LnRvRmxvYXQoKSArIGVs
ZW1TY3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueCkgLSBodG1sLmNsaWVu
dExlZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy55ICsg
KChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5jbGllbnRUb3Bcblx0XHRcdH07
XG5cdFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAw
fTtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRpb247XG5cblx0XHR3aGlsZSAo
ZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVu
dC5vZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50Lm9mZnNldFRvcDtcblxu
XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRcdH1cblxuXHRcdHJldHVy
biBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24ocmVsYXRpdmUpe1xu
XHRcdHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxcblx0XHRcdHNjcm9sbCA9IHRoaXMu
Z2V0U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtcblx0XHRcdHg6IG9mZnNldC54IC0g
c2Nyb2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9sbC55XG5cdFx0fTtcblxuXHRcdGlm
IChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChyZWxhdGl2ZSkpKXtcblx0XHRc
dHZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9zaXRpb24oKTtcblx0XHRcdHJl
dHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24ueCAtIGxlZnRCb3JkZXIocmVs
YXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlvbi55IC0gdG9wQm9yZGVyKHJl
bGF0aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRDb29y
ZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJu
IHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0XHR2YXIgcG9zaXRpb24gPSB0
aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xu
XHRcdHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi54LFxuXHRcdFx0dG9wOiBwb3Np
dGlvbi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRcdGhlaWdodDogc2l6ZS55XG5cdFx0
fTtcblx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0aDtcblx0XHRvYmouYm90dG9t
ID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRjb21w
dXRlUG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxlZnQ6IG9i
ai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0JyksXG5cdFx0XHR0b3A6IG9iai55
IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxuXHRcdH07XG5cdH0sXG5cblx0c2V0
UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMu
Y29tcHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xuXG5cbltEb2N1bWVudCwgV2luZG93
XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZh
ciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDogZG9jLmNsaWVu
dFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCksIGRvYyA9IGdldENvbXBhdEVs
ZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFnZVhPZmZzZXQgfHwgZG9jLnNjcm9s
bExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wfTtcblx0fSxcblxuXHRn
ZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50
KHRoaXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCksXG5cdFx0XHRib2R5ID0gdGhpcy5n
ZXREb2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6IE1hdGgubWF4KGRvYy5zY3JvbGxX
aWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRoLm1heChkb2Muc2Nyb2xsSGVp
Z2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHR9LFxuXG5cdGdldENvb3Jk
aW5hdGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0
cmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6ZS55LCByaWdodDogc2l6ZS54LCBo
ZWlnaHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1cblxufSk7XG5cbi8vIHByaXZhdGUg
bWV0aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50LmdldENvbXB1dGVkU3R5bGU7XG5c
bmZ1bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxlKXtcblx0cmV0dXJuIHN0eWxlU3Ry
aW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59XG5cblxuXG5mdW5jdGlvbiB0b3BC
b3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLXRv
cC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1cm4g
c3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRoJyk7XG59XG5cbmZ1bmN0aW9u
IGlzQm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJvZHl8aHRtbCkkL2kpLnRlc3QoZWxl
bWVudC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGF0RWxlbWVudChlbGVtZW50KXtc
blx0dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtcblx0cmV0dXJuICghZG9jLmNvbXBh
dE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnKSA/IGRvYy5odG1sIDogZG9j
LmJvZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxlbWVudC5hbGlhcyh7cG9zaXRpb246
ICdzZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5cbltXaW5kb3csIERvY3VtZW50LCBF
bGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRIZWlnaHQ6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0sXG5cblx0Z2V0V2lkdGg6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0U2Nyb2xs
VG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLnk7XG5cdH0sXG5c
blx0Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGwo
KS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRnZXRTY3JvbGxXaWR0aDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueDtcblx0fSxcblxuXHRnZXRU
b3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS55O1xuXHR9LFxu
XG5cdGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS54
O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4XG5cbmRlc2NyaXB0aW9uOiBDb250
YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJlIGV4dGVuZGVkIGJ5IGFsbCBvdGhl
ciBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6
IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV1cblxucHJvdmlkZXM6IEZ4
XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBGeCA9IHRoaXMuRnggPSBuZXcgQ2xh
c3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVu
YWJsZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0b25TdGFydDogbmlsLFxuXHRcdG9u
Q2FuY2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxuXHRcdCovXG5cdFx0ZnBzOiA2MCxc
blx0XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAwLFxuXHRcdGZyYW1lczogbnVsbCxc
blx0XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2lnbm9yZSdcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnN1YmplY3QgPSB0aGlzLnN1Ympl
Y3QgfHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0Z2V0
VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gZnVuY3Rpb24ocCl7XG5cdFx0XHRy
ZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAvIDI7XG5cdFx0fTtcblx0fSxcblxu
XHRzdGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKXtc
blx0XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxsKSA/IChub3cgLSB0aGlzLnRpbWUp
IDogMCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRlcnZhbDtcblx0XHRcdHRoaXMudGlt
ZSA9IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVzO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHR0aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1l
cyl7XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRpb24odGhpcy5mcmFtZSAvIHRoaXMu
ZnJhbWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sIHRoaXMudG8s
IGRlbHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJhbWUgPSB0aGlzLmZyYW1lcztc
blx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sIHRoaXMudG8sIDEpKTtcblx0
XHRcdHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5c
dFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVs
dGEpe1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBkZWx0YSk7XG5cdH0sXG5cblx0
Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlzUnVubmluZygpKSByZXR1cm4gdHJ1
ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6
IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNo
YWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihmcm9tLCB0
byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dGhp
cy5mcm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5cdFx0dGhpcy5mcmFtZSA9ICh0aGlz
Lm9wdGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRc
dHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbigpO1xuXHRcdHZhciBmcmFtZXMg
PSB0aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9wdGlvbnMuZnBzLCBkdXJhdGlvbiA9
IHRoaXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1cmF0aW9uID0gRnguRHVyYXRpb25z
W2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRcdHRoaXMuZnJhbWVJbnRlcnZhbCA9
IDEwMDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFtZXMgfHwgTWF0aC5yb3VuZCh0aGlz
LmR1cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0XHRpZiAodGhpcy5nZXRUaGVuYWJs
ZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUodGhpcy5z
dWJqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3N0YXJ0JywgdGhpcy5zdWJqZWN0
KTtcblx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJhbWVzID09IHRoaXMuZnJhbWUpe1xu
XHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0
XHRpZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2ZW50KCdjaGFpbkNvbXBsZXRlJywg
dGhpcy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdz
dG9wJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRcdHRoaXMucmVzb2x2ZSh0aGlzLnN1
YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVu
bmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2Fs
bCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRoaXMuZnJhbWUgPSB0aGlzLmZyYW1l
cztcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlzLnN1YmplY3QpLmNsZWFyQ2hh
aW4oKTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVu
bmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2Fs
bCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUGF1c2VkKCkpIHB1c2hJ
bnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgbGlzdCA9IGluc3RhbmNl
c1t0aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlzdCAmJiBsaXN0LmNvbnRhaW5zKHRo
aXMpO1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5m
cmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmcoKTtcblx0fVxuXG59KTtcblxu
RnguY29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdHJldHVybiAodG8gLSBm
cm9tKSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0aW9ucyA9IHsnc2hvcnQnOiAyNTAs
ICdub3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8vIGdsb2JhbCB0aW1lcnNcblxudmFy
IGluc3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFyIGxvb3AgPSBmdW5jdGlvbigpe1xu
XHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoOyBpLS07
KXtcblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRcdGlmIChpbnN0YW5jZSkgaW5zdGFu
Y2Uuc3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaEluc3RhbmNlID0gZnVuY3Rpb24oZnBz
KXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAoaW5zdGFuY2VzW2Zwc10gPSBbXSk7
XG5cdGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNbZnBzXSkgdGltZXJzW2Zwc10gPSBs
b29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwgbGlzdCk7XG59O1xuXG52YXIg
cHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBz
XTtcblx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhpcyk7XG5cdFx0aWYgKCFsaXN0Lmxl
bmd0aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUgaW5zdGFuY2VzW2Zwc107XG5cdFx0
XHR0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zwc10pO1xuXHRcdH1cblx0fVxu
fTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5DU1NcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5IEZ4LlR3ZWVuLCBGeC5Nb3Jw
aCwgRnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJl
czogW0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogRnguQ1NTXG5cbi4uLlxuKi9cblxu
RnguQ1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeCxcblxuXHQvL3ByZXBhcmVzIHRo
ZSBiYXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTogZnVuY3Rpb24oZWxlbWVudCwgcHJv
cGVydHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXkuY29udmVydCh2YWx1ZXMpO1xuXHRc
dHZhciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sxXTtcblx0XHRpZiAodG8gPT0gbnVs
bCl7XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0gZWxlbWVudC5nZXRTdHlsZShwcm9w
ZXJ0eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51bml0O1xuXHRcdFx0Ly8gYWRh
cHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIvZngvYmxvYi9tYXN0ZXIvZngu
anMjTDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBlb2YgZnJvbSA9PSAnc3RyaW5n
JyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAmJiBwYXJzZUZsb2F0KGZyb20p
ICE9IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0byArIHVuaXQpO1xu
XHRcdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xu
XHRcdFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExlZnQgb3IgcGl4ZWxXaWR0aFxu
XHRcdFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xuXHRcdFx0XHRcdHZhbHVlID0gZWxl
bWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxDYXNlKCldO1xuXHRcdFx0XHRc
dGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8vIGFkYXB0ZWQgZnJvbSBEZWFuIEVk
d2FyZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8yNy8xOC41NC4xNS8j
Y29tbWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0ID0gZWxlbWVudC5zdHlsZS5sZWZ0
O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gdG8gKyB1bml0O1xuXHRcdFx0XHRc
dFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtcblx0XHRcdFx0XHRcdGVsZW1lbnQu
c3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZyb20g
PSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkgKiAocGFyc2VGbG9hdChmcm9t
KSB8fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgZnJvbSArIHVuaXQp
O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206IHRoaXMucGFyc2UoZnJvbSksIHRv
OiB0aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJzZXMgYSB2YWx1ZSBpbnRvIGFuIGFy
cmF5XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YWx1ZSA9IEZ1bmN0aW9uLmNv
bnZlcnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSA/
IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVlKTtcblx0XHRyZXR1cm4gdmFs
dWUubWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBTdHJpbmcodmFsKTtcblx0XHRcdHZh
ciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2goRnguQ1NTLlBhcnNlcnMsIGZ1bmN0
aW9uKHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgcGFy
c2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlmIChwYXJzZWQgfHwgcGFyc2VkID09
PSAwKSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6IHBhcnNlcn07XG5cdFx0XHR9KTtc
blx0XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWwsIHBhcnNlcjogRnguQ1NTLlBhcnNl
cnMuU3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9KTtcblx0fSxcblxuXHQvL2Nv
bXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0cywgdXNpbmcgdGhlaXIgcGFy
c2Vycy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZhciBj
b21wdXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxlbmd0aCwgdG8ubGVuZ3RoKSkudGlt
ZXMoZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNoKHt2YWx1ZTogZnJvbVtpXS5wYXJz
ZXIuY29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1ZSwgZGVsdGEpLCBwYXJzZXI6IGZy
b21baV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0ZWQuJGZhbWlseSA9IEZ1bmN0aW9u
LmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVybiBjb21wdXRlZDtcblx0fSxcblxu
XHQvL3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxuXHRzZXJ2ZTogZnVuY3Rpb24odmFs
dWUsIHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdmeDpjc3M6dmFsdWUnKSB2YWx1
ZSA9IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1cm5lZCA9IFtdO1xuXHRcdHZhbHVl
LmVhY2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVkID0gcmV0dXJuZWQuY29uY2F0KGJp
dC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJl
dHVybmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hhbmdlIHRvIGFuIGVsZW1lbnRcblxu
XHRyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgdW5pdCl7XG5cdFx0
ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2YWx1ZSwgdW5pdCkpO1xuXHR9
LFxuXG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNzcyB0byBmaW5kIHRoZSB2YWx1ZXMg
Zm9yIGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKHNlbGVjdG9yKXtcblx0XHRpZiAo
RnguQ1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl07XG5c
dFx0dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdFeHAoJ14nICsgc2VsZWN0b3Iu
ZXNjYXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNlYXJjaFN0eWxlcyA9IGZ1bmN0aW9u
KHJ1bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1bmN0aW9uKHJ1bGUpe1xuXHRcdFx0
XHRpZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNoU3R5bGVzKHJ1bGUucnVsZXMgfHwg
cnVsZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlm
ICghcnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgc2VsZWN0b3JUZXh0ID0gKHJ1bGUu
c2VsZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJlcGxhY2UoL15cXHcrLywgZnVuY3Rp
b24obSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSkgOiBu
dWxsO1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2VsZWN0b3JUZXN0LnRlc3Qoc2Vs
ZWN0b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3QuZWFjaChFbGVtZW50LlN0eWxlcywg
ZnVuY3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGVbc3R5bGVd
IHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47XG5cdFx0XHRcdFx0dmFsdWUg
PSBTdHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0XHRcdHRvW3N0eWxlXSA9ICgoL15y
Z2IvKS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgpIDogdmFsdWU7XG5cdFx0XHRcdH0p
O1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVhY2goZG9jdW1lbnQuc3R5bGVTaGVl
dHMsIGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVmID0gc2hlZXQuaHJlZjtcblx0XHRc
dGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAmJiBocmVmLmluZGV4T2YoZG9j
dW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0dmFyIHJ1bGVzID0gc2hlZXQucnVs
ZXMgfHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hTdHlsZXMocnVsZXMpO1xuXHRcdH0p
O1xuXHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdID0gdG87XG5cdH1cblxufSk7XG5c
bkZ4LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2VycyA9IHtcblxuXHRDb2xvcjoge1xu
XHRcdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubWF0Y2goL14jWzAt
OWEtZl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1JnYih0cnVlKTtcblx0XHRcdHJldHVy
biAoKHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMqKFxcZCspLFxccyooXFxkKykvKSkp
ID8gW3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDogZmFsc2U7XG5cdFx0fSxcblx0XHRj
b21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdFx0cmV0dXJuIGZyb20ubWFw
KGZ1bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoRnguY29tcHV0
ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0c2VydmU6
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZS5tYXAoTnVtYmVyKTtcblx0XHR9
XG5cdH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBhcnNlRmxvYXQsXG5cdFx0Y29tcHV0
ZTogRnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xuXHRcdFx0
cmV0dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVlO1xuXHRcdH1cblx0fSxcblxuXHRT
dHJpbmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVydChmYWxzZSksXG5cdFx0Y29tcHV0
ZTogZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVybiBvbmU7XG5cdFx0fSxcblx0XHRz
ZXJ2ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9XG5cdH1cblxu
fTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhcblxuZGVzY3JpcHRpb246IEZvcm1l
cmx5IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55IG51bWJlciBvZiBDU1MgcHJv
cGVydGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmplY3Qgb2YgcnVsZXMsIG9yIENTUyBi
YXNlZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBoXG5cbi4uLlxuKi9cblxuRnguTW9y
cGggPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBm
dW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1Ympl
Y3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0
fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHR5cGVvZiBub3cgPT0gJ3N0cmlu
ZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9yICh2YXIgcCBpbiBub3cpIHRoaXMu
cmVuZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRh
KXtcblx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIgcCBpbiBmcm9tKSBub3dbcF0gPSB0
aGlzLnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xuXHRcdHJldHVybiBub3c7XG5cdH0s
XG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xuXHRcdGlmICghdGhpcy5jaGVjayhw
cm9wZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09ICdz
dHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVydGllcyk7XG5cdFx0dmFyIGZy
b20gPSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIHByb3BlcnRpZXMpe1xuXHRcdFx0
dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsIHAsIHByb3BlcnRpZXNbcF0p
O1xuXHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRcdFx0dG9bcF0gPSBwYXJzZWQudG87
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9tLCB0byk7XG5cdH1cblxufSk7XG5c
bkVsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMp
e1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBtb3Jw
aCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYgKCFtb3JwaCl7XG5cdFx0XHRtb3Jw
aCA9IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMuc3Rv
cmUoJ21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9ycGg7XG5cdH1cblxufTtc
blxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBmdW5jdGlvbihwcm9wcyl7XG5cdFx0
dGhpcy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRpb25zXG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9ucyB0byBiZSB1c2VkIHdpdGggYW55
IG9mIHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3Jl
ZGl0czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQZW5uZXIsIDxodHRwOi8vd3d3
LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFuZCBvcHRpbWl6ZWQgdG8gYmUg
dXNlZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhcblxucHJvdmlkZXM6IEZ4LlRyYW5z
aXRpb25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtcblxuXHRnZXRUcmFuc2l0aW9uOiBm
dW5jdGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0aW9ucy50cmFuc2l0aW9uIHx8IEZ4
LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlmICh0eXBlb2YgdHJhbnMgPT0gJ3N0
cmluZycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxpdCgnOicpO1xuXHRcdFx0dHJhbnMg
PSBGeC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJhbnNbZGF0YVswXV0gfHwgdHJhbnNb
ZGF0YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRhdGFbMV0pIHRyYW5zID0gdHJhbnNb
J2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsyXSA/IGRhdGFbMl0uY2FwaXRh
bGl6ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5zO1xuXHR9XG5cbn0pO1xuXG5G
eC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFyYW1zKXtcblx0cGFyYW1zID0g
QXJyYXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUluID0gZnVuY3Rpb24ocG9zKXtcblx0
XHRyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5cdH07XG5cdHJldHVybiBPYmplY3Qu
YXBwZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUluLFxuXHRcdGVhc2VPdXQ6IGZ1bmN0
aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRpb24oMSAtIHBvcywgcGFyYW1zKTtc
blx0XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVybiAocG9z
IDw9IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1zKSA6ICgyIC0gdHJhbnNpdGlvbigy
ICogKDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1cblx0fSk7XG59O1xuXG5GeC5UcmFu
c2l0aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdHJldHVybiB6ZXJv
O1xuXHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQgPSBmdW5jdGlvbih0cmFu
c2l0aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJhbnNpdGlvbnMpIEZ4LlRyYW5z
aXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24odHJhbnNpdGlvbnNbdHJhbnNp
dGlvbl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtcblxuXHRQb3c6IGZ1bmN0aW9u
KHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhbMF0gfHwgNik7XG5cdH0sXG5c
blx0RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDggKiAocCAtIDEp
KTtcblx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGguc2lu
KE1hdGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJu
IDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9LFxuXG5cdEJhY2s6IGZ1bmN0aW9u
KHAsIHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7XG5cdFx0cmV0dXJuIE1hdGgucG93
KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5cblx0Qm91bmNlOiBmdW5jdGlvbihw
KXtcblx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9IDAsIGIgPSAxOyAxOyBhICs9IGIs
IGIgLz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBhKSAvIDExKXtcblx0XHRcdFx0dmFs
dWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEgKiBwKSAvIDQsIDIpO1xuXHRc
dFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXG5c
dEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdygyLCAxMCAqIC0t
cCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYgeFswXSB8fCAxKSAvIDMpO1xu
XHR9XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVhcnQnLCAnUXVpbnQnXS5lYWNoKGZ1
bmN0aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5l
dyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCBpICsg
Mik7XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHdlZW5cblxuZGVzY3JpcHRp
b246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgQ1NTIHByb3Bl
cnR5IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVx
dWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVuLCBFbGVtZW50LmZhZGUsIEVsZW1l
bnQuaGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVuID0gbmV3IENsYXNzKHtcblxuXHRF
eHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9u
cyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVu
dCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihw
cm9wZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKXtcblx0XHRcdG5v
dyA9IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlzLnByb3BlcnR5IHx8IHRoaXMub3B0
aW9ucy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LCBwcm9w
ZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNo
ZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHZhciBhcmdzID0gQXJy
YXkuZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJvcGVydHkgPSB0aGlzLm9wdGlvbnMu
cHJvcGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUo
dGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtcblx0XHRyZXR1cm4gdGhpcy5wYXJl
bnQocGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVy
dGllcy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuZ2V0
KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciB0d2VlbiA9IHRoaXMucmV0cmll
dmUoJ3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0XHR0d2VlbiA9IG5ldyBGeC5Ud2Vl
bih0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3R3ZWVuJywgdHdl
ZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBs
ZW1lbnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0eSwgZnJvbSwgdG8pe1xuXHRcdHRo
aXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0byk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZmFkZSA9IHRoaXMuZ2V0
KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5hcHBlbmQoYXJndW1lbnRzKSwg
dG9nZ2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFyZ3NbMV0gPSAndG9nZ2xlJztcblx0
XHRzd2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4nOiBtZXRob2QgPSAnc3RhcnQnOyBh
cmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQnOiBtZXRob2QgPSAnc3RhcnQnOyBh
cmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93JzogbWV0aG9kID0gJ3NldCc7IGFy
Z3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUnOiBtZXRob2QgPSAnc2V0JzsgYXJn
c1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJzpcblx0XHRcdFx0dmFyIGZsYWcg
PSB0aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdldFN0eWxlKCdvcGFjaXR5JykgPT0g
MSk7XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0XHRcdGFyZ3NbMV0gPSBmbGFnID8g
MCA6IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6ZmxhZycsICFmbGFnKTtcblx0XHRcdFx0
dG9nZ2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OiBtZXRob2QgPSAn
c3RhcnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhpcy5lbGltaW5hdGUoJ2ZhZGU6Zmxh
ZycpO1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBhcmdzKTtcblx0XHR2YXIgdG8gPSBh
cmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0aG9kID09ICdzZXQnKXtcblx0XHRc
dHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAwID8gJ2hpZGRlbicgOiAndmlzaWJs
ZScpO1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0XHRpZiAoZmFkZS4kY2hhaW4ubGVu
Z3RoKXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHRoaXMuZWxl
bWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0dGhpcy5j
YWxsQ2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNl
dFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xu
XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRpZiAodGhpcy5lbGVtZW50Lmdl
dFN0eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0eWxl
KCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0aGlzLmNhbGxDaGFpbigpO1xuXHRc
dFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGlnaGxpZ2h0OiBm
dW5jdGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7XG5cdFx0XHRlbmQgPSB0aGlzLnJl
dHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0eWxlKCdiYWNrZ3JvdW5kLWNv
bG9yJykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNwYXJlbnQnKSA/ICcjZmZmJyA6IGVu
ZDtcblx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQoJ3R3ZWVuJyk7XG5cdFx0dHdlZW4u
c3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2ZmZmY4OCcsIGVuZCkuY2hhaW4o
ZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCB0aGlz
LnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5cdFx0XHR0d2Vlbi5jYWxsQ2hhaW4o
KTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRpb246IFBvd2VyZnVsIGFsbCBwdXJw
b3NlIFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVlc3QuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwgRWxlbWVudCwgQ2hhaW4sIEV2ZW50
cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0
XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbXB0eSA9IGZ1bmN0aW9uKCl7fSxc
blx0cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBuZXcgQnJvd3Nlci5SZXF1ZXN0
KTtcblxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxl
bWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5cblx0b3B0
aW9uczogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigpe30sXG5cdFx0b25Mb2Fkc3RhcnQ6
IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9ncmVzczogZnVuY3Rpb24oZXZlbnQs
IHhocil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigpe30sXG5cdFx0b25DYW5jZWw6IGZ1
bmN0aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCwgcmVzcG9u
c2VYTUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4aHIpe30sXG5cdFx0b25FeGNlcHRp
b246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxuXHRcdG9uVGltZW91dDogZnVuY3Rp
b24oKXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3JkOiAnJyxcblx0XHR3aXRoQ3JlZGVu
dGlhbHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRkYXRhOiAnJyxcblx0XHRoZWFkZXJz
OiB7XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXG5cdFx0XHQn
QWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRl
eHQveG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRmb3JtYXQ6IGZhbHNl
LFxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdpZ25vcmUnLFxuXHRcdGlzU3VjY2Vz
czogbnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0dXJsRW5jb2RlZDogdHJ1ZSxcblx0
XHRlbmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0czogZmFsc2UsXG5cdFx0ZXZhbFJl
c3BvbnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRcdG5vQ2FjaGU6IGZhbHNlXG5cdH0s
XG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy54aHIgPSBuZXcg
QnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHRo
aXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuXHR9LFxuXG5cdG9uU3RhdGVDaGFu
Z2U6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmICh4aHIucmVh
ZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjtcblx0XHR0aGlzLnJ1bm5pbmcg
PSBmYWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0RnVuY3Rpb24uYXR0ZW1wdChmdW5j
dGlvbigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7XG5cdFx0XHR0aGlzLnN0YXR1
cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7XG5cdFx0fS5iaW5kKHRoaXMpKTtc
blx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3Vw
cG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHRpZiAo
dGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxl
dGUgdGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJlc3BvbnNlID0ge3RleHQ6IHRoaXMu
eGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5yZXNwb25zZVhNTH07XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnN0YXR1cykpXG5cdFx0
XHR0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0aGlzLnJlc3BvbnNlLnhtbCk7XG5c
dFx0ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0sXG5cblx0aXNTdWNjZXNzOiBmdW5j
dGlvbigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1cztcblx0XHRyZXR1cm4gKHN0YXR1
cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9LFxuXG5cdHByb2Nlc3NTY3JpcHRz
OiBmdW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZSB8fCAo
LyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRlcignQ29udGVudC10eXBlJykp
KSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJldHVybiB0ZXh0LnN0cmlwU2NyaXB0
cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9u
KHRleHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyh0ZXh0
KSwgeG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRleHQsIHhtbDogeG1sfSk7XG5cdH0s
XG5cblx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0
ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJndW1lbnRzKS5jYWxsQ2hhaW4o
KTtcblx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMub25GYWlsdXJlKCk7
XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4aHI6IHRoaXMueGhyfSk7XG5c
dH0sXG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjb21w
bGV0ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhyKTtcblx0fSxcblxuXHRsb2Fkc3Rh
cnQ6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVudCgnbG9hZHN0YXJ0JywgW2V2
ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBmdW5jdGlvbihldmVudCl7XG5c
dFx0dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxu
XG5cdHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3RpbWVvdXQnLCB0
aGlzLnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ3RpbWVvdXQnLCB4aHI6IHRoaXMu
eGhyfSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0
dGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
Z2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChm
dW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdldFJlc3BvbnNlSGVhZGVyKG5hbWUp
O1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0
aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRcdHN3aXRjaCAodGhpcy5vcHRpb25z
Lmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7
XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVu
dHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0s
XG5cblx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKG9wdGlv
bnMpKSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgPSB0aGlzLm9w
dGlvbnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xuXHRcdHRoaXMucnVubmluZyA9IHRy
dWU7XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25zKTtcblx0XHRpZiAodHlwZSA9PSAn
c3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9IHtkYXRhOiBvcHRpb25zfTtc
blxuXHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0b3B0aW9ucyA9IE9iamVjdC5hcHBl
bmQoe2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1ldGhvZDogb2xkLm1ldGhvZH0sIG9w
dGlvbnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCB1cmwgPSBTdHJpbmcob3B0aW9u
cy51cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0c3dp
dGNoICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxlbWVudCc6IGRhdGEgPSBkb2N1bWVu
dC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnb2JqZWN0Jzog
Y2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTtcblx0XHR9XG5c
blx0XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0XHR2YXIgZm9ybWF0ID0gJ2Zvcm1h
dD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBmb3JtYXQg
KyAnJicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW11
bGF0aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIg
X21ldGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0XHRkYXRhID0gKGRhdGEpID8gX21l
dGhvZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0bWV0aG9kID0gJ3Bvc3QnO1xuXHRc
dH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAmJiBbJ3Bvc3QnLCAncHV0J10u
Y29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2RpbmcgPSAodGhpcy5vcHRpb25zLmVu
Y29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5lbmNvZGluZyA6ICcnO1xuXHRc
dFx0dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5cdFx0aWYgKCF1cmwpIHVybCA9IGRv
Y3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFyIHRyaW1Qb3NpdGlvbiA9IHVybC5s
YXN0SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRpb24gPiAtMSAmJiAodHJpbVBvc2l0
aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJsLnN1YnN0cigwLCB0cmltUG9z
aXRpb24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NhY2hlKVxuXHRcdFx0dXJsICs9ICh1
cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgU3RyaW5nLnVuaXF1ZUlEKCk7XG5c
blx0XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1ldGhvZCA9PSAnZGVsZXRlJykp
e1xuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgZGF0
YTtcblx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZhciB4aHIgPSB0aGlzLnhocjtc
blx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHhoci5vbmxvYWRzdGFydCA9IHRoaXMu
bG9hZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25wcm9ncmVzcyA9IHRoaXMucHJvZ3Jl
c3MuYmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3BlbihtZXRob2QudG9VcHBlckNhc2Uo
KSwgdXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0aW9ucy51c2VyLCB0aGlzLm9wdGlv
bnMucGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25zLndpdGhDcmVkZW50aWFscykgJiYg
J3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcblxu
XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlz
KTtcblxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVuY3Rpb24odmFsdWUsIGtleSl7
XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbHVlKTtc
blx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnZXhjZXB0aW9uJywg
W2tleSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2V4Y2VwdGlvbics
IHhocjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtcblxuXHRc
dGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMu
cmVzZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZl
bnQoJ3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtcblx0XHRpZiAoIXRoaXMub3B0aW9u
cy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0ZWxzZSBpZiAodGhpcy5vcHRpb25z
LnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVsYXkodGhpcy5vcHRpb25zLnRp
bWVvdXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDogZnVuY3Rp
b24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5ydW5u
aW5nID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdHhoci5hYm9ydCgpO1xu
XHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0
XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdl
ID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIu
b25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJlcXVlc3Qo
KTtcblx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNv
bjogJ2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bnZhciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0JywgJ3B1dCcsICdkZWxldGUnLCAncGF0
Y2gnLCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVMRVRFJywgJ1BBVENIJywgJ0hF
QUQnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhvZHNbbWV0aG9kXSA9IGZ1bmN0aW9u
KGRhdGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRtZXRob2Q6IG1ldGhvZFxuXHRcdH07
XG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBkYXRhO1xuXHRcdHJldHVybiB0
aGlzLnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1ZXN0LmltcGxlbWVudChtZXRob2Rz
KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRp
b25zKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJykuY2FuY2VsKCk7XG5cdFx0c2Vu
ZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0cmlldmUoJ3NlbmQnKTtcblx0XHRp
ZiAoIXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0KHtcblx0XHRcdFx0ZGF0YTogdGhp
cywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21ldGhvZCcpIHx8ICdwb3N0Jywg
dXJsOiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zdG9yZSgnc2Vu
ZCcsIHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtcblx0fVxuXG59O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJsKXtcblx0XHR2YXIgc2VuZGVyID0g
dGhpcy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7ZGF0YTogdGhpcywgdXJsOiB1cmwg
fHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5IVE1MXG5cbmRlc2NyaXB0aW9uOiBF
eHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZv
ciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0XVxuXG5wcm92aWRlczogUmVx
dWVzdC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1MID0gbmV3IENsYXNzKHtcblxuXHRF
eHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHR1cGRhdGU6IGZhbHNlLFxuXHRc
dGFwcGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRydWUsXG5cdFx0ZmlsdGVyOiBmYWxz
ZSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0ZXh0L2h0bWwsIGFwcGxpY2F0aW9u
L3htbCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24o
dGV4dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIHJlc3BvbnNlID0gdGhpcy5y
ZXNwb25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0cmlwU2NyaXB0cyhmdW5jdGlv
bihzY3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlwdCA9IHNjcmlwdDtcblx0XHR9KTtc
blxuXHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2goLzxib2R5W14+XSo+KFtcXHNc
XFNdKj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkgcmVzcG9uc2UuaHRtbCA9IG1hdGNo
WzFdO1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2RpdicpLnNldCgnaHRtbCcsIHJlc3Bv
bnNlLmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRlbXAuY2hpbGROb2Rlcztcblx0XHRy
ZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMob3B0aW9ucy5maWx0ZXIgfHwgJyon
KTtcblxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UudHJlZSA9IHJlc3BvbnNlLmVs
ZW1lbnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5cdFx0XHR2YXIgdXBkYXRlID0gZG9j
dW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0
ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7XG5cdFx0XHRlbHNlIHVwZGF0ZS5z
ZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVsc2UgaWYgKG9wdGlvbnMuYXBwZW5k
KXtcblx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChvcHRpb25zLmFwcGVuZCk7XG5cdFx0
XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1lbnRzLnJldmVyc2UoKS5pbmplY3Qo
YXBwZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRlbXAuZ2V0Q2hpbGRyZW4oKSk7XG5c
dFx0fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93c2VyLmV4ZWMocmVzcG9uc2Uu
amF2YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2VzcyhyZXNwb25zZS50cmVlLCByZXNwb25z
ZS5lbGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2UuamF2YXNjcmlwdCk7XG5cdFx0dGhp
cy5yZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVtZW50czogcmVzcG9uc2UuZWxlbWVu
dHMsIGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6IHJlc3BvbnNlLmphdmFzY3JpcHR9
KTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmxvYWQgPSB7XG5cblx0c2V0OiBm
dW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMuZ2V0KCdsb2FkJykuY2FuY2Vs
KCk7XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMucmV0cmlldmUoJ2xv
YWQnKTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9IG5ldyBSZXF1ZXN0LkhUTUwoe2Rh
dGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMsIG1ldGhvZDogJ2dldCd9KTtc
blx0XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0XHR9XG5cdFx0cmV0dXJuIGxvYWQ7
XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGxvYWQ6IGZ1bmN0aW9uKCl7
XG5cdFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5LmxpbmsoYXJndW1lbnRzLCB7ZGF0YTog
VHlwZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05cblxuZGVzY3JpcHRpb246IEpTT04g
ZW5jb2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cblNl
ZUFsc286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVxdWlyZXM6IFtBcnJheSwgU3RyaW5n
LCBOdW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNPTlxuXG4uLi5cbiovXG5cbmlmICh0
eXBlb2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09OID0ge307XG5cblxuXG4oZnVuY3Rp
b24oKXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxcYicsICdcXHQnOiAnXFxcXHQnLCAn
XFxuJzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHInOiAnXFxcXHInLCAnXCInIDogJ1xc
XFxcIicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBlc2NhcGUgPSBmdW5jdGlvbihjaHIp
e1xuXHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScgKyAoJzAwMDAnICsgY2hyLmNoYXJD
b2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xuXG5KU09OLnZhbGlkYXRlID0g
ZnVuY3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcXFwoPzpbXCJc
XFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS5cblx0XHRcdFx0XHRyZXBsYWNl
KC9cIlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51bGx8LT9cXGQrKD86XFwuXFxkKik/
KD86W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRcdFx0XHRyZXBsYWNlKC8oPzpefDp8
LCkoPzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAoL15bXFxdLDp7fVxcc10qJC8pLnRl
c3Qoc3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNPTi5zdHJpbmdpZnkgPyBmdW5jdGlv
bihvYmope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcbn0gOiBmdW5jdGlvbihvYmop
e1xuXHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50b0pTT04oKTtcblxuXHRzd2l0
Y2ggKHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0cmV0dXJuICdcIicg
KyBvYmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9nLCBlc2NhcGUpICsgJ1wiJztcblx0
XHRjYXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsgb2JqLm1hcChKU09OLmVuY29kZSku
Y2xlYW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNoJzpcblx0XHRcdHZh
ciBzdHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtl
eSl7XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFsdWUpO1xuXHRcdFx0XHRpZiAo
anNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6JyArIGpzb24pO1xuXHRcdFx0
fSk7XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nO1xuXHRcdGNhc2UgJ251bWJlcic6
IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5cdFx0Y2FzZSAnbnVsbCc6IHJldHVy
biAnbnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbkpTT04uc2VjdXJlID0gdHJ1
ZTtcblxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmluZywgc2VjdXJlKXtcblx0aWYgKCFz
dHJpbmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuXG5cdGlm
IChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7XG5cdGlmIChzZWN1cmUpe1xu
XHRcdGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShzdHJpbmcpO1xuXHRcdGlmICgh
SlNPTi52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJyb3IoJ0pTT04gY291bGQgbm90IGRl
Y29kZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5kIHRoZSB2YWx1ZSBpcyBub3Qg
c2VjdXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygnICsgc3RyaW5nICsgJyknKTtcbn07
XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5KU09OXG5cbmRlc2NyaXB0aW9u
OiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2Rz
IGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRhLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBKU09OXVxuXG5wcm92aWRlczogUmVx
dWVzdC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09OID0gbmV3IENsYXNzKHtcblxuXHRF
eHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQvKm9uRXJyb3I6IGZ1bmN0aW9u
KHRleHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVlXG5cdH0sXG5cblx0aW5pdGlhbGl6
ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdFx0T2Jq
ZWN0LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdBY2NlcHQnOiAnYXBwbGljYXRpb24v
anNvbicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5cdFx0fSk7XG5cdH0sXG5cblx0c3Vj
Y2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247XG5cdFx0dHJ5IHtcblx0XHRcdGpz
b24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0ZXh0LCB0aGlzLm9wdGlvbnMu
c2VjdXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0XHR0aGlzLmZpcmVFdmVudCgnZXJy
b3InLCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGpzb24g
PT0gbnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhp
cy5vblN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlzLnJlc29sdmUoe2pzb246IGpzb24s
IHRleHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogQ29v
a2llXG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcsIHJlYWRpbmcsIGFuZCBkZWxl
dGluZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5j
cmVkaXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkgUGV0ZXItUGF1bCBLb2NoICho
dHRwOi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczogW09wdGlvbnMsIEJyb3dzZXJdXG5c
bnByb3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIgQ29va2llID0gbmV3IENsYXNzKHtc
blxuXHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlvbnM6IHtcblx0XHRwYXRoOiAnLycs
XG5cdFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogZmFsc2UsXG5cdFx0c2VjdXJlOiBm
YWxzZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0ZW5jb2RlOiB0cnVlLFxuXHRcdGh0
dHBPbmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGtleSwgb3B0aW9u
cyl7XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xu
XHR9LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5l
bmNvZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRpZiAodGhpcy5v
cHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0aGlzLm9wdGlvbnMuZG9tYWlu
O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUgKz0gJzsgcGF0aD0nICsgdGhpcy5v
cHRpb25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kdXJhdGlvbil7XG5cdFx0XHR2YXIg
ZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyB0
aGlzLm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcblx0XHRcdHZhbHVl
ICs9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmcoKTtcblx0XHR9XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3VyZSc7XG5cdFx0aWYgKHRoaXMub3B0
aW9ucy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHknO1xuXHRcdHRoaXMub3B0aW9ucy5k
b2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVlO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHZhbHVlID0gdGhpcy5vcHRp
b25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxcXFxzKicgKyB0aGlzLmtleS5lc2Nh
cGVSZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVybiAodmFsdWUpID8gZGVjb2RlVVJJ
Q29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24o
KXtcblx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3QubWVyZ2Uoe30sIHRoaXMub3B0aW9u
cywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIG9wdGlvbnMpe1xuXHRy
ZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZhbHVlKTtcbn07XG5cbkNvb2tp
ZS5yZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5KS5yZWFkKCk7
XG59O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5cdHJldHVy
biBuZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgpO1xufTtcblxuLypcbi0tLVxuXG5u
YW1lOiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGN1c3RvbSBldmVudCBk
b21yZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQnJv
d3NlciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtET01SZWFkeSwgRG9t
UmVhZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQpe1xuXG52YXIg
cmVhZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5cdHNob3VsZFBvbGwsXG5cdHRpbWVy
LFxuXHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG52YXIg
ZG9tcmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIXJl
YWR5KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1ZTtcblx0XHRkb2N1bWVudC5y
ZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KS5yZW1vdmVMaXN0ZW5l
cigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRkb2N1bWVudC5maXJlRXZlbnQoJ2Rv
bXJlYWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9tcmVhZHknKTtcblx0fVxuXHQvLyBj
bGVhbnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5kb3cgPSB0ZXN0RWxlbWVudCA9IG51
bGw7XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xuXHRmb3IgKHZhciBpID0gY2hlY2tz
Lmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0XHRkb21yZWFkeSgpO1xuXHRcdHJl
dHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBwb2xsID0gZnVuY3Rp
b24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFjaGVjaygpKSB0aW1lciA9IHNl
dFRpbWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ0RPTUNvbnRl
bnRMb2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4PiovXG4vLyBkb1Njcm9sbCB0ZWNobmlx
dWUgYnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRM
b2FkZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRocm93cyB3aGVuIHRoZSBET00gaXMg
bm90IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52YXIgZG9TY3JvbGxXb3JrcyA9IGZ1
bmN0aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQuZG9TY3JvbGwoKTtcblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuLy8gSWYgZG9T
Y3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgZG9tcmVh
ZHlcbi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0RWxlbWVudC5kb1Njcm9sbCAmJiAh
ZG9TY3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9TY3JvbGxXb3Jrcyk7XG5cdHNob3Vs
ZFBvbGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlmIChkb2N1bWVudC5yZWFkeVN0YXRl
KSBjaGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3RhdGUgPSBkb2N1bWVudC5yZWFkeVN0
YXRlO1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8IHN0YXRlID09ICdjb21wbGV0ZScp
O1xufSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBkb2N1bWVudCkgZG9jdW1lbnQu
YWRkTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7XG5lbHNlIHNob3VsZFBvbGwg
PSB0cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xuXG5FbGVtZW50LkV2ZW50cy5kb21y
ZWFkeSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAocmVhZHkpIGZuLmNhbGwo
dGhpcyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0IGRvbXJlYWR5IGZpcmVzIGJlZm9y
ZSBsb2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRiYXNlOiAnbG9hZCcsXG5cdG9uQWRk
OiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0aGlzID09IHdpbmRvdykgZm4uY2Fs
bCh0aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzID09
IHdpbmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0ZGVsZXRlIEVsZW1lbnQuRXZlbnRz
LmxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xuXG4vLyBUaGlzIGlzIGJh
c2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93LmFkZEV2ZW50KCdsb2FkJywgZnVu
Y3Rpb24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59KSh3aW5kb3csIGRvY3VtZW50KTtc
biIKIAogLyoqKi8gfSksCiAvKiA0MDYgKi8KQEAgLTExMzY0MSwxMyArMTEzNjQxLDEzIEBAIG1v
ZHVsZS5leHBvcnRzID0gIi8qanNoaW50IHF1b3RtYXJrOiBmYWwKIC8qIDQxNCAqLwogLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyBsaWJz
L2pxdWVyeS9qcXVlcnkuZC50c1xuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAo
YykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsg
eW91IG1heSBub3QgdXNlXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxuTGljZW5zZSBhdCBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVEhJUyBDT0RFIElTIFBST1ZJ
REVEICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WVxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElN
SVRBVElPTiBBTlkgSU1QTElFRFxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1J
TkZSSU5HRU1FTlQuXG5cblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuYW5kIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLy8gVHlwaW5nIGZv
ciB0aGUgalF1ZXJ5IGxpYnJhcnksIHZlcnNpb24gMS4xMC54IC8gMi4wLnhcbi8vIFByb2plY3Q6
IGh0dHA6Ly9qcXVlcnkuY29tL1xuLy8gRGVmaW5pdGlvbnMgYnk6IEJvcmlzIFlhbmtvdiA8aHR0
cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292Lz4sIENocmlzdGlhbiBIb2ZmbWVpc3RlciA8aHR0
cHM6Ly9naXRodWIuY29tL2Nob2ZmbWVpc3Rlcj4sIFN0ZXZlIEZlbnRvbiwgRGl1bGxlaSBHb21l
cyA8aHR0cHM6Ly9naXRodWIuY29tL0RpdWxsZWk+LCBUYXNzIElsaW9wb3Vsb3MgPGh0dHBzOi8v
Z2l0aHViLmNvbS90YXNvaWxpPiwgSmFzb24gU3dlYXJpbmdlbiwgU2VhbiBIaWxsIDxodHRwczov
L2dpdGh1Yi5jb20vc2VhbnNraT4sIEd1dXMgR29vc3NlbnMgPGh0dHBzOi8vZ2l0aHViLmNvbS9H
dXV6PiwgS2VsbHkgU3VtbWVybGluIDxodHRwczovL2dpdGh1Yi5jb20va3N1bW1lcmxpbj4sIEJh
c2FyYXQgQWxpIFN5ZWQgPGh0dHBzOi8vZ2l0aHViLmNvbS9iYXNhcmF0PiwgTmljaG9sYXMgV29s
dmVyc29uIDxodHRwczovL2dpdGh1Yi5jb20vbndvbHZlcnNvbj4sIERlcmVrIENpY2Vyb25lIDxo
dHRwczovL2dpdGh1Yi5jb20vZGVyZWtjaWNlcm9uZT4sIEFuZHJldyBHYXNwYXIgPGh0dHBzOi8v
Z2l0aHViLmNvbS9BbmRyZXdHYXNwYXI+LCBKYW1lcyBIYXJyaXNvbiBGaXNoZXIgPGh0dHBzOi8v
Z2l0aHViLmNvbS9qYW1lc2hmaXNoZXI+LCBTZWlraWNoaSBLb25kbyA8aHR0cHM6Ly9naXRodWIu
Y29tL3NlaWtpY2hpPiwgQmVuamFtaW4gSmFja21hbiA8aHR0cHM6Ly9naXRodWIuY29tL2Jlbmph
bWluamFja21hbj4sIFBvdWwgU29yZW5zZW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9zMDkzMjk0Piwg
Sm9zaCBTdHJvYmwgPGh0dHBzOi8vZ2l0aHViLmNvbS9Kb3NoU3Ryb2JsPiwgSm9obiBSZWlsbHkg
PGh0dHBzOi8vZ2l0aHViLmNvbS9qb2hubnlyZWlsbHkvPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBz
Oi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuLypcbiAgICBJbnRl
cmZhY2UgZm9yIHRoZSBBSkFYIHNldHRpbmcgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUgQUpBWCBy
ZXF1ZXN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeUFqYXhTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAg
ICogVGhlIGNvbnRlbnQgdHlwZSBzZW50IGluIHRoZSByZXF1ZXN0IGhlYWRlciB0aGF0IHRlbGxz
IHRoZSBzZXJ2ZXIgd2hhdCBraW5kIG9mIHJlc3BvbnNlIGl0IHdpbGwgYWNjZXB0IGluIHJldHVy
bi4gSWYgdGhlIGFjY2VwdHMgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29t
bWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLlxuICAgICAq
L1xuICAgIGFjY2VwdHM/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgYWxsIHJl
cXVlc3RzIGFyZSBzZW50IGFzeW5jaHJvbm91c2x5IChpLmUuIHRoaXMgaXMgc2V0IHRvIHRydWUg
YnkgZGVmYXVsdCkuIElmIHlvdSBuZWVkIHN5bmNocm9ub3VzIHJlcXVlc3RzLCBzZXQgdGhpcyBv
cHRpb24gdG8gZmFsc2UuIENyb3NzLWRvbWFpbiByZXF1ZXN0cyBhbmQgZGF0YVR5cGU6IFwianNv
bnBcIiByZXF1ZXN0cyBkbyBub3Qgc3VwcG9ydCBzeW5jaHJvbm91cyBvcGVyYXRpb24uIE5vdGUg
dGhhdCBzeW5jaHJvbm91cyByZXF1ZXN0cyBtYXkgdGVtcG9yYXJpbHkgbG9jayB0aGUgYnJvd3Nl
ciwgZGlzYWJsaW5nIGFueSBhY3Rpb25zIHdoaWxlIHRoZSByZXF1ZXN0IGlzIGFjdGl2ZS4gQXMg
b2YgalF1ZXJ5IDEuOCwgdGhlIHVzZSBvZiBhc3luYzogZmFsc2Ugd2l0aCBqcVhIUiAoJC5EZWZl
cnJlZCkgaXMgZGVwcmVjYXRlZDsgeW91IG11c3QgdXNlIHRoZSBzdWNjZXNzL2Vycm9yL2NvbXBs
ZXRlIGNhbGxiYWNrIG9wdGlvbnMgaW5zdGVhZCBvZiB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Rz
IG9mIHRoZSBqcVhIUiBvYmplY3Qgc3VjaCBhcyBqcVhIUi5kb25lKCkgb3IgdGhlIGRlcHJlY2F0
ZWQganFYSFIuc3VjY2VzcygpLlxuICAgICAqL1xuICAgIGFzeW5jPzogYm9vbGVhbjtcbiAgICAv
KipcbiAgICAgKiBBIHByZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVz
ZWQgdG8gbW9kaWZ5IHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkg
b2JqZWN0IGJlZm9yZSBpdCBpcyBzZW50LiBVc2UgdGhpcyB0byBzZXQgY3VzdG9tIGhlYWRlcnMs
IGV0Yy4gVGhlIGpxWEhSIGFuZCBzZXR0aW5ncyBvYmplY3RzIGFyZSBwYXNzZWQgYXMgYXJndW1l
bnRzLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuIFJldHVybmluZyBmYWxzZSBpbiB0aGUgYmVmb3Jl
U2VuZCBmdW5jdGlvbiB3aWxsIGNhbmNlbCB0aGUgcmVxdWVzdC4gQXMgb2YgalF1ZXJ5IDEuNSwg
dGhlIGJlZm9yZVNlbmQgb3B0aW9uIHdpbGwgYmUgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5
cGUgb2YgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBiZWZvcmVTZW5kPyAoanFYSFI6IEpRdWVyeVhI
Uiwgc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBJ
ZiBzZXQgdG8gZmFsc2UsIGl0IHdpbGwgZm9yY2UgcmVxdWVzdGVkIHBhZ2VzIG5vdCB0byBiZSBj
YWNoZWQgYnkgdGhlIGJyb3dzZXIuIE5vdGU6IFNldHRpbmcgY2FjaGUgdG8gZmFsc2Ugd2lsbCBv
bmx5IHdvcmsgY29ycmVjdGx5IHdpdGggSEVBRCBhbmQgR0VUIHJlcXVlc3RzLiBJdCB3b3JrcyBi
eSBhcHBlbmRpbmcgXCJfPXt0aW1lc3RhbXB9XCIgdG8gdGhlIEdFVCBwYXJhbWV0ZXJzLiBUaGUg
cGFyYW1ldGVyIGlzIG5vdCBuZWVkZWQgZm9yIG90aGVyIHR5cGVzIG9mIHJlcXVlc3RzLCBleGNl
cHQgaW4gSUU4IHdoZW4gYSBQT1NUIGlzIG1hZGUgdG8gYSBVUkwgdGhhdCBoYXMgYWxyZWFkeSBi
ZWVuIHJlcXVlc3RlZCBieSBhIEdFVC5cbiAgICAgKi9cbiAgICBjYWNoZT86IGJvb2xlYW47XG4g
ICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBm
aW5pc2hlcyAoYWZ0ZXIgc3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCku
IFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0d28gYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpR
dWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBhbmQgYSBzdHJpbmcgY2F0ZWdvcml6
aW5nIHRoZSBzdGF0dXMgb2YgdGhlIHJlcXVlc3QgKFwic3VjY2Vzc1wiLCBcIm5vdG1vZGlmaWVk
XCIsIFwiZXJyb3JcIiwgXCJ0aW1lb3V0XCIsIFwiYWJvcnRcIiwgb3IgXCJwYXJzZXJlcnJvclwi
KS4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGNvbXBsZXRlIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBh
cnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4g
VGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBsZXRlPyAoanFYSFI6IEpR
dWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9i
amVjdCBvZiBzdHJpbmcvcmVndWxhci1leHByZXNzaW9uIHBhaXJzIHRoYXQgZGV0ZXJtaW5lIGhv
dyBqUXVlcnkgd2lsbCBwYXJzZSB0aGUgcmVzcG9uc2UsIGdpdmVuIGl0cyBjb250ZW50IHR5cGUu
ICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udGVudHM/OiB7IFtrZXk6IHN0
cmluZ106IGFueTsgfTtcbiAgICAvL0FjY29yZGluZyB0byBqUXVlcnkuYWpheCBzb3VyY2UgY29k
ZSwgYWpheCdzIG9wdGlvbiBhY3R1YWxseSBhbGxvd3MgY29udGVudFR5cGUgdG8gc2V0IHRvIFwi
ZmFsc2VcIlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5
VHlwZWQvaXNzdWVzLzc0MlxuICAgIC8qKlxuICAgICAqIFdoZW4gc2VuZGluZyBkYXRhIHRvIHRo
ZSBzZXJ2ZXIsIHVzZSB0aGlzIGNvbnRlbnQgdHlwZS4gRGVmYXVsdCBpcyBcImFwcGxpY2F0aW9u
L3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLCB3aGljaCBpcyBmaW5lIGZv
ciBtb3N0IGNhc2VzLiBJZiB5b3UgZXhwbGljaXRseSBwYXNzIGluIGEgY29udGVudC10eXBlIHRv
ICQuYWpheCgpLCB0aGVuIGl0IGlzIGFsd2F5cyBzZW50IHRvIHRoZSBzZXJ2ZXIgKGV2ZW4gaWYg
bm8gZGF0YSBpcyBzZW50KS4gVGhlIFczQyBYTUxIdHRwUmVxdWVzdCBzcGVjaWZpY2F0aW9uIGRp
Y3RhdGVzIHRoYXQgdGhlIGNoYXJzZXQgaXMgYWx3YXlzIFVURi04OyBzcGVjaWZ5aW5nIGFub3Ro
ZXIgY2hhcnNldCB3aWxsIG5vdCBmb3JjZSB0aGUgYnJvd3NlciB0byBjaGFuZ2UgdGhlIGVuY29k
aW5nLlxuICAgICAqL1xuICAgIGNvbnRlbnRUeXBlPzogYW55O1xuICAgIC8qKlxuICAgICAqIFRo
aXMgb2JqZWN0IHdpbGwgYmUgbWFkZSB0aGUgY29udGV4dCBvZiBhbGwgQWpheC1yZWxhdGVkIGNh
bGxiYWNrcy4gQnkgZGVmYXVsdCwgdGhlIGNvbnRleHQgaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVz
ZW50cyB0aGUgYWpheCBzZXR0aW5ncyB1c2VkIGluIHRoZSBjYWxsICgkLmFqYXhTZXR0aW5ncyBt
ZXJnZWQgd2l0aCB0aGUgc2V0dGluZ3MgcGFzc2VkIHRvICQuYWpheCkuXG4gICAgICovXG4gICAg
Y29udGV4dD86IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
VHlwZS10by1kYXRhVHlwZSBjb252ZXJ0ZXJzLiBFYWNoIGNvbnZlcnRlcidzIHZhbHVlIGlzIGEg
ZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBvZiB0aGUgcmVzcG9u
c2UuICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udmVydGVycz86IHsgW2tl
eTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3aXNoIHRvIGZvcmNl
IGEgY3Jvc3NEb21haW4gcmVxdWVzdCAoc3VjaCBhcyBKU09OUCkgb24gdGhlIHNhbWUgZG9tYWlu
LCBzZXQgdGhlIHZhbHVlIG9mIGNyb3NzRG9tYWluIHRvIHRydWUuIFRoaXMgYWxsb3dzLCBmb3Ig
ZXhhbXBsZSwgc2VydmVyLXNpZGUgcmVkaXJlY3Rpb24gdG8gYW5vdGhlciBkb21haW4uICh2ZXJz
aW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY3Jvc3NEb21haW4/OiBib29sZWFuO1xuICAg
IC8qKlxuICAgICAqIERhdGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBJdCBpcyBjb252ZXJ0
ZWQgdG8gYSBxdWVyeSBzdHJpbmcsIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nLiBJdCdzIGFwcGVu
ZGVkIHRvIHRoZSB1cmwgZm9yIEdFVC1yZXF1ZXN0cy4gU2VlIHByb2Nlc3NEYXRhIG9wdGlvbiB0
byBwcmV2ZW50IHRoaXMgYXV0b21hdGljIHByb2Nlc3NpbmcuIE9iamVjdCBtdXN0IGJlIEtleS9W
YWx1ZSBwYWlycy4gSWYgdmFsdWUgaXMgYW4gQXJyYXksIGpRdWVyeSBzZXJpYWxpemVzIG11bHRp
cGxlIHZhbHVlcyB3aXRoIHNhbWUga2V5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdHJhZGl0
aW9uYWwgc2V0dGluZyAoZGVzY3JpYmVkIGJlbG93KS5cbiAgICAgKi9cbiAgICBkYXRhPzogYW55
O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgdXNlZCB0byBoYW5kbGUgdGhlIHJh
dyByZXNwb25zZSBkYXRhIG9mIFhNTEh0dHBSZXF1ZXN0LlRoaXMgaXMgYSBwcmUtZmlsdGVyaW5n
IGZ1bmN0aW9uIHRvIHNhbml0aXplIHRoZSByZXNwb25zZS4gWW91IHNob3VsZCByZXR1cm4gdGhl
IHNhbml0aXplZCBkYXRhLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0d28gYXJndW1lbnRzOiBUaGUg
cmF3IGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIGFuZCB0aGUgJ2RhdGFUeXBlJyBwYXJh
bWV0ZXIuXG4gICAgICovXG4gICAgZGF0YUZpbHRlcj8gKGRhdGE6IGFueSwgdHk6IGFueSk6IGFu
eTtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgeW91J3JlIGV4cGVjdGlu
ZyBiYWNrIGZyb20gdGhlIHNlcnZlci4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIGpRdWVyeSB3aWxs
IHRyeSB0byBpbmZlciBpdCBiYXNlZCBvbiB0aGUgTUlNRSB0eXBlIG9mIHRoZSByZXNwb25zZSAo
YW4gWE1MIE1JTUUgdHlwZSB3aWxsIHlpZWxkIFhNTCwgaW4gMS40IEpTT04gd2lsbCB5aWVsZCBh
IEphdmFTY3JpcHQgb2JqZWN0LCBpbiAxLjQgc2NyaXB0IHdpbGwgZXhlY3V0ZSB0aGUgc2NyaXB0
LCBhbmQgYW55dGhpbmcgZWxzZSB3aWxsIGJlIHJldHVybmVkIGFzIGEgc3RyaW5nKS5cbiAgICAg
Ki9cbiAgICBkYXRhVHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRv
IGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBmYWlscy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRo
cmVlIGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0
KSBvYmplY3QsIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBvY2N1
cnJlZCBhbmQgYW4gb3B0aW9uYWwgZXhjZXB0aW9uIG9iamVjdCwgaWYgb25lIG9jY3VycmVkLiBQ
b3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgKGJlc2lkZXMgbnVsbCkgYXJl
IFwidGltZW91dFwiLCBcImVycm9yXCIsIFwiYWJvcnRcIiwgYW5kIFwicGFyc2VyZXJyb3JcIi4g
V2hlbiBhbiBIVFRQIGVycm9yIG9jY3VycywgZXJyb3JUaHJvd24gcmVjZWl2ZXMgdGhlIHRleHR1
YWwgcG9ydGlvbiBvZiB0aGUgSFRUUCBzdGF0dXMsIHN1Y2ggYXMgXCJOb3QgRm91bmRcIiBvciBc
IkludGVybmFsIFNlcnZlciBFcnJvci5cIiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgZXJyb3Igc2V0
dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxs
IGJlIGNhbGxlZCBpbiB0dXJuLiBOb3RlOiBUaGlzIGhhbmRsZXIgaXMgbm90IGNhbGxlZCBmb3Ig
Y3Jvc3MtZG9tYWluIHNjcmlwdCBhbmQgY3Jvc3MtZG9tYWluIEpTT05QIHJlcXVlc3RzLiBUaGlz
IGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgZXJyb3I/IChqcVhIUjogSlF1ZXJ5WEhS
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGVycm9yVGhyb3c6IHN0cmluZyk6IGFueTtcbiAgICAvKipc
biAgICAgKiBXaGV0aGVyIHRvIHRyaWdnZXIgZ2xvYmFsIEFqYXggZXZlbnQgaGFuZGxlcnMgZm9y
IHRoaXMgcmVxdWVzdC4gVGhlIGRlZmF1bHQgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIHRvIHByZXZl
bnQgdGhlIGdsb2JhbCBoYW5kbGVycyBsaWtlIGFqYXhTdGFydCBvciBhamF4U3RvcCBmcm9tIGJl
aW5nIHRyaWdnZXJlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgQWpheCBF
dmVudHMuXG4gICAgICovXG4gICAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBB
biBvYmplY3Qgb2YgYWRkaXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzIHRvIHNlbmQgYWxv
bmcgd2l0aCByZXF1ZXN0cyB1c2luZyB0aGUgWE1MSHR0cFJlcXVlc3QgdHJhbnNwb3J0LiBUaGUg
aGVhZGVyIFgtUmVxdWVzdGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBhZGRlZCwg
YnV0IGl0cyBkZWZhdWx0IFhNTEh0dHBSZXF1ZXN0IHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGhlcmUu
IFZhbHVlcyBpbiB0aGUgaGVhZGVycyBzZXR0aW5nIGNhbiBhbHNvIGJlIG92ZXJ3cml0dGVuIGZy
b20gd2l0aGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uLiAodmVyc2lvbiBhZGRlZDogMS41KVxu
ICAgICAqL1xuICAgIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipc
biAgICAgKiBBbGxvdyB0aGUgcmVxdWVzdCB0byBiZSBzdWNjZXNzZnVsIG9ubHkgaWYgdGhlIHJl
c3BvbnNlIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHJlcXVlc3QuIFRoaXMgaXMgZG9uZSBi
eSBjaGVja2luZyB0aGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIuIERlZmF1bHQgdmFsdWUgaXMgZmFs
c2UsIGlnbm9yaW5nIHRoZSBoZWFkZXIuIEluIGpRdWVyeSAxLjQgdGhpcyB0ZWNobmlxdWUgYWxz
byBjaGVja3MgdGhlICdldGFnJyBzcGVjaWZpZWQgYnkgdGhlIHNlcnZlciB0byBjYXRjaCB1bm1v
ZGlmaWVkIGRhdGEuXG4gICAgICovXG4gICAgaWZNb2RpZmllZD86IGJvb2xlYW47XG4gICAgLyoq
XG4gICAgICogQWxsb3cgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdG8gYmUgcmVjb2duaXplZCBh
cyBcImxvY2FsLFwiIChlLmcuIHRoZSBmaWxlc3lzdGVtKSwgZXZlbiBpZiBqUXVlcnkgZG9lcyBu
b3QgcmVjb2duaXplIGl0IGFzIHN1Y2ggYnkgZGVmYXVsdC4gVGhlIGZvbGxvd2luZyBwcm90b2Nv
bHMgYXJlIGN1cnJlbnRseSByZWNvZ25pemVkIGFzIGxvY2FsOiBmaWxlLCAqLWV4dGVuc2lvbiwg
YW5kIHdpZGdldC4gSWYgdGhlIGlzTG9jYWwgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0
IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9k
LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgaXNMb2NhbD86IGJvb2xlYW47
XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgaW4g
YSBqc29ucCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mICdjYWxs
YmFjaycgaW4gdGhlICdjYWxsYmFjaz0/JyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgaW4gdGhl
IHVybC4gU28ge2pzb25wOidvbkpTT05QTG9hZCd9IHdvdWxkIHJlc3VsdCBpbiAnb25KU09OUExv
YWQ9PycgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIuIEFzIG9mIGpRdWVyeSAxLjUsIHNldHRpbmcgdGhl
IGpzb25wIG9wdGlvbiB0byBmYWxzZSBwcmV2ZW50cyBqUXVlcnkgZnJvbSBhZGRpbmcgdGhlIFwi
P2NhbGxiYWNrXCIgc3RyaW5nIHRvIHRoZSBVUkwgb3IgYXR0ZW1wdGluZyB0byB1c2UgXCI9P1wi
IGZvciB0cmFuc2Zvcm1hdGlvbi4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIGFsc28gZXhwbGlj
aXRseSBzZXQgdGhlIGpzb25wQ2FsbGJhY2sgc2V0dGluZy4gRm9yIGV4YW1wbGUsIHsganNvbnA6
IGZhbHNlLCBqc29ucENhbGxiYWNrOiBcImNhbGxiYWNrTmFtZVwiIH1cbiAgICAgKi9cbiAgICBq
c29ucD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjYWxsYmFjayBmdW5j
dGlvbiBuYW1lIGZvciBhIEpTT05QIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGlu
c3RlYWQgb2YgdGhlIHJhbmRvbSBuYW1lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGpRdWVy
eS4gSXQgaXMgcHJlZmVyYWJsZSB0byBsZXQgalF1ZXJ5IGdlbmVyYXRlIGEgdW5pcXVlIG5hbWUg
YXMgaXQnbGwgbWFrZSBpdCBlYXNpZXIgdG8gbWFuYWdlIHRoZSByZXF1ZXN0cyBhbmQgcHJvdmlk
ZSBjYWxsYmFja3MgYW5kIGVycm9yIGhhbmRsaW5nLiBZb3UgbWF5IHdhbnQgdG8gc3BlY2lmeSB0
aGUgY2FsbGJhY2sgd2hlbiB5b3Ugd2FudCB0byBlbmFibGUgYmV0dGVyIGJyb3dzZXIgY2FjaGlu
ZyBvZiBHRVQgcmVxdWVzdHMuIEFzIG9mIGpRdWVyeSAxLjUsIHlvdSBjYW4gYWxzbyB1c2UgYSBm
dW5jdGlvbiBmb3IgdGhpcyBzZXR0aW5nLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBvZiBqc29u
cENhbGxiYWNrIGlzIHNldCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uXG4g
ICAgICovXG4gICAganNvbnBDYWxsYmFjaz86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIG1pbWUg
dHlwZSB0byBvdmVycmlkZSB0aGUgWEhSIG1pbWUgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNS4x
KVxuICAgICAqL1xuICAgIG1pbWVUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgcGFz
c3dvcmQgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhU
VFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgcGFzc3dvcmQ/
OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgZGF0YSBwYXNzZWQgaW4gdG8g
dGhlIGRhdGEgb3B0aW9uIGFzIGFuIG9iamVjdCAodGVjaG5pY2FsbHksIGFueXRoaW5nIG90aGVy
IHRoYW4gYSBzdHJpbmcpIHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBpbnRvIGEg
cXVlcnkgc3RyaW5nLCBmaXR0aW5nIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBcImFwcGxp
Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLiBJZiB5b3Ugd2FudCB0byBzZW5kIGEgRE9N
RG9jdW1lbnQsIG9yIG90aGVyIG5vbi1wcm9jZXNzZWQgZGF0YSwgc2V0IHRoaXMgb3B0aW9uIHRv
IGZhbHNlLlxuICAgICAqL1xuICAgIHByb2Nlc3NEYXRhPzogYm9vbGVhbjtcbiAgICAvKipcbiAg
ICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgXCJzY3JpcHRcIiB0cmFuc3BvcnQgaXMgdXNlZCAo
ZS5nLiwgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIHdpdGggXCJqc29ucFwiIG9yIFwic2NyaXB0XCIg
ZGF0YVR5cGUgYW5kIFwiR0VUXCIgdHlwZSkuIFNldHMgdGhlIGNoYXJzZXQgYXR0cmlidXRlIG9u
IHRoZSBzY3JpcHQgdGFnIHVzZWQgaW4gdGhlIHJlcXVlc3QuIFVzZWQgd2hlbiB0aGUgY2hhcmFj
dGVyIHNldCBvbiB0aGUgbG9jYWwgcGFnZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBvbiB0
aGUgcmVtb3RlIHNjcmlwdC5cbiAgICAgKi9cbiAgICBzY3JpcHRDaGFyc2V0Pzogc3RyaW5nO1xu
ICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBudW1lcmljIEhUVFAgY29kZXMgYW5kIGZ1bmN0
aW9ucyB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVzcG9uc2UgaGFzIHRoZSBjb3JyZXNwb25kaW5n
IGNvZGUuIGYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIHN0YXR1cyBjb2RlIGZ1bmN0
aW9ucyB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJhY2s7IGlm
IGl0IHJlc3VsdHMgaW4gYW4gZXJyb3IgKGluY2x1ZGluZyAzeHggcmVkaXJlY3QpLCB0aGV5IHRh
a2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZXJyb3IgY2FsbGJhY2suICh2ZXJzaW9uIGFk
ZGVkOiAxLjUpXG4gICAgICovXG4gICAgc3RhdHVzQ29kZT86IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1
ZXN0IHN1Y2NlZWRzLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdGhyZWUgYXJndW1lbnRzOiBU
aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8g
dGhlIGRhdGFUeXBlIHBhcmFtZXRlcjsgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgc3RhdHVzOyBh
bmQgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QuIEFz
IG9mIGpRdWVyeSAxLjUsIHRoZSBzdWNjZXNzIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBv
ZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBp
cyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIHN1Y2Nlc3M/IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUik6IGFueTtcbiAgICAvKipcbiAgICAgKiBT
ZXQgYSB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB0aGUgcmVxdWVzdC4gVGhpcyB3aWxs
IG92ZXJyaWRlIGFueSBnbG9iYWwgdGltZW91dCBzZXQgd2l0aCAkLmFqYXhTZXR1cCgpLiBUaGUg
dGltZW91dCBwZXJpb2Qgc3RhcnRzIGF0IHRoZSBwb2ludCB0aGUgJC5hamF4IGNhbGwgaXMgbWFk
ZTsgaWYgc2V2ZXJhbCBvdGhlciByZXF1ZXN0cyBhcmUgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBicm93
c2VyIGhhcyBubyBjb25uZWN0aW9ucyBhdmFpbGFibGUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHJl
cXVlc3QgdG8gdGltZSBvdXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50LiBJbiBqUXVlcnkgMS40Lngg
YW5kIGJlbG93LCB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IHdpbGwgYmUgaW4gYW4gaW52YWxp
ZCBzdGF0ZSBpZiB0aGUgcmVxdWVzdCB0aW1lcyBvdXQ7IGFjY2Vzc2luZyBhbnkgb2JqZWN0IG1l
bWJlcnMgbWF5IHRocm93IGFuIGV4Y2VwdGlvbi4gSW4gRmlyZWZveCAzLjArIG9ubHksIHNjcmlw
dCBhbmQgSlNPTlAgcmVxdWVzdHMgY2Fubm90IGJlIGNhbmNlbGxlZCBieSBhIHRpbWVvdXQ7IHRo
ZSBzY3JpcHQgd2lsbCBydW4gZXZlbiBpZiBpdCBhcnJpdmVzIGFmdGVyIHRoZSB0aW1lb3V0IHBl
cmlvZC5cbiAgICAgKi9cbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFNl
dCB0aGlzIHRvIHRydWUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSB0cmFkaXRpb25hbCBzdHlsZSBv
ZiBwYXJhbSBzZXJpYWxpemF0aW9uLlxuICAgICAqL1xuICAgIHRyYWRpdGlvbmFsPzogYm9vbGVh
bjtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiByZXF1ZXN0IHRvIG1ha2UgKFwiUE9TVFwi
IG9yIFwiR0VUXCIpLCBkZWZhdWx0IGlzIFwiR0VUXCIuIE5vdGU6IE90aGVyIEhUVFAgcmVxdWVz
dCBtZXRob2RzLCBzdWNoIGFzIFBVVCBhbmQgREVMRVRFLCBjYW4gYWxzbyBiZSB1c2VkIGhlcmUs
IGJ1dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vycy5cbiAgICAgKi9cbiAg
ICB0eXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhl
IFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqL1xuICAgIHVybD86IHN0
cmluZztcbiAgICAvKipcbiAgICAgKiBBIHVzZXJuYW1lIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRw
UmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1
ZXN0LlxuICAgICAqL1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIENh
bGxiYWNrIGZvciBjcmVhdGluZyB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0LiBEZWZhdWx0cyB0
byB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGF2YWlsYWJsZSAoSUUpLCB0aGUgWE1MSHR0cFJlcXVl
c3Qgb3RoZXJ3aXNlLiBPdmVycmlkZSB0byBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9u
IGZvciBYTUxIdHRwUmVxdWVzdCBvciBlbmhhbmNlbWVudHMgdG8gdGhlIGZhY3RvcnkuXG4gICAg
ICovXG4gICAgeGhyPzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBmaWVsZE5h
bWUtZmllbGRWYWx1ZSBwYWlycyB0byBzZXQgb24gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0LiBGb3Ig
ZXhhbXBsZSwgeW91IGNhbiB1c2UgaXQgdG8gc2V0IHdpdGhDcmVkZW50aWFscyB0byB0cnVlIGZv
ciBjcm9zcy1kb21haW4gcmVxdWVzdHMgaWYgbmVlZGVkLiBJbiBqUXVlcnkgMS41LCB0aGUgd2l0
aENyZWRlbnRpYWxzIHByb3BlcnR5IHdhcyBub3QgcHJvcGFnYXRlZCB0byB0aGUgbmF0aXZlIFhI
UiBhbmQgdGh1cyBDT1JTIHJlcXVlc3RzIHJlcXVpcmluZyBpdCB3b3VsZCBpZ25vcmUgdGhpcyBm
bGFnLiBGb3IgdGhpcyByZWFzb24sIHdlIHJlY29tbWVuZCB1c2luZyBqUXVlcnkgMS41LjErIHNo
b3VsZCB5b3UgcmVxdWlyZSB0aGUgdXNlIG9mIGl0LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4g
ICAgICovXG4gICAgeGhyRmllbGRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG59XG5cbi8q
XG4gICAgSW50ZXJmYWNlIGZvciB0aGUganFYSFIgb2JqZWN0XG4qL1xuaW50ZXJmYWNlIEpRdWVy
eVhIUiBleHRlbmRzIFhNTEh0dHBSZXF1ZXN0LCBKUXVlcnlQcm9taXNlPGFueT4ge1xuICAgIG92
ZXJyaWRlTWltZVR5cGUobWltZVR5cGU6IHN0cmluZyk6IGFueTtcbiAgICBhYm9ydChzdGF0dXNU
ZXh0Pzogc3RyaW5nKTogdm9pZDtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVl
cnkgY2FsbGJhY2tcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5Q2FsbGJhY2sge1xuICAgIGFkZCguLi5j
YWxsYmFja3M6IGFueVtdKTogYW55O1xuICAgIGRpc2FibGUoKTogYW55O1xuICAgIGVtcHR5KCk6
IGFueTtcbiAgICBmaXJlKC4uLmFyZ3VtZW50czogYW55W10pOiBhbnk7XG4gICAgZmlyZWQoKTog
Ym9vbGVhbjtcbiAgICBmaXJlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55
O1xuICAgIGhhcyhjYWxsYmFjazogYW55KTogYm9vbGVhbjtcbiAgICBsb2NrKCk6IGFueTtcbiAg
ICBsb2NrZWQoKTogYm9vbGVhbjtcbiAgICByZW1vdmUoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFu
eTtcbn1cblxuLypcbiAgICBBbGxvd3MgalF1ZXJ5IFByb21pc2VzIHRvIGludGVyb3Agd2l0aCBu
b24talF1ZXJ5IHByb21pc2VzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+
IHtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChy
ZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4o
b25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVj
dD86IChyZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRo
ZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55
KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xu
ICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+LCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4p
OiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRo
ZSBKUXVlcnkgcHJvbWlzZSwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5
UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBh
bHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRv
bmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4u
LmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4u
cHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBhbHdheXMo
Li4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSgu
Li5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5m
YWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4u
cHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIC8vIERl
cHJlY2F0ZWQgLSBnaXZlbiBubyB0eXBpbmdzXG4gICAgcGlwZShkb25lRmlsdGVyPzogKHg6IGFu
eSkgPT4gYW55LCBmYWlsRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBwcm9ncmVzc0ZpbHRlcj86
ICh4OiBhbnkpID0+IGFueSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIHRoZW48VT4ob25G
dWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9
PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5
UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9u
UHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNl
PFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVz
cz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8
VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVy
eVByb21pc2U8VT47XG5cbiAgICAvLyBCZWNhdXNlIEpRdWVyeSBQcm9taXNlcyBTdWNrXG4gICAg
dGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICgu
Li5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55
W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICgu
Li52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAo
Li4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFu
eVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAo
Li4udmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+
IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86
ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jl
c3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xu
fVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBkZWZlcnJlZCwgcGFydCBvZiBj
YWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5RGVmZXJyZWQ8VD4gZXh0ZW5kcyBKUXVlcnlQ
cm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFs
d2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRv
bmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCgu
Li5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcygu
Li5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBhbHdh
eXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRv
bmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWls
KC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jl
c3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAg
ICBub3RpZnkoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBub3RpZnlX
aXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxu
ICAgIHJlamVjdCguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlamVj
dFdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
XG4gICAgcmVzb2x2ZSh2YWw6IFQpOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlKC4u
LmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZVdpdGgoY29udGV4
dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHN0YXRlKCk6
IHN0cmluZztcblxuICAgIHByb21pc2UodGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxUPjtc
bn1cblxuLypcbiAgICBJbnRlcmZhY2Ugb2YgdGhlIEpRdWVyeSBleHRlbnNpb24gb2YgdGhlIFcz
QyBldmVudCBvYmplY3RcbiovXG5cbmludGVyZmFjZSBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QgZXh0
ZW5kcyBFdmVudCB7XG4gICAgZGF0YTogYW55O1xuICAgIGRlbGVnYXRlVGFyZ2V0OiBFbGVtZW50
O1xuICAgIGlzRGVmYXVsdFByZXZlbnRlZCgpOiBib29sZWFuO1xuICAgIGlzSW1tZWRpYXRlUHJv
cG9nYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTog
Ym9vbGVhbjtcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBwcmV2ZW50RGVmYXVsdCgpOiBh
bnk7XG4gICAgcmVsYXRlZFRhcmdldDogRWxlbWVudDtcbiAgICByZXN1bHQ6IGFueTtcbiAgICBz
dG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb24oKTog
dm9pZDtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgd2hpY2g6
IG51bWJlcjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5SW5w
dXRFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgYWx0S2V5
OiBib29sZWFuO1xuICAgIGN0cmxLZXk6IGJvb2xlYW47XG4gICAgbWV0YUtleTogYm9vbGVhbjtc
biAgICBzaGlmdEtleTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBidXR0b246IG51bWJl
cjtcbiAgICBjbGllbnRYOiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAgIG9mZnNl
dFg6IG51bWJlcjtcbiAgICBvZmZzZXRZOiBudW1iZXI7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAg
ICBwYWdlWTogbnVtYmVyO1xuICAgIHNjcmVlblg6IG51bWJlcjtcbiAgICBzY3JlZW5ZOiBudW1i
ZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlLZXlFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlu
cHV0RXZlbnRPYmplY3Qge1xuICAgIGNoYXI6IGFueTtcbiAgICBjaGFyQ29kZTogbnVtYmVyO1xu
ICAgIGtleTogYW55O1xuICAgIGtleUNvZGU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVy
eVBvcFN0YXRlRXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAg
IG9yaWdpbmFsRXZlbnQ6IFBvcFN0YXRlRXZlbnQ7XG59XG5cbmludGVyZmFjZSBKUXVlcnlFdmVu
dE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCwgSlF1ZXJ5SW5wdXRFdmVudE9i
amVjdCwgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCwgSlF1ZXJ5S2V5RXZlbnRPYmplY3QsIEpRdWVy
eVBvcFN0YXRlRXZlbnRPYmplY3Qge1xufVxuXG4vKlxuICAgIENvbGxlY3Rpb24gb2YgcHJvcGVy
dGllcyBvZiB0aGUgY3VycmVudCBicm93c2VyXG4qL1xuXG5pbnRlcmZhY2UgSlF1ZXJ5U3VwcG9y
dCB7XG4gICAgYWpheD86IGJvb2xlYW47XG4gICAgYm94TW9kZWw/OiBib29sZWFuO1xuICAgIGNo
YW5nZUJ1YmJsZXM/OiBib29sZWFuO1xuICAgIGNoZWNrQ2xvbmU/OiBib29sZWFuO1xuICAgIGNo
ZWNrT24/OiBib29sZWFuO1xuICAgIGNvcnM/OiBib29sZWFuO1xuICAgIGNzc0Zsb2F0PzogYm9v
bGVhbjtcbiAgICBocmVmTm9ybWFsaXplZD86IGJvb2xlYW47XG4gICAgaHRtbFNlcmlhbGl6ZT86
IGJvb2xlYW47XG4gICAgbGVhZGluZ1doaXRlc3BhY2U/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVD
aGVja2VkPzogYm9vbGVhbjtcbiAgICBub0Nsb25lRXZlbnQ/OiBib29sZWFuO1xuICAgIG9wYWNp
dHk/OiBib29sZWFuO1xuICAgIG9wdERpc2FibGVkPzogYm9vbGVhbjtcbiAgICBvcHRTZWxlY3Rl
ZD86IGJvb2xlYW47XG4gICAgc2NyaXB0RXZhbD8gKCk6IGJvb2xlYW47XG4gICAgc3R5bGU/OiBi
b29sZWFuO1xuICAgIHN1Ym1pdEJ1YmJsZXM/OiBib29sZWFuO1xuICAgIHRib2R5PzogYm9vbGVh
bjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBhcmFtIHtcbiAgICAob2JqOiBhbnkpOiBzdHJpbmc7
XG4gICAgKG9iajogYW55LCB0cmFkaXRpb25hbDogYm9vbGVhbik6IHN0cmluZztcbn1cblxuLyoq
XG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gY29uc3RydWN0IGpRdWVyeSBldmVudHMgKHdpdGgg
JC5FdmVudCkuIEl0IGlzXG4gKiBkZWZpbmVkIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBpbmxpbmUg
aW4gSlF1ZXJ5U3RhdGljIHRvIGFsbG93XG4gKiBvdmVycmlkaW5nIHRoZSBjb25zdHJ1Y3Rpb24g
ZnVuY3Rpb24gd2l0aCBzcGVjaWZpYyBzdHJpbmdzXG4gKiByZXR1cm5pbmcgc3BlY2lmaWMgZXZl
bnQgb2JqZWN0cy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVyeUV2ZW50Q29uc3RydWN0b3Ige1xuICAg
IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0
O1xuICAgIG5ldyAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlF
dmVudE9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gc3BlY2lmeSBl
YXNpbmcgZnVuY3Rpb25zLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RWFzaW5nIHtcbiAgICBsaW5l
YXIocDogbnVtYmVyKTogbnVtYmVyO1xuICAgIHN3aW5nKHA6IG51bWJlcik6IG51bWJlcjtcbn1c
blxuLypcbiAgICBTdGF0aWMgbWVtYmVycyBvZiBqUXVlcnkgKHRob3NlIG9uICQgYW5kIGpRdWVy
eSB0aGVtc2VsdmVzKVxuKi9cbmludGVyZmFjZSBKUXVlcnlTdGF0aWMge1xuXG4gICAgLyoqXG4g
ICAgICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBj
b25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBk
ZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAg
ICAqL1xuICAgIGFqYXgoc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZ3Mg
QSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3Qu
IEFsbCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkg
b3B0aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHVybDogc3RyaW5n
LCBzZXR0aW5ncz86IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxu
ICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRp
b25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nl
c3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZXMgQW4gb3B0
aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGRhdGFU
eXBlc1xuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1
ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIo
ZGF0YVR5cGVzOiBzdHJpbmcsIGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1
ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuICAgIC8q
KlxuICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBv
cHRpb25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHBy
b2Nlc3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFu
ZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAg
ICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRz
OiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG5c
biAgICBhamF4U2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncztcblxuICAgICAvKipcbiAgICAg
ICogU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy4gSXRzIHVzZSBp
cyBub3QgcmVjb21tZW5kZWQuXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSBvcHRpb25zIEEgc2V0
IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBBamF4IHJlcXVl
c3QuIEFsbCBvcHRpb25zIGFyZSBvcHRpb25hbC5cbiAgICAgICovXG4gICAgYWpheFNldHVwKG9w
dGlvbnM6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2Fk
IGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRo
ZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5j
dGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBw
YXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4g
RGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5c
biAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJp
bmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZl
ciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQg
dG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEg
Y2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVk
cy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9t
IHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlw
dCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAg
ICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9i
amVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVz
dC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhl
Y3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRo
ZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxp
Z2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdl
dCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmlu
Zyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZy
b20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVz
dCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhh
dCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRK
U09OKHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5n
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICog
TG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCBy
ZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRo
ZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBB
IHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0
aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRo
YXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0
SlNPTih1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRl
eHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xu
ICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVz
aW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJp
bmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAg
ICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0
aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxu
ICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/
OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFu
eSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGEgSmF2YVNjcmlwdCBmaWxlIGZy
b20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QsIHRoZW4gZXhlY3V0ZSBpdC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRv
IHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxu
ICAgICAqL1xuICAgIGdldFNjcmlwdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChzY3JpcHQ6IHN0
cmluZywgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVl
cnlYSFI7XG5cbiAgICBwYXJhbTogSlF1ZXJ5UGFyYW07XG5cbiAgICAvKipcbiAgICAgKiBMb2Fk
IGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVu
Y3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQg
aWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4g
ICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUg
c2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRl
eHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0
YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0
YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZy
b20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVl
c3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcg
dGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFy
YW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJl
cXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2Fu
IGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBv
ZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vl
c3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVy
bDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1
czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTog
SlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNp
bmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJp
bmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAg
ICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0
aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBS
ZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQg
Y2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBm
cm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNj
cmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86
IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6
IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcblxuICAg
IC8qKlxuICAgICAqIEEgbXVsdGktcHVycG9zZSBjYWxsYmFja3MgbGlzdCBvYmplY3QgdGhhdCBw
cm92aWRlcyBhIHBvd2VyZnVsIHdheSB0byBtYW5hZ2UgY2FsbGJhY2sgbGlzdHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZmxhZ3MgQW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQg
ZmxhZ3MgdGhhdCBjaGFuZ2UgaG93IHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMuXG4gICAgICov
XG4gICAgQ2FsbGJhY2tzKGZsYWdzPzogc3RyaW5nKTogSlF1ZXJ5Q2FsbGJhY2s7XG5cbiAgICAv
KipcbiAgICAgKiBIb2xkcyBvciByZWxlYXNlcyB0aGUgZXhlY3V0aW9uIG9mIGpRdWVyeSdzIHJl
YWR5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhvbGQgSW5kaWNhdGVzIHdoZXRoZXIg
dGhlIHJlYWR5IGhvbGQgaXMgYmVpbmcgcmVxdWVzdGVkIG9yIHJlbGVhc2VkXG4gICAgICovXG4g
ICAgaG9sZFJlYWR5KGhvbGQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgKHNlbGVjdG9yOiBzdHJp
bmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBKUXVl
cnk7XG4gICAgKG9iamVjdDoge30pOiBKUXVlcnk7XG4gICAgKGVsZW1lbnRBcnJheTogRWxlbWVu
dFtdKTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICAoZnVuYzog
RnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgKGFycmF5OiBhbnlbXSk6IEpRdWVyeTtcbiAgICAoKTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVsaW5xdWlzaCBqUXVlcnkncyBjb250cm9sIG9m
IHRoZSAkIHZhcmlhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlbW92ZUFsbCBBIEJvb2xl
YW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJlbW92ZSBhbGwgalF1ZXJ5IHZhcmlhYmxlcyBmcm9t
IHRoZSBnbG9iYWwgc2NvcGUgKGluY2x1ZGluZyBqUXVlcnkgaXRzZWxmKS5cbiAgICAgKi9cbiAg
ICBub0NvbmZsaWN0KHJlbW92ZUFsbD86IGJvb2xlYW4pOiBPYmplY3Q7XG5cbiAgICAvKipcbiAg
ICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBv
biBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXBy
ZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJl
ZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmpl
Y3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBKUXVlcnlHZW5lcmljUHJv
bWlzZTxUPltdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBh
IHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBv
YmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9u
b3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUg
RGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xu
ICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8q
KlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJh
c2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0
IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRl
ZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0
IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IGFueVtdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGNzc0hvb2tzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtc
biAgICBjc3NOdW1iZXI6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGFyYml0cmFyeSBk
YXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuIFJldHVybnMgdGhlIHZh
bHVlIHRoYXQgd2FzIHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00g
ZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEg
c3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICogQHBhcmFtIHZh
bHVlIFRoZSBuZXcgZGF0YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBkYXRhPFQ+KGVsZW1lbnQ6IEVs
ZW1lbnQsIGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJu
cyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpR
dWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBm
b3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVs
ZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0
cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqL1xuICAgIGRhdGEo
ZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogUmV0
dXJucyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5
IGpRdWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9y
ZSBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9N
IGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICovXG4gICAgZGF0YShl
bGVtZW50OiBFbGVtZW50KTogYW55O1xuXG4gICAgZGVxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBx
dWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBoYXNEYXRhKGVsZW1lbnQ6IEVsZW1lbnQp
OiBib29sZWFuO1xuXG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3Ry
aW5nKTogYW55W107XG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJp
bmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShl
bGVtZW50OiBFbGVtZW50LCBuYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJy
ZWRcbiAgICBEZWZlcnJlZDxUPihiZWZvcmVTdGFydD86IChkZWZlcnJlZDogSlF1ZXJ5RGVmZXJy
ZWQ8VD4pID0+IGFueSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAg
IGZ4OiB7IHRpY2s6ICgpID0+IHZvaWQ7IGludGVydmFsOiBudW1iZXI7IHN0b3A6ICgpID0+IHZv
aWQ7IHNwZWVkczogeyBzbG93OiBudW1iZXI7IGZhc3Q6IG51bWJlcjsgfTsgb2ZmOiBib29sZWFu
OyBzdGVwOiBhbnk7IH07XG5cbiAgICAvLyBFdmVudHNcbiAgICBwcm94eShmbjogKC4uLmFyZ3M6
IGFueVtdKSA9PiBhbnksIGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAg
cHJveHkoY29udGV4dDogYW55LCBuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYW55O1xu
XG4gICAgRXZlbnQ6IEpRdWVyeUV2ZW50Q29uc3RydWN0b3I7XG5cbiAgICAvLyBJbnRlcm5hbHNc
biAgICBlcnJvcihtZXNzYWdlOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3Vz
XG4gICAgZXhwcjogYW55O1xuICAgIGZuOiBhbnk7ICAvL1RPRE86IERlY2lkZSBob3cgd2Ugd2Fu
dCB0byB0eXBlIHRoaXNcbiAgICBpc1JlYWR5OiBib29sZWFuO1xuXG4gICAgLy8gUHJvcGVydGll
c1xuICAgIHN1cHBvcnQ6IEpRdWVyeVN1cHBvcnQ7XG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBj
b250YWlucyhjb250YWluZXI6IEVsZW1lbnQsIGNvbnRhaW5lZDogRWxlbWVudCk6IGJvb2xlYW47
XG5cbiAgICBlYWNoKGNvbGxlY3Rpb246IGFueSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IGFu
eSwgdmFsdWVPZkVsZW1lbnQ6IGFueSkgPT4gYW55KTogYW55O1xuICAgIGVhY2goY29sbGVjdGlv
bjogSlF1ZXJ5LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVu
dDogSFRNTEVsZW1lbnQpID0+IGFueSk6IGFueTtcbiAgICBlYWNoPFQ+KGNvbGxlY3Rpb246IFRb
XSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IFQpID0+
IGFueSk6IGFueTtcblxuICAgIGV4dGVuZCh0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBh
bnk7XG4gICAgZXh0ZW5kKGRlZXA6IGJvb2xlYW4sIHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlb
XSk6IGFueTtcblxuICAgIGdsb2JhbEV2YWwoY29kZTogc3RyaW5nKTogYW55O1xuXG4gICAgZ3Jl
cDxUPihhcnJheTogVFtdLCBmdW5jOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTog
bnVtYmVyKSA9PiBib29sZWFuLCBpbnZlcnQ/OiBib29sZWFuKTogVFtdO1xuXG4gICAgaW5BcnJh
eTxUPih2YWx1ZTogVCwgYXJyYXk6IFRbXSwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyO1xu
XG4gICAgaXNBcnJheShvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNFbXB0eU9iamVjdChvYmo6
IGFueSk6IGJvb2xlYW47XG4gICAgaXNGdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW47XG4gICAg
aXNOdW1lcmljKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgIGlzUGxhaW5PYmplY3Qob2JqOiBh
bnkpOiBib29sZWFuO1xuICAgIGlzV2luZG93KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1hN
TERvYyhub2RlOiBOb2RlKTogYm9vbGVhbjtcblxuICAgIG1ha2VBcnJheShvYmo6IGFueSk6IGFu
eVtdO1xuXG4gICAgbWFwPFQsIFU+KGFycmF5OiBUW10sIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJy
YXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBVKTogVVtdO1xuICAgIG1hcChhcnJheTog
YW55LCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBhbnksIGluZGV4SW5BcnJheTogYW55KSA9
PiBhbnkpOiBhbnk7XG5cbiAgICBtZXJnZTxUPihmaXJzdDogVFtdLCBzZWNvbmQ6IFRbXSk6IFRb
XTtcbiAgICBtZXJnZTxULFU+KGZpcnN0OiBUW10sIHNlY29uZDogVVtdKTogYW55W107XG5cbiAg
ICBub29wKCk6IGFueTtcblxuICAgIG5vdygpOiBudW1iZXI7XG5cbiAgICBwYXJzZUpTT04oanNv
bjogc3RyaW5nKTogYW55O1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8g
YW4gWE1MIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFhIHdlbGwtZm9ybWVk
IFhNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICovXG4gICAgcGFyc2VYTUwoZGF0YTogc3Ry
aW5nKTogWE1MRG9jdW1lbnQ7XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5h
bWU6IHN0cmluZywgbmV3UXVldWU6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgdHJpbShzdHI6IHN0
cmluZyk6IHN0cmluZztcblxuICAgIHR5cGUob2JqOiBhbnkpOiBzdHJpbmc7XG5cbiAgICB1bmlx
dWUoYXJyOiBhbnlbXSk6IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5n
IGludG8gYW4gYXJyYXkgb2YgRE9NIG5vZGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEg
SFRNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICogQHBhcmFtIGNvbnRleHQgRE9NIGVsZW1l
bnQgdG8gc2VydmUgYXMgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIEhUTUwgZnJhZ21lbnQgd2ls
bCBiZSBjcmVhdGVkXG4gICAgICogQHBhcmFtIGtlZXBTY3JpcHRzIEEgQm9vbGVhbiBpbmRpY2F0
aW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgSFRNTCBzdHJpbmdc
biAgICAgKi9cbiAgICBwYXJzZUhUTUwoZGF0YTogc3RyaW5nLCBjb250ZXh0PzogSFRNTEVsZW1l
bnQsIGtlZXBTY3JpcHRzPzogYm9vbGVhbik6IGFueVtdO1xuXG4gICAgQW5pbWF0aW9uKGVsZW06
IGFueSwgcHJvcGVydGllczogYW55LCBvcHRpb25zOiBhbnkpOiBhbnk7XG5cbiAgICBlYXNpbmc6
IEpRdWVyeUVhc2luZztcbn1cblxuLypcbiAgICBUaGUgalF1ZXJ5IGluc3RhbmNlIG1lbWJlcnNc
biovXG5pbnRlcmZhY2UgSlF1ZXJ5IHtcbiAgICAvLyBBSkFYXG4gICAgYWpheENvbXBsZXRlKGhh
bmRsZXI6IGFueSk6IEpRdWVyeTtcbiAgICBhamF4RXJyb3IoaGFuZGxlcjogKGV2ZW50OiBhbnks
IGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgYWpheFNlbmQoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRp
bmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0YXJ0
KGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RvcChoYW5kbGVyOiAoKSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN1Y2Nlc3MoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpx
WEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBsb2FkKHVybDogc3RyaW5nLCBkYXRhPzogYW55LCBjb21wbGV0ZT86IGFueSk6IEpR
dWVyeTtcblxuICAgIHNlcmlhbGl6ZSgpOiBzdHJpbmc7XG4gICAgc2VyaWFsaXplQXJyYXkoKTog
YW55W107XG5cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgYWRkQ2xhc3MoY2xhc3NOYW1lczogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIGFkZENsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjdXJyZW50Q2xh
c3M6IGFueSkgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gaHR0cDovL2FwaS5qcXVlcnku
Y29tL2FkZEJhY2svXG4gICAgYWRkQmFjayhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxu
XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgYXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihhdHRyaWJ1
dGVOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBhdHRyOiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcbiAgICBhdHRyKG1hcDogYW55KTogSlF1ZXJ5O1xuXG4gICAgaGFzQ2xhc3MoY2xhc3NO
YW1lOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gICAgaHRtbCgpOiBzdHJpbmc7XG4gICAgaHRtbCho
dG1sU3RyaW5nOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbChodG1sQ29udGVudDogKGluZGV4
OiBudW1iZXIsIG9sZGh0bWw6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwo
b2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTog
YW55O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7
XG4gICAgcHJvcChtYXA6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3Ry
aW5nLCBmdW5jOiAoaW5kZXg6IGFueSwgb2xkUHJvcGVydHlWYWx1ZTogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICByZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHJlbW92ZUNsYXNzKGNsYXNzTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcbiAgICByZW1v
dmVDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIHJlbW92ZVByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b2dn
bGVDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAg
IHRvZ2dsZUNsYXNzKHN3dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhm
dW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnksIHN3dGNoOiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIHZhbCgpOiBhbnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAg
ICB2YWwodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IG51bWJlcik6IEpR
dWVyeTtcbiAgICB2YWwoZnVuYzogKGluZGV4OiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2Ygc3R5bGUgcHJvcGVydGll
cyBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eS5cbiAgICAg
Ki9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQg
ZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3Bl
cnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJv
cGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVy
dGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1
ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9w
ZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9w
ZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJp
bmdbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3Bl
cnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFs
dWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXJbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hl
ZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJv
cGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhl
IHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUg
aW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1
ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2
YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiBy
ZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBS
ZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQg
dGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFt
ZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+IG51bWJl
cik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRp
ZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBwcm9wZXJ0aWVzIEFuIG9iamVjdCBvZiBwcm9wZXJ0eS12YWx1ZSBwYWlycyB0byBzZXQuXG4g
ICAgICovXG4gICAgY3NzKHByb3BlcnRpZXM6IE9iamVjdCk6IEpRdWVyeTtcblxuICAgIGhlaWdo
dCgpOiBudW1iZXI7XG4gICAgaGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgaGVp
Z2h0KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KGZ1bmM6IChpbmRleDogYW55
LCBoZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJIZWlnaHQoKTogbnVt
YmVyO1xuICAgIGlubmVySGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBpbm5l
cldpZHRoKCk6IG51bWJlcjtcbiAgICBpbm5lcldpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7
XG5cbiAgICBvZmZzZXQoKTogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB9O1xuICAgIG9m
ZnNldChjb29yZGluYXRlczogYW55KTogSlF1ZXJ5O1xuICAgIG9mZnNldChmdW5jOiAoaW5kZXg6
IGFueSwgY29vcmRzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG91dGVySGVpZ2h0KGlu
Y2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVySGVpZ2h0KHZhbHVlOiBu
dW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJXaWR0
aChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlcldpZHRoKHZhbHVl
OiBudW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgcG9zaXRp
b24oKTogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyOyB9O1xuXG4gICAgc2Nyb2xsTGVmdCgp
OiBudW1iZXI7XG4gICAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAg
c2Nyb2xsVG9wKCk6IG51bWJlcjtcbiAgICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcik6IEpRdWVy
eTtcblxuICAgIHdpZHRoKCk6IG51bWJlcjtcbiAgICB3aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1
ZXJ5O1xuICAgIHdpZHRoKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgd2lkdGgoZnVuYzog
KGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEYXRh
XG4gICAgY2xlYXJRdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBkYXRh
KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGRhdGEob2JqOiB7IFtrZXk6
IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICBkYXRhKGtleT86IHN0cmluZyk6IGFueTtc
blxuICAgIGRlcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3Zl
RGF0YShuYW1lT3JMaXN0PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBw
cm9taXNlKHR5cGU/OiBhbnksIHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8YW55Pjtcblxu
ICAgIC8vIEVmZmVjdHNcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBh
bnksIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVz
OiBhbnksIGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNvbXBsZXRlPzogRnVuY3Rp
b24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IHsgZHVy
YXRpb24/OiBhbnk7IGVhc2luZz86IHN0cmluZzsgY29tcGxldGU/OiBGdW5jdGlvbjsgc3RlcD86
IEZ1bmN0aW9uOyBxdWV1ZT86IGJvb2xlYW47IHNwZWNpYWxFYXNpbmc/OiBhbnk7IH0pOiBKUXVl
cnk7XG5cbiAgICBkZWxheShkdXJhdGlvbjogbnVtYmVyLCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNr
PzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0
cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG8oZHVyYXRpb246IGFu
eSwgb3BhY2l0eTogbnVtYmVyLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG8o
ZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVtYmVyLCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNr
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZpbmlzaCgpOiBKUXVl
cnk7XG5cbiAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtc
biAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBK
UXVlcnk7XG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/
OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVUb2dnbGUoZHVy
YXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVG9nZ2xlKGR1
cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
XG4gICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4g
ICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcblxuICAgIHN0b3AoY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86
IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgc3RvcChxdWV1ZT86IGFueSwgY2xlYXJRdWV1ZT86IGJv
b2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICB0b2dnbGUoZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShkdXJhdGlvbj86
IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dn
bGUoc2hvd09ySGlkZTogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIC8vIEV2ZW50c1xuICAgIGJp
bmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50
VHlwZTogc3RyaW5nLCBldmVudERhdGE6IGFueSwgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpR
dWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBwcmV2ZW50QnViYmxlOiBib29sZWFu
KTogSlF1ZXJ5O1xuICAgIGJpbmQoLi4uZXZlbnRzOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIGJs
dXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGJsdXIoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJjaGFuZ2VcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNo
YW5nZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgY2hhbmdlKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwiY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjbGljayhoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVu
dFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiZGJsY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIGRibGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBkZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmlu
ZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJmb2N1c1wiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgZm9jdXMoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29u
dGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1
c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIGZvY3VzaW4oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIGZvY3VzaW4oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGV2ZW50RGF0YTog
T2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIHR3byBoYW5kbGVycyB0byB0aGUgbWF0
Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRl
cnMgYW5kIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ckluIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyB0
aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlck91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4g
ICAgaG92ZXIoaGFuZGxlckluOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnksIGhhbmRsZXJPdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGEgc2luZ2xlIGhhbmRsZXIgdG8gdGhlIG1h
dGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50
ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ckluT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVy
cyBvciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxlckluT3V0
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIGtleWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlkb3duXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUga2V5ZG93blwiXCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnREYXRhPzog
YW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlwcmVzc1wiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5cHJlc3MoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBrZXlwcmVzcyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGtleXByZXNzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5
S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwia2V5dXBcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXVw
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhl
IFwia2V5dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAga2V5dXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBrZXl1cChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgbW91c2Vkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oZXZlbnREYXRhOiBP
YmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWVudGVy
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hl
biB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlZW50ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VsZWF2ZVwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxl
YXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZWxlYXZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2VsZWF2ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlbW92ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2Vtb3ZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoZXZlbnREYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW91dFwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VvdXQoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwiIEph
dmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNl
b3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwibW91c2VvdmVyXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3Vz
ZW92ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNldXBcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIG1vdXNldXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEph
dmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoZXZlbnREYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICovXG4gICAgb2ZmKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZl
bnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3Bh
Y2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0
IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3Ig
XCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBz
aG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFj
aGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVu
Y3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lh
bCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9y
Pzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQg
ZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywg
c3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwi
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0
dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAg
ICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBh
biBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3Qg
d2hlcmUgdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0
ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJl
cHJlc2VudCBoYW5kbGVyIGZ1bmN0aW9ucyBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZl
bnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1h
dGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZl
bnQgaGFuZGxlcnMuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBh
bnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0
YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0
aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS4gUmVzdCBwYXJhbWV0ZXIg
YXJncyBpcyBmb3Igb3B0aW9uYWwgcGFyYW1ldGVycyBwYXNzZWQgdG8galF1ZXJ5LnRyaWdnZXIo
KS4gTm90ZSB0aGF0IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBvbiB0aGUgZXZlbnQgaGFuZGxlciBm
dW5jdGlvbiBtdXN0IGJlIG1hcmtlZCBhcyBvcHRpb25hbCAoPyBzeW50YXgpLlxuICAgICAqL1xu
ICAgIG9uKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMg
dG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBP
bmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVz
cGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAq
IEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRh
bnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0
aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdn
ZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBm
dW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihl
dmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFj
aCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhl
IHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3Ig
bW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMs
IHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJh
bSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9m
IHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2Vs
ZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3
aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
RGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxz
byBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMg
cmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjog
c3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFu
ZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVt
ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRo
ZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50
IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQg
YSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAq
IEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRh
bnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4g
SWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlz
IGNhbGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBh
cmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3
aGVuIGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHsgW2tleTogc3Ry
aW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IGFueSwgZGF0YT86IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50
cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBl
dmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWlu
aW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wi
IG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5k
bGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3Ig
bW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1p
dCxcIiBvciBjdXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGRhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmlu
ZywgZGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRv
IGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1v
c3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5c
Ii5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRo
ZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBl
dmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFs
d2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhh
bmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICov
XG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUg
aGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5
cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFy
YXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNr
XCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2Vs
ZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVs
ZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9y
IG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0
aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3Nl
ZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBz
aG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4g
ICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBh
bnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9y
IHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBl
bGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBv
YmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFj
ZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUg
dmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUg
ZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZp
bHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBj
YWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUg
aGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxl
bWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxl
ciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uZShl
dmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZywgZGF0YT86
IGFueSk6IEpRdWVyeTtcblxuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciB0aGUgRE9NIGlzIHJlYWR5
LlxuICAgICAqL1xuICAgIHJlYWR5KGhhbmRsZXI6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJyZXNpemVcIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIHJlc2l6ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhOiBPYmplY3QsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2Nyb2xsXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBzY3JvbGwoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNlbGVjdFwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2VsZWN0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3Qo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3Rc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzdWJtaXRcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHN1Ym1pdCgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBz
dWJtaXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJz
dWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGV2
ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4
dHJhUGFyYW1ldGVyczogYW55W10pOiBKUXVlcnk7XG4gICAgdHJpZ2dlcihldmVudDogSlF1ZXJ5
RXZlbnRPYmplY3QpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VySGFuZGxlcihldmVudFR5cGU6IHN0
cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IE9iamVjdDtcblxuICAgIHVuYmluZChl
dmVudFR5cGU/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBmbHM6
IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2dDogYW55KTogSlF1ZXJ5O1xuXG4gICAg
dW5kZWxlZ2F0ZSgpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVu
dFR5cGU6IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50czog
YW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUobmFtZXNwYWNlOiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICB1bmxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIHVubG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
LyBJbnRlcm5hbHNcbiAgICBjb250ZXh0OiBFbGVtZW50O1xuICAgIGpxdWVyeTogc3RyaW5nO1xu
XG4gICAgZXJyb3IoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIGVycm9yKGV2ZW50RGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwdXNoU3Rh
Y2soZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55
W10sIG5hbWU6IGFueSwgYXJndW1lbnRzOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNYW5pcHVs
YXRpb25cbiAgICBhZnRlciguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZnRlcihm
dW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kKC4uLmNvbnRl
bnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFwcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDog
YW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVy
eTtcblxuICAgIGJlZm9yZSguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBiZWZvcmUo
ZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb25lKHdpdGhEYXRh
QW5kRXZlbnRzPzogYm9vbGVhbiwgZGVlcFdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbik6IEpR
dWVyeTtcblxuICAgIGRldGFjaChzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGVtcHR5
KCk6IEpRdWVyeTtcblxuICAgIGluc2VydEFmdGVyKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuICAg
IGluc2VydEJlZm9yZSh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmQoLi4uY29u
dGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgcHJlcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRt
bDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kVG8odGFyZ2V0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICByZW1vdmUoc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBs
YWNlQWxsKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZVdpdGgoZnVuYzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgdGV4dCgpOiBzdHJpbmc7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiBh
bnkpOiBKUXVlcnk7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiAoaW5kZXg6IG51bWJlciwgdGV4dDog
c3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b0FycmF5KCk6IGFueVtdO1xuXG4g
ICAgdW53cmFwKCk6IEpRdWVyeTtcblxuICAgIHdyYXAod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBK
UXVlcnk7XG4gICAgd3JhcChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgd3JhcEFsbCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBJbm5l
cih3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwSW5uZXIoZnVuYzogKGlu
ZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBl
YWNoKGZ1bmM6IChpbmRleDogYW55LCBlbGVtOiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICBnZXQoaW5kZXg/OiBudW1iZXIpOiBhbnk7XG5cbiAgICBpbmRleCgpOiBudW1iZXI7XG4g
ICAgaW5kZXgoc2VsZWN0b3I6IHN0cmluZyk6IG51bWJlcjtcbiAgICBpbmRleChlbGVtZW50OiBh
bnkpOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgbGVuZ3RoOiBudW1iZXI7XG4g
ICAgc2VsZWN0b3I6IHN0cmluZztcbiAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIFt4OiBudW1i
ZXJdOiBIVE1MRWxlbWVudDtcblxuICAgIC8vIFRyYXZlcnNpbmdcbiAgICBhZGQoc2VsZWN0b3I6
IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICBhZGQoLi4uZWxlbWVudHM6IGFu
eVtdKTogSlF1ZXJ5O1xuICAgIGFkZChodG1sOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkKG9i
ajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgY2hpbGRyZW4oc2VsZWN0b3I/OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgY2xvc2Vz
dChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogRWxlbWVudCk6IEpRdWVyeTtcbiAgICBjbG9z
ZXN0KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3QoZWxlbWVudDogYW55KTogSlF1
ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3JzOiBhbnksIGNvbnRleHQ/OiBFbGVtZW50KTogYW55
W107XG5cbiAgICBjb250ZW50cygpOiBKUXVlcnk7XG5cbiAgICBlbmQoKTogSlF1ZXJ5O1xuXG4g
ICAgZXEoaW5kZXg6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGZpbHRlcihzZWxlY3Rvcjogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIGZpbHRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGZpbHRlcihlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKG9iajog
SlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGZpbmQoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbmQob2JqOiBKUXVlcnkpOiBK
UXVlcnk7XG5cbiAgICBmaXJzdCgpOiBKUXVlcnk7XG5cbiAgICBoYXMoc2VsZWN0b3I6IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICBoYXMoY29udGFpbmVkOiBFbGVtZW50KTogSlF1ZXJ5O1xuXG4gICAg
aXMoc2VsZWN0b3I6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgaXMoZnVuYzogKGluZGV4OiBhbnkp
ID0+IGFueSk6IGJvb2xlYW47XG4gICAgaXMoZWxlbWVudDogYW55KTogYm9vbGVhbjtcbiAgICBp
cyhvYmo6IEpRdWVyeSk6IGJvb2xlYW47XG5cbiAgICBsYXN0KCk6IEpRdWVyeTtcblxuICAgIG1h
cChjYWxsYmFjazogKGluZGV4OiBhbnksIGRvbUVsZW1lbnQ6IEVsZW1lbnQpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIG5leHQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0
QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dFVudGlsKHNlbGVjdG9y
Pzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKGVsZW1l
bnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKG9i
aj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbm90KHNlbGVjdG9y
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbm90KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgbm90KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBub3Qob2JqOiBKUXVl
cnkpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXRQYXJlbnQoKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50
KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50cyhzZWxlY3Rvcj86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHBhcmVudHNVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmls
dGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChlbGVtZW50PzogRWxlbWVu
dCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChvYmo/OiBKUXVl
cnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXYoc2VsZWN0b3I/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xu
XG4gICAgcHJldlVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgcHJldlVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgcHJldlVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1
ZXJ5O1xuXG4gICAgc2libGluZ3Moc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBz
bGljZShzdGFydDogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICAvLyBVdGls
aXRpZXNcblxuICAgIHF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVl
KHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbiAg
ICBxdWV1ZShuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbn1cbmRlY2xhcmUgbW9k
dWxlIFwianF1ZXJ5XCIge1xuICAgIGV4cG9ydCA9ICQ7XG59XG5kZWNsYXJlIHZhciBqUXVlcnk6
IEpRdWVyeVN0YXRpYztcbmRlY2xhcmUgdmFyICQ6IEpRdWVyeVN0YXRpYztcbi8vIGxpYnMvYW5n
dWxhci9hbmd1bGFyLmQudHNcbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIEFuZ3VsYXIgSlMgMS4w
XG4vLyBQcm9qZWN0OiBodHRwOi8vYW5ndWxhcmpzLm9yZ1xuLy8gRGVmaW5pdGlvbnMgYnk6IERp
ZWdvIFZpbGFyIDxodHRwOi8vZ2l0aHViLmNvbS9kaWVnb3ZpbGFyPlxuLy8gRGVmaW5pdGlvbnM6
IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuXG5cbmRl
Y2xhcmUgdmFyIGFuZ3VsYXI6IG5nLklBbmd1bGFyU3RhdGljO1xuXG4vLyBTdXBwb3J0IGZvciBw
YWlubGVzcyBkZXBlbmRlbmN5IGluamVjdGlvblxuaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAk
aW5qZWN0OnN0cmluZ1tdO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBuZyBtb2R1
bGUgKGFuZ3VsYXIuanMpXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5kZWNsYXJlIG1vZHVsZSBu
ZyB7XG5cbiAgICAvLyBBbGwgc2VydmljZSBwcm92aWRlcnMgZXh0ZW5kIHRoaXMgaW50ZXJmYWNl
XG4gICAgaW50ZXJmYWNlIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICAkZ2V0OiBhbnk7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5ndWxhclN0YXRpY1xuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaVxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJQW5ndWxhclN0YXRpYyB7XG4gICAgICAgIGJpbmQoY29udGV4
dDogYW55LCBmbjogRnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogRnVuY3Rpb247XG4gICAgICAg
IGJvb3RzdHJhcChlbGVtZW50OiBzdHJpbmcsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVj
dG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEpRdWVyeSwgbW9kdWxlcz86
IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVu
dDogRWxlbWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAg
ICAgICBib290c3RyYXAoZWxlbWVudDogRG9jdW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8u
SUluamVjdG9yU2VydmljZTtcbiAgICAgICAgY29weShzb3VyY2U6IGFueSwgZGVzdGluYXRpb24/
OiBhbnkpOiBhbnk7XG4gICAgICAgIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnlTdGF0aWM7XG4g
ICAgICAgIGVxdWFscyh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBleHRlbmQoZGVzdGluYXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7XG4gICAg
ICAgIGZvckVhY2gob2JqOiBhbnksIGl0ZXJhdG9yOiAodmFsdWU6IGFueSwga2V5OiBhbnkpID0+
IGFueSwgY29udGV4dD86IGFueSk6IGFueTtcbiAgICAgICAgZnJvbUpzb24oanNvbjogc3RyaW5n
KTogYW55O1xuICAgICAgICBpZGVudGl0eShhcmc/OiBhbnkpOiBhbnk7XG4gICAgICAgIGluamVj
dG9yKG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgaXNB
cnJheSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEYXRlKHZhbHVlOiBhbnkpOiBi
b29sZWFuO1xuICAgICAgICBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAg
IGlzRWxlbWVudCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNGdW5jdGlvbih2YWx1
ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW47
XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1N0cmlu
Zyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNVbmRlZmluZWQodmFsdWU6IGFueSk6
IGJvb2xlYW47XG4gICAgICAgIGxvd2VyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAg
ICAgLyoqIGNvbnN0cnVjdCB5b3VyIGFuZ3VsYXIgYXBwbGljYXRpb25cblx0XHRvZmZpY2lhbCBk
b2NzOiBJbnRlcmZhY2UgZm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIgbW9kdWxlcy5cblx0XHRzZWU6
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG5cdFx0Ki9cbiAg
ICAgICAgbW9kdWxlKFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgeW91ciBtb2R1bGUgeW91IHdh
bnQgdG8gY3JlYXRlICovXG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAv
KiogbmFtZSBvZiBtb2R1bGVzIHlvdXJzIGRlcGVuZHMgb24gKi9cbiAgICAgICAgICAgIHJlcXVp
cmVzPzogc3RyaW5nW10sXG4gICAgICAgICAgICBjb25maWdGdW5jdGlvbj86IGFueSk6IElNb2R1
bGU7XG4gICAgICAgIG5vb3AoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICB0b0pzb24o
b2JqOiBhbnksIHByZXR0eT86IGJvb2xlYW4pOiBzdHJpbmc7XG4gICAgICAgIHVwcGVyY2FzZShz
dHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgZnVs
bDogc3RyaW5nO1xuICAgICAgICAgICAgbWFqb3I6IG51bWJlcjtcbiAgICAgICAgICAgIG1pbm9y
OiBudW1iZXI7XG4gICAgICAgICAgICBkb3Q6IG51bWJlcjtcbiAgICAgICAgICAgIGNvZGVuYW1l
OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gTW9kdWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2Fu
Z3VsYXIuTW9kdWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElNb2R1
bGUge1xuICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb25GYWN0b3J5OiBG
dW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGlubGlu
ZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihv
YmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcg
c2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVl
ZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNv
bmZpZyhjb25maWdGbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJl
IGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3Jr
IHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xu
ICAgICAgICBjb25maWcoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtc
biAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAg
ICAgICAgY29uc3RhbnQob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9s
bGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1
bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25z
dHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG9iamVjdCA6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2
ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0
cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAg
ZGlyZWN0aXZlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShuYW1l
OiBzdHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAg
ICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlb
XSk6IElNb2R1bGU7XG4gICAgICAgIGZhY3Rvcnkob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xu
ICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5RnVuY3Rpb246IEZ1bmN0
aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG9iamVjdDogT2Jq
ZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJv
dmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIHByb3ZpZGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcnVu
KGluaXRpYWxpemF0aW9uRnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcnVu
KGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZp
Y2UobmFtZTogc3RyaW5nLCBzZXJ2aWNlQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtc
biAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9y
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2Uob2JqZWN0OiBPYmplY3QpOiBJTW9k
dWxlO1xuICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xu
ICAgICAgICB2YWx1ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG5cbiAgICAgICAgLy8gUHJv
cGVydGllc1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlcXVpcmVzOiBzdHJpbmdb
XTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBdHRyaWJ1dGVzXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlLmRpcmVj
dGl2ZS5BdHRyaWJ1dGVzXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElB
dHRyaWJ1dGVzIHtcblx0Ly8gdGhpcyBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBhY2Nlc3Mg
dGhlIHNjb3BlZCBhdHRyaWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5IGVsZWdhbnRcblx0Ly8gYmVjYXVz
ZSB5b3UgaGF2ZSB0byB1c2UgYXR0cnNbJ2ZvbyddIGluc3RlYWQgb2YgYXR0cnMuZm9vIGJ1dCBJ
IGRvbid0IGtub3cgb2YgYSBiZXR0ZXIgd2F5XG5cdC8vIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBs
aW1pdGVkIHRvIHJldHVybiBzdHJpbmcgYnV0IGl0IGNyZWF0ZXMgdGhpcyBwcm9ibGVtOiBodHRw
Oi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xNzIwMTg1NC8xNjU2NTZcblx0W25hbWU6IHN0cmluZ106
IGFueTtcblxuICAgICAgICAvLyBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5
IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgdG8gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFu
aW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWRc
biAgICAgICAgLy8gZm9yIHRoZSBjbGFzcyBhZGRpdGlvbi5cbiAgICAgICAgJGFkZENsYXNzKGNs
YXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFJlbW92ZXMgdGhlIENTUyBjbGFz
cyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciBmcm9tIHRoZVxuICAg
ICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0
aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIGZvclxuICAgICAgICAvLyB0aGUgY2xhc3MgcmVtb3ZhbC5c
biAgICAgICAgJHJlbW92ZUNsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAg
IC8vIFNldCBET00gZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICAgICRzZXQoa2V5OiBz
dHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIE9ic2VydmVzIGFuIGludGVy
cG9sYXRlZCBhdHRyaWJ1dGUuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZlciBmdW5jdGlvbiB3aWxs
IGJlIGludm9rZWQgb25jZSBkdXJpbmcgdGhlIG5leHQgJGRpZ2VzdFxuICAgICAgICAvLyBmb2xs
b3dpbmcgY29tcGlsYXRpb24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hlbmV2ZXIg
dGhlXG4gICAgICAgIC8vIGludGVycG9sYXRlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAgICAkb2Jz
ZXJ2ZShuYW1lOiBzdHJpbmcsIGZuOih2YWx1ZT86YW55KT0+YW55KTogRnVuY3Rpb247XG5cbiAg
ICAgICAgLy8gQSBtYXAgb2YgRE9NIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzIHRvIHRoZSBub3Jt
YWxpemVkIG5hbWUuIFRoaXMgaXMgbmVlZGVkXG4gICAgICAgIC8vIHRvIGRvIHJldmVyc2UgbG9v
a3VwIGZyb20gbm9ybWFsaXplZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuXG4gICAgICAgICRh
dHRyOiBPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRm9y
bUNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
ZGlyZWN0aXZlOmZvcm0uRm9ybUNvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUZvcm1Db250cm9sbGVyIHtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFu
O1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAg
ICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAk
YWRkQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAg
ICAkcmVtb3ZlQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xu
ICAgICAgICAkc2V0RGlydHkoKTogdm9pZDtcbiAgICAgICAgJHNldFByaXN0aW5lKCk6IHZvaWQ7
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTmdNb2RlbENvbnRyb2xs
ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZl
Om5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSU5nTW9kZWxDb250cm9sbGVyIHtcbiAgICAgICAgJHJlbmRlcigpOiB2b2lkO1xu
ICAgICAgICAkc2V0VmFsaWRpdHkodmFsaWRhdGlvbkVycm9yS2V5OiBzdHJpbmcsIGlzVmFsaWQ6
IGJvb2xlYW4pOiB2b2lkO1xuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB2aWV3VmFs
dWUgYW5kIG1vZGVsVmFsdWUgdG8gYmUgYSBzdHJpbmcgYnV0IG90aGVyXG4gICAgICAgIC8vIHR5
cGVzIGRvIHdvcmsgYW5kIGl0J3MgY29tbW9uIHRvIHVzZSB0aGVtLlxuICAgICAgICAkc2V0Vmll
d1ZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgICAgICAkdmlld1ZhbHVlOiBhbnk7XG5cbiAg
ICAgICAgJG1vZGVsVmFsdWU6IGFueTtcblxuICAgICAgICAkcGFyc2VyczogSU1vZGVsUGFyc2Vy
W107XG4gICAgICAgICRmb3JtYXR0ZXJzOiBJTW9kZWxGb3JtYXR0ZXJbXTtcbiAgICAgICAgJGVy
cm9yOiBhbnk7XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBi
b29sZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29s
ZWFuO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxQYXJzZXIge1xuICAgICAgICAodmFs
dWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsRm9ybWF0dGVyIHtc
biAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gU2NvcGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJHJvb3RTY29wZS5TY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJU2NvcGUge1xuICAgICAgICAkYXBwbHkoKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhw
OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IChzY29wZTogSVNjb3BlKSA9PiBh
bnkpOiBhbnk7XG5cbiAgICAgICAgJGJyb2FkY2FzdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFu
eVtdKTogSUFuZ3VsYXJFdmVudDtcbiAgICAgICAgJGRlc3Ryb3koKTogdm9pZDtcbiAgICAgICAg
JGRpZ2VzdCgpOiB2b2lkO1xuICAgICAgICAkZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFu
eVtdKTogSUFuZ3VsYXJFdmVudDtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhw
IGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAg
ICAgICRldmFsKGV4cHJlc3Npb246IHN0cmluZywgYXJncz86IE9iamVjdCk6IGFueTtcbiAgICAg
ICAgJGV2YWwoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgYXJncz86IE9iamVj
dCk6IGFueTtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFs
LCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsQXN5
bmMoZXhwcmVzc2lvbjogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNz
aW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogdm9pZDtcblxuICAgICAgICAvLyBEZWZhdWx0
cyB0byBmYWxzZSBieSB0aGUgaW1wbGVtZW50YXRpb24gY2hlY2tpbmcgc3RyYXRlZ3lcbiAgICAg
ICAgJG5ldyhpc29sYXRlPzogYm9vbGVhbik6IElTY29wZTtcblxuICAgICAgICAkb24obmFtZTog
c3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBJQW5ndWxhckV2ZW50LCAuLi5hcmdzOiBhbnlbXSkg
PT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3Ry
aW5nLCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rp
b247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiAo
bmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmpl
Y3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhw
cmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVj
dEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHBy
ZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55
LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5Pzog
Ym9vbGVhbik6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHBy
ZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwg
c2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaENvbGxlY3Rp
b24od2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcjogKG5l
d1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0
aW9uO1xuXG4gICAgICAgICRwYXJlbnQ6IElTY29wZTtcblxuICAgICAgICAkaWQ6IG51bWJlcjtc
blxuICAgICAgICAvLyBIaWRkZW4gbWVtYmVyc1xuICAgICAgICAkJGlzb2xhdGVCaW5kaW5nczog
YW55O1xuICAgICAgICAkJHBoYXNlOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmd1
bGFyRXZlbnQge1xuICAgICAgICB0YXJnZXRTY29wZTogSVNjb3BlO1xuICAgICAgICBjdXJyZW50
U2NvcGU6IElTY29wZTtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBwcmV2ZW50RGVm
YXVsdDogRnVuY3Rpb247XG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAg
ICAgICAgLy8gQXZhaWxhYmxlIG9ubHkgZXZlbnRzIHRoYXQgd2VyZSAkZW1pdC10ZWRcbiAgICAg
ICAgc3RvcFByb3BhZ2F0aW9uPzogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gV2luZG93U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kd2luZG93XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50
ZXJmYWNlIElXaW5kb3dTZXJ2aWNlIGV4dGVuZHMgV2luZG93IHt9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBCcm93c2VyU2VydmljZVxuICAgIC8vIFRPRE8gdW5kb2N1bWVudGVk
LCBzbyB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQnJvd3NlclNlcnZpY2Uge31cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIFRpbWVvdXRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0aW1lb3V0XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElUaW1lb3V0U2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlv
biwgZGVsYXk/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47
XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnZhbFNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVydmFsXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElJbnRlcnZhbFNlcnZpY2Uge1xuICAgICAg
ICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5OiBudW1iZXIsIGNvdW50PzogbnVtYmVyLCBpbnZva2VB
cHBseT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTog
SVByb21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gRmlsdGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kZmlsdGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRmaWx0ZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJRmlsdGVyU2VydmljZSB7XG4gICAgICAgIChuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbjtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUZpbHRlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQ
cm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeTog
RnVuY3Rpb24pOiBJU2VydmljZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIExvY2FsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGxvY2FsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJTG9jYWxlU2VydmljZSB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG5cbiAgICAgICAgLy8g
VGhlc2UgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIC8vIENoZWNrIGFuZ3VsYXIncyBpMThu
IGZpbGVzIGZvciBleGVtcGxlc1xuICAgICAgICBOVU1CRVJfRk9STUFUUzogSUxvY2FsZU51bWJl
ckZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIERBVEVUSU1FX0ZPUk1BVFM6IElMb2NhbGVEYXRl
VGltZUZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIHBsdXJhbENhdDogKG51bTogYW55KSA9PiBz
dHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlw
dG9yIHtcbiAgICAgICAgREVDSU1BTF9TRVA6IHN0cmluZztcbiAgICAgICAgR1JPVVBfU0VQOiBz
dHJpbmc7XG4gICAgICAgIFBBVFRFUk5TOiBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3Jb
XTtcbiAgICAgICAgQ1VSUkVOQ1lfU1lNOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvciB7XG4gICAgICAgIG1pbkludDogbnVtYmVy
O1xuICAgICAgICBtaW5GcmFjOiBudW1iZXI7XG4gICAgICAgIG1heEZyYWM6IG51bWJlcjtcbiAg
ICAgICAgcG9zUHJlOiBzdHJpbmc7XG4gICAgICAgIHBvc1N1Zjogc3RyaW5nO1xuICAgICAgICBu
ZWdQcmU6IHN0cmluZztcbiAgICAgICAgbmVnU3VmOiBzdHJpbmc7XG4gICAgICAgIGdTaXplOiBu
dW1iZXI7XG4gICAgICAgIGxnU2l6ZTogbnVtYmVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJ
TG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgTU9OVEg6IHN0cmluZ1td
O1xuICAgICAgICBTSE9SVE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgREFZOiBzdHJpbmdbXTtc
biAgICAgICAgU0hPUlREQVk6IHN0cmluZ1tdO1xuICAgICAgICBBTVBNUzogc3RyaW5nW107XG4g
ICAgICAgIG1lZGl1bTogc3RyaW5nO1xuICAgICAgICBzaG9ydDogc3RyaW5nO1xuICAgICAgICBm
dWxsRGF0ZTogc3RyaW5nO1xuICAgICAgICBsb25nRGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRp
dW1EYXRlOiBzdHJpbmc7XG4gICAgICAgIHNob3J0RGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRp
dW1UaW1lOiBzdHJpbmc7XG4gICAgICAgIHNob3J0VGltZTogc3RyaW5nO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvZ1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvZ1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJTG9nU2VydmljZSB7XG4gICAgICAgIGRlYnVnOiBJTG9nQ2FsbDtcbiAg
ICAgICAgZXJyb3I6IElMb2dDYWxsO1xuICAgICAgICBpbmZvOiBJTG9nQ2FsbDtcbiAgICAgICAg
bG9nOiBJTG9nQ2FsbDtcbiAgICAgICAgd2FybjogSUxvZ0NhbGw7XG4gICAgfVxuXG4gICAgLy8g
V2UgZGVmaW5lIHRoaXMgYXMgc2VwYXJldGUgaW50ZXJmYWNlIHNvIHdlIGNhbiByZW9wZW4gaXQg
bGF0ZXIgZm9yXG4gICAgLy8gdGhlIG5nTW9jayBtb2R1bGUuXG4gICAgaW50ZXJmYWNlIElMb2dD
YWxsIHtcbiAgICAgICAgKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBQYXJzZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHBhcnNlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElQYXJzZVNlcnZpY2Uge1xuICAgICAgICAoZXhwcmVzc2lvbjogc3RyaW5n
KTogSUNvbXBpbGVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVk
RXhwcmVzc2lvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtc
blxuICAgICAgICAvLyBJZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIHVuZGVmaW5lZCBpcyBnb25u
YSBiZSB1c2VkIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAvLyBkb2VzIG5vdCBj
aGVjayB0aGUgcGFyYW1ldGVyLiBMZXQncyBmb3JjZSBhIHZhbHVlIGZvciBjb25zaXN0ZW5jeS4g
SWYgY29uc3VtZXJcbiAgICAgICAgLy8gd2hhbnRzIHRvIHVuZGVmaW5lIGl0LCBwYXNzIHRoZSB1
bmRlZmluZWQgdmFsdWUgZXhwbGljaXRseS5cbiAgICAgICAgYXNzaWduKGNvbnRleHQ6IGFueSwg
dmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBMb2NhdGlvblNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGxvY2F0aW9uXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRsb2NhdGlvblByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvZ3VpZGUvZGV2X2d1aWRlLnNlcnZpY2VzLiRsb2NhdGlvblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJTG9jYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgYWJzVXJsKCk6
IHN0cmluZztcbiAgICAgICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2gobmV3SGFzaDog
c3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgaG9zdCgpOiBzdHJpbmc7XG4gICAg
ICAgIHBhdGgoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKG5ld1BhdGg6IHN0cmluZyk6IElMb2Nh
dGlvblNlcnZpY2U7XG4gICAgICAgIHBvcnQoKTogbnVtYmVyO1xuICAgICAgICBwcm90b2NvbCgp
OiBzdHJpbmc7XG4gICAgICAgIHJlcGxhY2UoKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAg
c2VhcmNoKCk6IGFueTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcnNNYXA6IGFueSk6IElMb2Nh
dGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0ZXI6IHN0cmluZywgcGFyYW1ldGVy
VmFsdWU6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHVybCgpOiBzdHJpbmc7XG4g
ICAgICAgIHVybCh1cmw6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElMb2NhdGlvblByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4g
ICAgICAgIGhhc2hQcmVmaXgoKTogc3RyaW5nO1xuICAgICAgICBoYXNoUHJlZml4KHByZWZpeDog
c3RyaW5nKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgICAgIGh0bWw1TW9kZSgpOiBib29sZWFu
O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgcGFyYW1ldGVyIGlzIHN0
cmluZywgYnV0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHRlc3RzIGl0IGFzIGJvb2xlYW4s
IHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2VcbiAgICAgICAgLy8gc2luY2UgdGhpcyBpcyBhIHRvZ2ds
ZXJcbiAgICAgICAgaHRtbDVNb2RlKGFjdGl2ZTogYm9vbGVhbik6IElMb2NhdGlvblByb3ZpZGVy
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERvY3VtZW50U2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZG9jdW1lbnRc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSURvY3VtZW50U2VydmljZSBl
eHRlbmRzIERvY3VtZW50IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBFeGNl
cHRpb25IYW5kbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kZXhjZXB0aW9uSGFuZGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGlu
dGVyZmFjZSBJRXhjZXB0aW9uSGFuZGxlclNlcnZpY2Uge1xuICAgICAgICAoZXhjZXB0aW9uOiBF
cnJvciwgY2F1c2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIFJvb3RFbGVtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdEVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSVJvb3RFbGVtZW50U2VydmljZSBleHRlbmRzIEpRdWVyeSB7fVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHFcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSVFTZXJ2aWNlIHtcbiAgICAgICAgYWxsKHByb21pc2VzOiBJUHJvbWlzZTxh
bnk+W10pOiBJUHJvbWlzZTxhbnlbXT47XG4gICAgICAgIGRlZmVyPFQ+KCk6IElEZWZlcnJlZDxU
PjtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IElQcm9taXNlPHZvaWQ+O1xuICAgICAg
ICB3aGVuPFQ+KHZhbHVlOiBUKTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElQcm9taXNlPFQ+IHtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChw
cm9taXNlVmFsdWU6IFQpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86
IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBh
bnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2Fs
bGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxi
YWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkp
ID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nl
c3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86
IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkg
PT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG5cblxuICAgICAgICBjYXRjaDxUUmVzdWx0Pihv
blJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9t
aXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29u
OiBhbnkpID0+IElQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAg
IGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCk6IElQ
cm9taXNlPFRSZXN1bHQ+O1xuXG4gICAgICAgIGZpbmFsbHk8VFJlc3VsdD4oZmluYWxseUNhbGxi
YWNrOiAoKT0+YW55KTpJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SURlZmVycmVkPFQ+IHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZT86IFQpOiB2b2lkO1xuICAgICAg
ICByZWplY3QocmVhc29uPzogYW55KTogdm9pZDtcbiAgICAgICAgbm90aWZ5KHN0YXRlPzphbnkp
OiB2b2lkO1xuICAgICAgICBwcm9taXNlOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmNob3JTY3JvbGxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRhbmNob3JTY3JvbGxcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFNlcnZpY2Uge1xuICAgICAg
ICAoKTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFByb3ZpZGVy
IGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRpc2FibGVBdXRvU2Nyb2xsaW5n
KCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ2FjaGVG
YWN0b3J5U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kY2FjaGVGYWN0b3J5XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElD
YWNoZUZhY3RvcnlTZXJ2aWNlIHtcbiAgICAgICAgLy8gTGV0cyBub3QgZm9jZSB0aGUgb3B0aW9u
c01hcCB0byBoYXZlIHRoZSBjYXBhY2l0eSBtZW1iZXIuIEV2ZW4gdGhvdWdoXG4gICAgICAgIC8v
IGl0J3MgdGhlIE9OTFkgb3B0aW9uIGNvbnNpZGVyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRv
ZGF5LCBhIGNvbnN1bWVyXG4gICAgICAgIC8vIG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGFzc29j
aWF0ZSBzb21lIG90aGVyIG9wdGlvbnMgdG8gdGhlIGNhY2hlIG9iamVjdC5cbiAgICAgICAgLy8o
Y2FjaGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogQ2Fj
aGVPYmplY3Q7XG4gICAgICAgIChjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFj
aXR5OiBudW1iZXI7IH0pOiBJQ2FjaGVPYmplY3Q7XG5cbiAgICAgICAgLy8gTWV0aG9kcyBiZWxs
b3cgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIGluZm8oKTogYW55O1xuICAgICAgICBnZXQg
KGNhY2hlSWQ6IHN0cmluZyk6IElDYWNoZU9iamVjdDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SUNhY2hlT2JqZWN0IHtcbiAgICAgICAgaW5mbygpOiB7XG4gICAgICAgICAgICBpZDogc3RyaW5n
O1xuICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuXG4gICAgICAgICAgICAvLyBOb3QgZ2FyYW50
ZWVkIHRvIGhhdmUsIHNpbmNlIGl0J3MgYSBub24tbWFuZGF0b3J5IG9wdGlvblxuICAgICAgICAg
ICAgLy9jYXBhY2l0eTogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICBwdXQoa2V5OiBzdHJp
bmcsIHZhbHVlPzogYW55KTogdm9pZDtcbiAgICAgICAgZ2V0IChrZXk6IHN0cmluZyk6IGFueTtc
biAgICAgICAgcmVtb3ZlKGtleTogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgcmVtb3ZlQWxsKCk6
IHZvaWQ7XG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBDb21waWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElDb21waWxlU2VydmljZSB7XG4gICAgICAgIChlbGVtZW50OiBzdHJp
bmcsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5Pzog
bnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogRWxl
bWVudCwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/
OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBK
UXVlcnksIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5
PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJQ29tcGlsZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
IGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSUNv
bXBpbGVQcm92aWRlcjtcblxuICAgICAgICAvLyBVbmRvY3VtZW50ZWQsIGJ1dCBpdCBpcyB0aGVy
ZS4uLlxuICAgICAgICBkaXJlY3RpdmUoZGlyZWN0aXZlc01hcDogYW55KTogSUNvbXBpbGVQcm92
aWRlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uIHtc
biAgICAgICAgLy8gTGV0J3MgaGludCBidXQgbm90IGZvcmNlIGNsb25lQXR0YWNoRm4ncyBzaWdu
YXR1cmVcbiAgICAgICAgKHNjb3BlOiBJU2NvcGUsIGNsb25lQXR0YWNoRm4/OiAoY2xvbmVkRWxl
bWVudD86IEpRdWVyeSwgc2NvcGU/OiBJU2NvcGUpID0+IGFueSk6IEpRdWVyeTtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb250cm9sbGVyU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclByb3ZpZGVy
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyU2Vydmlj
ZSB7XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc3RhdGUg
dGhpcywgbG9jYWxzIGFyZSBvcHRpb25hbFxuICAgICAgICAoY29udHJvbGxlckNvbnN0cnVjdG9y
OiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICAoY29udHJvbGxlck5hbWU6
IHN0cmluZywgbG9jYWxzPzogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29u
dHJvbGxlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lz
dGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IHZvaWQ7
XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZGVwZW5kZW5jeUFubm90YWRlZENvbnN0
cnVjdG9yOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSHR0cFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGh0dHBcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBT
ZXJ2aWNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgbW9ldGhvZCBhbmQgdXJsIG11c3QgYmUgcHJv
dmlkZWQuLi5cbiAgICAgICAgKGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiBJSHR0cFByb21pc2U8
YW55PjtcbiAgICAgICAgZ2V0ICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElI
dHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBkZWxldGUgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29u
ZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGhlYWQodXJsOiBzdHJpbmcs
IFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAganNvbnAo
dXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAg
ICAgICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTog
SUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHB1dCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBS
ZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlZmF1bHRz
OiBJUmVxdWVzdENvbmZpZztcblxuICAgICAgICAvLyBGb3IgZGVidWdnaW5nLCBCVVQgaXQgaXMg
ZG9jdW1lbnRlZCBhcyBwdWJsaWMsIHNvLi4uXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0czogYW55
W107XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBqdXN0IGZvciBoaW50aW5nLlxuICAgIC8vIFNv
bWUgb3BldGlvbnMgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gdGhlIHJlcXVl
c3QuXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwI1Vz
YWdlIGZvciBvcHRpb25zIGV4cGxhbmF0aW9uc1xuICAgIGludGVyZmFjZSBJUmVxdWVzdENvbmZp
ZyB7XG4gICAgICAgIG1ldGhvZDogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAg
ICAgcGFyYW1zPzogYW55O1xuXG4gICAgICAgIC8vIFhYWCBpdCBoYXMgaXQncyBvd24gc3RydWN0
dXJlLi4uICBwZXJoYXBzIHdlIHNob3VsZCBkZWZpbmUgaXQgaW4gdGhlIGZ1dHVyZVxuICAgICAg
ICBoZWFkZXJzPzogYW55O1xuXG4gICAgICAgIGNhY2hlPzogYW55O1xuICAgICAgICB3aXRoQ3Jl
ZGVudGlhbHM/OiBib29sZWFuO1xuXG4gICAgICAgIC8vIFRoZXNlIGFjY2VwdCBtdWx0aXBsZSB0
eXBlcywgc28gbGV0J3MgZGVmaW5lIHRoZW0gYXMgYW55XG4gICAgICAgIGRhdGE/OiBhbnk7XG4g
ICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJlc3BvbnNl
PzogYW55O1xuICAgICAgICB0aW1lb3V0PzogYW55OyAvLyBudW1iZXIgfCBwcm9taXNlXG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+IHtcbiAgICAgICAgKGRh
dGE6IFQsIHN0YXR1czogbnVtYmVyLCBoZWFkZXJzOiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBz
dHJpbmcsIGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPiB7XG4gICAgICAgIGRhdGE/OiBUO1xuICAg
ICAgICBzdGF0dXM/OiBudW1iZXI7XG4gICAgICAgIGhlYWRlcnM/OiAoaGVhZGVyTmFtZTogc3Ry
aW5nKSA9PiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZz86IElSZXF1ZXN0Q29uZmlnO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2U8VD4gZXh0ZW5kcyBJUHJvbWlzZTxUPiB7XG4g
ICAgICAgIHN1Y2Nlc3MoY2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQ
cm9taXNlPFQ+O1xuICAgICAgICBlcnJvcihjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8
VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxi
YWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBUUmVzdWx0LCBl
cnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4g
YW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0Nh
bGxiYWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBJUHJvbWlz
ZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJh
Y2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJSHR0cFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRl
ZmF1bHRzOiBJUmVxdWVzdENvbmZpZztcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAg
ICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvcnM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIEh0dHBCYWNrZW5kU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cEJhY2tlbmRcbiAgICAvLyBZb3Ugc2hvdWxk
IG5ldmVyIG5lZWQgdG8gdXNlIHRoaXMgc2VydmljZSBkaXJlY3RseS5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBCYWNrZW5kU2VydmljZSB7XG4gICAgICAgIC8v
IFhYWCBQZXJoYXBzIGRlZmluZSBjYWxsYmFjayBzaWduYXR1cmUgaW4gdGhlIGZ1dHVyZVxuICAg
ICAgICAobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBwb3N0PzogYW55LCBjYWxsYmFjaz86
IEZ1bmN0aW9uLCBoZWFkZXJzPzogYW55LCB0aW1lb3V0PzogbnVtYmVyLCB3aXRoQ3JlZGVudGlh
bHM/OiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBJbnRlcnBvbGF0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGludGVycG9sYXRlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVNlcnZpY2Uge1xuICAgICAgICAodGV4dDogc3Ry
aW5nLCBtdXN0SGF2ZUV4cHJlc3Npb24/OiBib29sZWFuKTogSUludGVycG9sYXRpb25GdW5jdGlv
bjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2woKTog
c3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uIHtc
biAgICAgICAgKGNvbnRleHQ6IGFueSk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SUludGVycG9sYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAg
c3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCh2YWx1ZTogc3RyaW5n
KTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4g
ICAgICAgIGVuZFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGVtcGxhdGVDYWNoZVNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRlbXBsYXRl
Q2FjaGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlQ2Fj
aGVTZXJ2aWNlIGV4dGVuZHMgSUNhY2hlT2JqZWN0IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBSb290U2NvcGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSVJvb3RTY29wZVNlcnZpY2UgZXh0ZW5kcyBJU2NvcGUge31cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRpbnRl
cmZhY2UgSVNDRVNlcnZpY2Uge1xuXHRcdGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRy
dXN0ZWQ6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkQ3NzKHZhbHVlOiBhbnkpOiBhbnk7XG5c
dFx0Z2V0VHJ1c3RlZEh0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSnModmFs
dWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFu
eTtcblx0XHRnZXRUcnVzdGVkVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0cGFyc2UodHlwZTog
c3RyaW5nLCBleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkg
PT4gYW55O1xuXHRcdHBhcnNlQXNDc3MoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFu
eSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzSHRtbChleHByZXNzaW9uOiBzdHJp
bmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNKcyhl
eHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xu
XHRcdHBhcnNlQXNSZXNvdXJjZVVybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55
LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNVcmwoZXhwcmVzc2lvbjogc3RyaW5n
KTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHR0cnVzdEFzKHR5cGU6
IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSHRtbCh2YWx1ZTogYW55KTog
YW55O1xuXHRcdHRydXN0QXNKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNSZXNvdXJj
ZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNVcmwodmFsdWU6IGFueSk6IGFueTtc
blx0XHRpc0VuYWJsZWQoKTogYm9vbGVhbjtcblx0fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gU0NFUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJHNjZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElTQ0VQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBlbmFi
bGVkKHZhbHVlOiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0ZVNlcnZpY2Uge1xuICAgICAgICBnZXRUcnVzdGVkKHR5
cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG4gICAgICAgIHRydXN0QXModHlw
ZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICB2YWx1ZU9mKHZhbHVlOiBhbnkp
OiBhbnk7XG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VEZWxl
Z2F0ZVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRzY2VEZWxlZ2F0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElTQ0VEZWxlZ2F0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAg
ICAgIHJlc291cmNlVXJsQmxhY2tsaXN0KGJsYWNrbGlzdDogYW55W10pOiB2b2lkO1xuICAgICAg
ICByZXNvdXJjZVVybFdoaXRlbGlzdCh3aGl0ZWxpc3Q6IGFueVtdKTogdm9pZDtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEaXJlY3RpdmVcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmVc
biAgICAvLyBhbmQgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaXJlY3RpdmVcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGludGVyZmFjZSBJRGlyZWN0aXZle1xuICAgICAg
ICBjb21waWxlPzpcbiAgICAgICAgICAgICh0ZW1wbGF0ZUVsZW1lbnQ6IGFueSxcbiAgICAgICAg
ICAgIHRlbXBsYXRlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB0cmFuc2Ns
dWRlOiAoc2NvcGU6IElTY29wZSwgY2xvbmVMaW5raW5nRm46IEZ1bmN0aW9uKSA9PiB2b2lkXG4g
ICAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgY29udHJvbGxlcj86IGFueTtcbiAgICAgICAg
Y29udHJvbGxlckFzPzogc3RyaW5nO1xuICAgICAgICBsaW5rPzpcbiAgICAgICAgICAgIChzY29w
ZTogSVNjb3BlLFxuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50OiBhbnksXG4gICAgICAgICAg
ICBpbnN0YW5jZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgY29udHJvbGxl
cjogYW55XG4gICAgICAgICAgICApID0+IHZvaWQ7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4g
ICAgICAgIHByaW9yaXR5PzogbnVtYmVyO1xuICAgICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAg
ICAgICAgcmVxdWlyZT86IGFueTtcbiAgICAgICAgcmVzdHJpY3Q/OiBzdHJpbmc7XG4gICAgICAg
IHNjb3BlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGVV
cmw/OiBhbnk7XG4gICAgICAgIHRlcm1pbmFsPzogYm9vbGVhbjtcbiAgICAgICAgdHJhbnNjbHVk
ZT86IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhbmd1bGFy
LmVsZW1lbnRcbiAgICAvLyB3aGVuIGNhbGxpbmcgYW5ndWxhci5lbGVtZW50LCBhbmd1bGFyIHJl
dHVybnMgYSBqUXVlcnkgb2JqZWN0LFxuICAgIC8vIGF1Z21lbnRlZCB3aXRoIGFkZGl0aW9uYWwg
bWV0aG9kcyBsaWtlIGUuZy4gc2NvcGUuXG4gICAgLy8gc2VlOiBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9hbmd1bGFyLmVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeVN0YXRpYyBleHRlbmRzIEpRdWVyeVN0YXRpYyB7XG4g
ICAgICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSUF1Z21lbnRlZEpRdWVy
eTtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAg
ICAob2JqZWN0OiB7fSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50QXJyYXk6
IEVsZW1lbnRbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IEpRdWVyeSk6
IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbik6IElBdWdtZW50ZWRK
UXVlcnk7XG4gICAgICAgIChhcnJheTogYW55W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAg
ICAoKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUF1Z21lbnRl
ZEpRdWVyeSBleHRlbmRzIEpRdWVyeSB7XG4gICAgICAgIC8vIFRPRE86IGV2ZW50cywgaG93IHRv
IGRlZmluZT9cbiAgICAgICAgLy8kZGVzdHJveVxuXG4gICAgICAgIGZpbmQoc2VsZWN0b3I6IHN0
cmluZyk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQoZWxlbWVudDogYW55KTogSUF1
Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChvYmo6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVl
cnk7XG5cbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlu
amVjdG9yKCk6IGFueTtcbiAgICAgICAgc2NvcGUoKTogSVNjb3BlO1xuXG4gICAgICAgIGluaGVy
aXRlZERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgICAgIGluaGVy
aXRlZERhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICAgICAg
aW5oZXJpdGVkRGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cblxuICAgIH1cblxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQVVUTyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgZXhwb3J0IG1vZHVsZSBhdXRvIHtcblxuICAgICAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgICAgICAvLyBJbmplY3RvclNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJGluamVjdG9yXG4gICAgICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJSW5qZWN0b3JTZXJ2aWNlIHtcbiAgICAgICAg
ICAgIGFubm90YXRlKGZuOiBGdW5jdGlvbik6IHN0cmluZ1tdO1xuICAgICAgICAgICAgYW5ub3Rh
dGUoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogc3RyaW5nW107XG4gICAgICAgICAg
ICBnZXQgKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgICAgIGluc3RhbnRpYXRlKHR5cGVD
b25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgICAgIGlu
dm9rZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBhbnk7XG4gICAgICAgICAgICBp
bnZva2UoZnVuYzogRnVuY3Rpb24sIGNvbnRleHQ/OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtc
biAgICAgICAgfVxuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIFByb3ZpZGVT
ZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRP
LiRwcm92aWRlXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJUHJv
dmlkZVNlcnZpY2Uge1xuICAgICAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGl0IHJldHVy
bnMgdGhlIHJlZ2lzdGVyZWQgaW5zdGFuY2UsIGJ1dCBhY3R1YWxcbiAgICAgICAgICAgIC8vIGlt
cGxlbWVudGF0aW9uIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAgICAgICAgICAgIC8vIGNv
bnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgICAgIGNvbnN0
YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgICAgIGRlY29y
YXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICAg
ICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9ySW5saW5lOiBhbnlbXSk6IHZvaWQ7
XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlv
bjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgZmFjdG9yeShu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IG5nLklTZXJ2aWNl
UHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBu
Zy5JU2VydmljZVByb3ZpZGVyKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHBy
b3ZpZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9u
KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBjb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAg
ICAgdmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogbmcuSVNlcnZpY2VQcm92aWRlcjtc
biAgICAgICAgfVxuXG4gICAgfVxufVxuLy8gbW9kZWxzL1RvZG9JdGVtLnRzXG5cbm1vZHVsZSB0
b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9JdGVtIHtc
biAgICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyxc
biAgICAgICAgICAgIHB1YmxpYyBjb21wbGV0ZWQ6IGJvb2xlYW5cbiAgICAgICAgICAgICkgeyB9
XG4gICAgfVxufVxuLy8gaW50ZXJmYWNlcy9JVG9kb1Njb3BlLnRzXG5cbm1vZHVsZSB0b2RvcyB7
XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TY29wZSBleHRlbmRzIG5nLklTY29wZSB7XG5cdFx0
dG9kb3M6IFRvZG9JdGVtW107XG5cdFx0bmV3VG9kbzogc3RyaW5nO1xuXHRcdGVkaXRlZFRvZG86
IFRvZG9JdGVtO1xuXHRcdG9yaWdpbmFsVG9kbzogVG9kb0l0ZW07XG5cdFx0cmVtYWluaW5nQ291
bnQ6IG51bWJlcjtcblx0XHRkb25lQ291bnQ6IG51bWJlcjtcblx0XHRhbGxDaGVja2VkOiBib29s
ZWFuO1xuXHRcdHJldmVydGVkOiBib29sZWFuO1xuXHRcdHN0YXR1c0ZpbHRlcjogeyBjb21wbGV0
ZWQ/OiBib29sZWFuIH07XG5cdFx0bG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2U7XG5cdFx0
dm06IFRvZG9DdHJsO1xuXHR9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU3RvcmFnZS50c1xuXG5t
b2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU3RvcmFnZSB7XG5cdFx0Z2V0
ICgpOiBUb2RvSXRlbVtdO1xuXHRcdHB1dCh0b2RvczogVG9kb0l0ZW1bXSk7XG5cdH1cbn0vLyBk
aXJlY3RpdmVzL1RvZG9Gb2N1cy50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7
XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZWxlbWVu
dCBpdCBpcyBhcHBsaWVkIHRvIHdoZW4gdGhlIGV4cHJlc3Npb24gaXQgYmluZHMgdG8gZXZhbHVh
dGVzIHRvIHRydWUuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0aW1lb3V0
OiBuZy5JVGltZW91dFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRc
dFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6
IGFueSkgPT4ge1xuXHRcdFx0XHQkc2NvcGUuJHdhdGNoKGF0dHJpYnV0ZXMudG9kb0ZvY3VzLCBu
ZXd2YWwgPT4ge1xuXHRcdFx0XHRcdGlmIChuZXd2YWwpIHtcblx0XHRcdFx0XHRcdCR0aW1lb3V0
KCgpID0+IGVsZW1lbnRbMF0uZm9jdXMoKSwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRc
dFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHRvZG9Gb2N1cy4kaW5qZWN0ID0gWyck
dGltZW91dCddO1xuXG59Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1ci50c1xuXG5tb2R1bGUgdG9kb3Mg
e1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIERpcmVjdGl2ZSB0aGF0IGV4
ZWN1dGVzIGFuIGV4cHJlc3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIGxv
c2VzIGZvY3VzLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b2RvQmx1cigpOiBuZy5J
RGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbms6ICgkc2NvcGU6
IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcbiAgICAg
ICAgICAgICAgICBlbGVtZW50LmJpbmQoJ2JsdXInLCAoKSA9PiB7ICRzY29wZS4kYXBwbHkoYXR0
cmlidXRlcy50b2RvQmx1cik7IH0pO1xuICAgICAgICAgICAgICAgICRzY29wZS4kb24oJyRkZXN0
cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgnYmx1cicpOyB9KTtcbiAgICAgICAgICAgIH1c
biAgICAgICAgfTtcbiAgICB9XG59XG4vLyBkaXJlY3RpdmVzL1RvZG9Fc2NhcGUudHNcblxubW9k
dWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVTQ0FQRV9LRVkgPSAyNztc
blxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgY2FuY2VscyBlZGl0aW5nIGEgdG9kbyBpZiB0
aGUgdXNlciBwcmVzc2VzIHRoZSBFc2Mga2V5LlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRv
ZG9Fc2NhcGUoKTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgk
c2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtc
blx0XHRcdFx0ZWxlbWVudC5iaW5kKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0
aWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtcblx0XHRcdFx0XHRcdCRzY29wZS4k
YXBwbHkoYXR0cmlidXRlcy50b2RvRXNjYXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xu
XG5cdFx0XHRcdCRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgn
a2V5ZG93bicpOyB9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4vLyBzZXJ2aWNlcy9Ub2Rv
U3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8q
KlxuICAgICAqIFNlcnZpY2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJldHJpZXZlcyBUT0RPcyBmcm9t
IGxvY2FsU3RvcmFnZS5cbiAgICAgKi9cbiAgICBleHBvcnQgY2xhc3MgVG9kb1N0b3JhZ2UgaW1w
bGVtZW50cyBJVG9kb1N0b3JhZ2Uge1xuXG4gICAgICAgIFNUT1JBR0VfSUQgPSAndG9kb3MtYW5n
dWxhcmpzLXR5cGVzY3JpcHQnO1xuXG4gICAgICAgIGdldCAoKTogVG9kb0l0ZW1bXSB7XG4gICAg
ICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JB
R0VfSUQpIHx8ICdbXScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHV0KHRvZG9zOiBUb2RvSXRl
bVtdKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQs
IEpTT04uc3RyaW5naWZ5KHRvZG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG59Ly8gY29udHJvbGxl
cnMvVG9kb0N0cmwudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8q
KlxuXHQgKiBUaGUgbWFpbiBjb250cm9sbGVyIGZvciB0aGUgYXBwLiBUaGUgY29udHJvbGxlcjpc
blx0ICogLSByZXRyaWV2ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2RlbCB2aWEgdGhlIHRvZG9TdG9y
YWdlIHNlcnZpY2Vcblx0ICogLSBleHBvc2VzIHRoZSBtb2RlbCB0byB0aGUgdGVtcGxhdGUgYW5k
IHByb3ZpZGVzIGV2ZW50IGhhbmRsZXJzXG5cdCAqL1xuXHRleHBvcnQgY2xhc3MgVG9kb0N0cmwg
e1xuXG5cdFx0cHJpdmF0ZSB0b2RvczogVG9kb0l0ZW1bXTtcblxuXHRcdC8vICRpbmplY3QgYW5u
b3RhdGlvbi5cblx0XHQvLyBJdCBwcm92aWRlcyAkaW5qZWN0b3Igd2l0aCBpbmZvcm1hdGlvbiBh
Ym91dCBkZXBlbmRlbmNpZXMgdG8gYmUgaW5qZWN0ZWQgaW50byBjb25zdHJ1Y3RvclxuXHRcdC8v
IGl0IGlzIGJldHRlciB0byBoYXZlIGl0IGNsb3NlIHRvIHRoZSBjb25zdHJ1Y3RvciwgYmVjYXVz
ZSB0aGUgcGFyYW1ldGVycyBtdXN0IG1hdGNoIGluIGNvdW50IGFuZCB0eXBlLlxuXHRcdC8vIFNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpXG5cdFx0cHVibGljIHN0YXRpYyAk
aW5qZWN0ID0gW1xuXHRcdFx0JyRzY29wZScsXG5cdFx0XHQnJGxvY2F0aW9uJyxcblx0XHRcdCd0
b2RvU3RvcmFnZScsXG5cdFx0XHQnZmlsdGVyRmlsdGVyJ1xuXHRcdF07XG5cblx0XHQvLyBkZXBl
bmRlbmNpZXMgYXJlIGluamVjdGVkIHZpYSBBbmd1bGFySlMgJGluamVjdG9yXG5cdFx0Ly8gY29u
dHJvbGxlcidzIG5hbWUgaXMgcmVnaXN0ZXJlZCBpbiBBcHBsaWNhdGlvbi50cyBhbmQgc3BlY2lm
aWVkIGZyb20gbmctY29udHJvbGxlciBhdHRyaWJ1dGUgaW4gaW5kZXguaHRtbFxuXHRcdGNvbnN0
cnVjdG9yKFxuXHRcdFx0cHJpdmF0ZSAkc2NvcGU6IElUb2RvU2NvcGUsXG5cdFx0XHRwcml2YXRl
ICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcblx0XHRcdHByaXZhdGUgdG9kb1N0b3Jh
Z2U6IElUb2RvU3RvcmFnZSxcblx0XHRcdHByaXZhdGUgZmlsdGVyRmlsdGVyXG5cdFx0KSB7XG5c
dFx0XHR0aGlzLnRvZG9zID0gJHNjb3BlLnRvZG9zID0gdG9kb1N0b3JhZ2UuZ2V0KCk7XG5cblx0
XHRcdCRzY29wZS5uZXdUb2RvID0gJyc7XG5cdFx0XHQkc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7
XG5cblx0XHRcdC8vICd2bScgc3RhbmRzIGZvciAndmlldyBtb2RlbCcuIFdlJ3JlIGFkZGluZyBh
IHJlZmVyZW5jZSB0byB0aGUgY29udHJvbGxlciB0byB0aGUgc2NvcGVcblx0XHRcdC8vIGZvciBp
dHMgbWV0aG9kcyB0byBiZSBhY2Nlc3NpYmxlIGZyb20gdmlldyAvIEhUTUxcblx0XHRcdCRzY29w
ZS52bSA9IHRoaXM7XG5cblx0XHRcdC8vIHdhdGNoaW5nIGZvciBldmVudHMvY2hhbmdlcyBpbiBz
Y29wZSwgd2hpY2ggYXJlIGNhdXNlZCBieSB2aWV3L3VzZXIgaW5wdXRcblx0XHRcdC8vIGlmIHlv
dSBzdWJzY3JpYmUgdG8gc2NvcGUgb3IgZXZlbnQgd2l0aCBsaWZldGltZSBsb25nZXIgdGhhbiB0
aGlzIGNvbnRyb2xsZXIsIG1ha2Ugc3VyZSB5b3UgdW5zdWJzY3JpYmUuXG5cdFx0XHQkc2NvcGUu
JHdhdGNoKCd0b2RvcycsICgpID0+IHRoaXMub25Ub2RvcygpLCB0cnVlKTtcblx0XHRcdCRzY29w
ZS4kd2F0Y2goJ2xvY2F0aW9uLnBhdGgoKScsIHBhdGggPT4gdGhpcy5vblBhdGgocGF0aCkpXG5c
blx0XHRcdGlmICgkbG9jYXRpb24ucGF0aCgpID09PSAnJykgJGxvY2F0aW9uLnBhdGgoJy8nKTtc
blx0XHRcdCRzY29wZS5sb2NhdGlvbiA9ICRsb2NhdGlvbjtcblx0XHR9XG5cblx0XHRvblBhdGgo
cGF0aDogc3RyaW5nKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5zdGF0dXNGaWx0ZXIgPSAocGF0aCA9
PT0gJy9hY3RpdmUnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHBhdGggPT09
ICcvY29tcGxldGVkJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307XG5cdFx0
fVxuXG5cdFx0b25Ub2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50ID0g
dGhpcy5maWx0ZXJGaWx0ZXIodGhpcy50b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0pLmxlbmd0
aDtcblx0XHRcdHRoaXMuJHNjb3BlLmRvbmVDb3VudCA9IHRoaXMudG9kb3MubGVuZ3RoIC0gdGhp
cy4kc2NvcGUucmVtYWluaW5nQ291bnQ7XG5cdFx0XHR0aGlzLiRzY29wZS5hbGxDaGVja2VkID0g
IXRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50XG5cdFx0XHR0aGlzLnRvZG9TdG9yYWdlLnB1dCh0
aGlzLnRvZG9zKTtcblx0XHR9XG5cblx0XHRhZGRUb2RvKCkge1xuXHRcdFx0dmFyIG5ld1RvZG8g
OiBzdHJpbmcgPSB0aGlzLiRzY29wZS5uZXdUb2RvLnRyaW0oKTtcblx0XHRcdGlmICghbmV3VG9k
by5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRvZG9z
LnB1c2gobmV3IFRvZG9JdGVtKG5ld1RvZG8sIGZhbHNlKSk7XG5cdFx0XHR0aGlzLiRzY29wZS5u
ZXdUb2RvID0gJyc7XG5cdFx0fVxuXG5cdFx0ZWRpdFRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gdG9kb0l0ZW07XG5cblx0XHRcdC8vIENs
b25lIHRoZSBvcmlnaW5hbCB0b2RvIGluIGNhc2UgZWRpdGluZyBpcyBjYW5jZWxsZWQuXG5cdFx0
XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9kb0l0ZW0p
O1xuXHRcdH1cblxuXHRcdHJldmVydEVkaXRzKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0
dGhpcy50b2Rvc1t0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pXSA9IHRoaXMuJHNjb3BlLm9y
aWdpbmFsVG9kbztcblx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gdHJ1ZTtcblx0XHR9XG5c
blx0XHRkb25lRWRpdGluZyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3Bl
LmVkaXRlZFRvZG8gPSBudWxsO1xuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gbnVs
bDtcblx0XHRcdGlmICh0aGlzLiRzY29wZS5yZXZlcnRlZCkge1xuXHRcdFx0XHQvLyBUb2RvIGVk
aXRzIHdlcmUgcmV2ZXJ0ZWQsIGRvbid0IHNhdmUuXG5cdFx0XHRcdHRoaXMuJHNjb3BlLnJldmVy
dGVkID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dG9kb0l0ZW0udGl0
bGUgPSB0b2RvSXRlbS50aXRsZS50cmltKCk7XG5cdFx0XHRpZiAoIXRvZG9JdGVtLnRpdGxlKSB7
XG5cdFx0XHRcdHRoaXMucmVtb3ZlVG9kbyh0b2RvSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5c
dFx0cmVtb3ZlVG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3Muc3Bs
aWNlKHRoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSksIDEpO1xuXHRcdH1cblxuXHRcdGNsZWFy
RG9uZVRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUudG9kb3MgPSB0aGlzLnRvZG9zID0gdGhp
cy50b2Rvcy5maWx0ZXIodG9kb0l0ZW0gPT4gIXRvZG9JdGVtLmNvbXBsZXRlZCk7XG5cdFx0fVxu
XG5cdFx0bWFya0FsbChjb21wbGV0ZWQ6IGJvb2xlYW4pIHtcblx0XHRcdHRoaXMudG9kb3MuZm9y
RWFjaCh0b2RvSXRlbSA9PiB7IHRvZG9JdGVtLmNvbXBsZXRlZCA9IGNvbXBsZXRlZDsgfSk7XG5c
dFx0fVxuXHR9XG5cbn1cbi8vIEFwcGxpY2F0aW9uLnRzXG5cbi8qKlxuICogVGhlIG1haW4gVG9k
b01WQyBhcHAgbW9kdWxlLlxuICpcbiAqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX1cbiAqL1xubW9k
dWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG9kb212YyA9IGFuZ3Vs
YXIubW9kdWxlKCd0b2RvbXZjJywgW10pXG4gICAgICAgICAgICAuY29udHJvbGxlcigndG9kb0N0
cmwnLCBUb2RvQ3RybClcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9CbHVyJywgdG9kb0Js
dXIpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRm9jdXMnLCB0b2RvRm9jdXMpXG4gICAg
ICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRXNjYXBlJywgdG9kb0VzY2FwZSlcbiAgICAgICAgICAg
IC5zZXJ2aWNlKCd0b2RvU3RvcmFnZScsIFRvZG9TdG9yYWdlKTtcbn1cbiIKK21vZHVsZS5leHBv
cnRzID0gIi8vIGxpYnMvanF1ZXJ5L2pxdWVyeS5kLnRzXG4vKiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
XCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXG5MaWNl
bnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5USElT
IENPREUgSVMgUFJPVklERUQgKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJ
TkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5XQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxuTUVSQ0hBTlRB
QkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAg
TGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG5hbmQg
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xu
XG4vLyBUeXBpbmcgZm9yIHRoZSBqUXVlcnkgbGlicmFyeSwgdmVyc2lvbiAxLjEwLnggLyAyLjAu
eFxuLy8gUHJvamVjdDogaHR0cDovL2pxdWVyeS5jb20vXG4vLyBEZWZpbml0aW9ucyBieTogQm9y
aXMgWWFua292IDxodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvPiwgQ2hyaXN0aWFuIEhv
ZmZtZWlzdGVyIDxodHRwczovL2dpdGh1Yi5jb20vY2hvZmZtZWlzdGVyPiwgU3RldmUgRmVudG9u
LCBEaXVsbGVpIEdvbWVzIDxodHRwczovL2dpdGh1Yi5jb20vRGl1bGxlaT4sIFRhc3MgSWxpb3Bv
dWxvcyA8aHR0cHM6Ly9naXRodWIuY29tL3Rhc29pbGk+LCBKYXNvbiBTd2VhcmluZ2VuLCBTZWFu
IEhpbGwgPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWFuc2tpPiwgR3V1cyBHb29zc2VucyA8aHR0cHM6
Ly9naXRodWIuY29tL0d1dXo+LCBLZWxseSBTdW1tZXJsaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9r
c3VtbWVybGluPiwgQmFzYXJhdCBBbGkgU3llZCA8aHR0cHM6Ly9naXRodWIuY29tL2Jhc2FyYXQ+
LCBOaWNob2xhcyBXb2x2ZXJzb24gPGh0dHBzOi8vZ2l0aHViLmNvbS9ud29sdmVyc29uPiwgRGVy
ZWsgQ2ljZXJvbmUgPGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJla2NpY2Vyb25lPiwgQW5kcmV3IEdh
c3BhciA8aHR0cHM6Ly9naXRodWIuY29tL0FuZHJld0dhc3Bhcj4sIEphbWVzIEhhcnJpc29uIEZp
c2hlciA8aHR0cHM6Ly9naXRodWIuY29tL2phbWVzaGZpc2hlcj4sIFNlaWtpY2hpIEtvbmRvIDxo
dHRwczovL2dpdGh1Yi5jb20vc2Vpa2ljaGk+LCBCZW5qYW1pbiBKYWNrbWFuIDxodHRwczovL2dp
dGh1Yi5jb20vYmVuamFtaW5qYWNrbWFuPiwgUG91bCBTb3JlbnNlbiA8aHR0cHM6Ly9naXRodWIu
Y29tL3MwOTMyOTQ+LCBKb3NoIFN0cm9ibCA8aHR0cHM6Ly9naXRodWIuY29tL0pvc2hTdHJvYmw+
LCBKb2huIFJlaWxseSA8aHR0cHM6Ly9naXRodWIuY29tL2pvaG5ueXJlaWxseS8+XG4vLyBEZWZp
bml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxu
XG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEFKQVggc2V0dGluZyB0aGF0IHdpbGwgY29uZmln
dXJlIHRoZSBBSkFYIHJlcXVlc3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5QWpheFNldHRpbmdzIHtc
biAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNlbnQgaW4gdGhlIHJlcXVlc3QgaGVh
ZGVyIHRoYXQgdGVsbHMgdGhlIHNlcnZlciB3aGF0IGtpbmQgb2YgcmVzcG9uc2UgaXQgd2lsbCBh
Y2NlcHQgaW4gcmV0dXJuLiBJZiB0aGUgYWNjZXB0cyBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlv
biwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBt
ZXRob2QuXG4gICAgICovXG4gICAgYWNjZXB0cz86IGFueTtcbiAgICAvKipcbiAgICAgKiBCeSBk
ZWZhdWx0LCBhbGwgcmVxdWVzdHMgYXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgKGkuZS4gdGhpcyBp
cyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0KS4gSWYgeW91IG5lZWQgc3luY2hyb25vdXMgcmVxdWVz
dHMsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS4gQ3Jvc3MtZG9tYWluIHJlcXVlc3RzIGFuZCBk
YXRhVHlwZTogXCJqc29ucFwiIHJlcXVlc3RzIGRvIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIG9w
ZXJhdGlvbi4gTm90ZSB0aGF0IHN5bmNocm9ub3VzIHJlcXVlc3RzIG1heSB0ZW1wb3JhcmlseSBs
b2NrIHRoZSBicm93c2VyLCBkaXNhYmxpbmcgYW55IGFjdGlvbnMgd2hpbGUgdGhlIHJlcXVlc3Qg
aXMgYWN0aXZlLiBBcyBvZiBqUXVlcnkgMS44LCB0aGUgdXNlIG9mIGFzeW5jOiBmYWxzZSB3aXRo
IGpxWEhSICgkLkRlZmVycmVkKSBpcyBkZXByZWNhdGVkOyB5b3UgbXVzdCB1c2UgdGhlIHN1Y2Nl
c3MvZXJyb3IvY29tcGxldGUgY2FsbGJhY2sgb3B0aW9ucyBpbnN0ZWFkIG9mIHRoZSBjb3JyZXNw
b25kaW5nIG1ldGhvZHMgb2YgdGhlIGpxWEhSIG9iamVjdCBzdWNoIGFzIGpxWEhSLmRvbmUoKSBv
ciB0aGUgZGVwcmVjYXRlZCBqcVhIUi5zdWNjZXNzKCkuXG4gICAgICovXG4gICAgYXN5bmM/OiBi
b29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgcHJlLXJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24g
dGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhN
TEhUVFBSZXF1ZXN0KSBvYmplY3QgYmVmb3JlIGl0IGlzIHNlbnQuIFVzZSB0aGlzIHRvIHNldCBj
dXN0b20gaGVhZGVycywgZXRjLiBUaGUganFYSFIgYW5kIHNldHRpbmdzIG9iamVjdHMgYXJlIHBh
c3NlZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC4gUmV0dXJuaW5nIGZhbHNl
IGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uIHdpbGwgY2FuY2VsIHRoZSByZXF1ZXN0LiBBcyBv
ZiBqUXVlcnkgMS41LCB0aGUgYmVmb3JlU2VuZCBvcHRpb24gd2lsbCBiZSBjYWxsZWQgcmVnYXJk
bGVzcyBvZiB0aGUgdHlwZSBvZiByZXF1ZXN0LlxuICAgICAqL1xuICAgIGJlZm9yZVNlbmQ/IChq
cVhIUjogSlF1ZXJ5WEhSLCBzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogYW55O1xuICAg
IC8qKlxuICAgICAqIElmIHNldCB0byBmYWxzZSwgaXQgd2lsbCBmb3JjZSByZXF1ZXN0ZWQgcGFn
ZXMgbm90IHRvIGJlIGNhY2hlZCBieSB0aGUgYnJvd3Nlci4gTm90ZTogU2V0dGluZyBjYWNoZSB0
byBmYWxzZSB3aWxsIG9ubHkgd29yayBjb3JyZWN0bHkgd2l0aCBIRUFEIGFuZCBHRVQgcmVxdWVz
dHMuIEl0IHdvcmtzIGJ5IGFwcGVuZGluZyBcIl89e3RpbWVzdGFtcH1cIiB0byB0aGUgR0VUIHBh
cmFtZXRlcnMuIFRoZSBwYXJhbWV0ZXIgaXMgbm90IG5lZWRlZCBmb3Igb3RoZXIgdHlwZXMgb2Yg
cmVxdWVzdHMsIGV4Y2VwdCBpbiBJRTggd2hlbiBhIFBPU1QgaXMgbWFkZSB0byBhIFVSTCB0aGF0
IGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGJ5IGEgR0VULlxuICAgICAqL1xuICAgIGNhY2hl
PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVu
IHRoZSByZXF1ZXN0IGZpbmlzaGVzIChhZnRlciBzdWNjZXNzIGFuZCBlcnJvciBjYWxsYmFja3Mg
YXJlIGV4ZWN1dGVkKS4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHR3byBhcmd1bWVudHM6IFRo
ZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGFuZCBhIHN0
cmluZyBjYXRlZ29yaXppbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVxdWVzdCAoXCJzdWNjZXNzXCIs
IFwibm90bW9kaWZpZWRcIiwgXCJlcnJvclwiLCBcInRpbWVvdXRcIiwgXCJhYm9ydFwiLCBvciBc
InBhcnNlcmVycm9yXCIpLiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgY29tcGxldGUgc2V0dGluZyBj
YW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNh
bGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgY29tcGxl
dGU/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoq
XG4gICAgICogQW4gb2JqZWN0IG9mIHN0cmluZy9yZWd1bGFyLWV4cHJlc3Npb24gcGFpcnMgdGhh
dCBkZXRlcm1pbmUgaG93IGpRdWVyeSB3aWxsIHBhcnNlIHRoZSByZXNwb25zZSwgZ2l2ZW4gaXRz
IGNvbnRlbnQgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb250ZW50
cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8vQWNjb3JkaW5nIHRvIGpRdWVyeS5h
amF4IHNvdXJjZSBjb2RlLCBhamF4J3Mgb3B0aW9uIGFjdHVhbGx5IGFsbG93cyBjb250ZW50VHlw
ZSB0byBzZXQgdG8gXCJmYWxzZVwiXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFu
a292L0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvNzQyXG4gICAgLyoqXG4gICAgICogV2hlbiBzZW5k
aW5nIGRhdGEgdG8gdGhlIHNlcnZlciwgdXNlIHRoaXMgY29udGVudCB0eXBlLiBEZWZhdWx0IGlz
IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsIHdo
aWNoIGlzIGZpbmUgZm9yIG1vc3QgY2FzZXMuIElmIHlvdSBleHBsaWNpdGx5IHBhc3MgaW4gYSBj
b250ZW50LXR5cGUgdG8gJC5hamF4KCksIHRoZW4gaXQgaXMgYWx3YXlzIHNlbnQgdG8gdGhlIHNl
cnZlciAoZXZlbiBpZiBubyBkYXRhIGlzIHNlbnQpLiBUaGUgVzNDIFhNTEh0dHBSZXF1ZXN0IHNw
ZWNpZmljYXRpb24gZGljdGF0ZXMgdGhhdCB0aGUgY2hhcnNldCBpcyBhbHdheXMgVVRGLTg7IHNw
ZWNpZnlpbmcgYW5vdGhlciBjaGFyc2V0IHdpbGwgbm90IGZvcmNlIHRoZSBicm93c2VyIHRvIGNo
YW5nZSB0aGUgZW5jb2RpbmcuXG4gICAgICovXG4gICAgY29udGVudFR5cGU/OiBhbnk7XG4gICAg
LyoqXG4gICAgICogVGhpcyBvYmplY3Qgd2lsbCBiZSBtYWRlIHRoZSBjb250ZXh0IG9mIGFsbCBB
amF4LXJlbGF0ZWQgY2FsbGJhY2tzLiBCeSBkZWZhdWx0LCB0aGUgY29udGV4dCBpcyBhbiBvYmpl
Y3QgdGhhdCByZXByZXNlbnRzIHRoZSBhamF4IHNldHRpbmdzIHVzZWQgaW4gdGhlIGNhbGwgKCQu
YWpheFNldHRpbmdzIG1lcmdlZCB3aXRoIHRoZSBzZXR0aW5ncyBwYXNzZWQgdG8gJC5hamF4KS5c
biAgICAgKi9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGFUeXBlLXRvLWRhdGFUeXBlIGNvbnZlcnRlcnMuIEVhY2ggY29udmVydGVy
J3MgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRyYW5zZm9ybWVkIHZhbHVl
IG9mIHRoZSByZXNwb25zZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb252
ZXJ0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogSWYgeW91
IHdpc2ggdG8gZm9yY2UgYSBjcm9zc0RvbWFpbiByZXF1ZXN0IChzdWNoIGFzIEpTT05QKSBvbiB0
aGUgc2FtZSBkb21haW4sIHNldCB0aGUgdmFsdWUgb2YgY3Jvc3NEb21haW4gdG8gdHJ1ZS4gVGhp
cyBhbGxvd3MsIGZvciBleGFtcGxlLCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbiB0byBhbm90aGVy
IGRvbWFpbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjcm9zc0RvbWFpbj86
IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIu
IEl0IGlzIGNvbnZlcnRlZCB0byBhIHF1ZXJ5IHN0cmluZywgaWYgbm90IGFscmVhZHkgYSBzdHJp
bmcuIEl0J3MgYXBwZW5kZWQgdG8gdGhlIHVybCBmb3IgR0VULXJlcXVlc3RzLiBTZWUgcHJvY2Vz
c0RhdGEgb3B0aW9uIHRvIHByZXZlbnQgdGhpcyBhdXRvbWF0aWMgcHJvY2Vzc2luZy4gT2JqZWN0
IG11c3QgYmUgS2V5L1ZhbHVlIHBhaXJzLiBJZiB2YWx1ZSBpcyBhbiBBcnJheSwgalF1ZXJ5IHNl
cmlhbGl6ZXMgbXVsdGlwbGUgdmFsdWVzIHdpdGggc2FtZSBrZXkgYmFzZWQgb24gdGhlIHZhbHVl
IG9mIHRoZSB0cmFkaXRpb25hbCBzZXR0aW5nIChkZXNjcmliZWQgYmVsb3cpLlxuICAgICAqL1xu
ICAgIGRhdGE/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSB1c2VkIHRv
IGhhbmRsZSB0aGUgcmF3IHJlc3BvbnNlIGRhdGEgb2YgWE1MSHR0cFJlcXVlc3QuVGhpcyBpcyBh
IHByZS1maWx0ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNlLiBZb3Ugc2hv
dWxkIHJldHVybiB0aGUgc2FuaXRpemVkIGRhdGEuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHR3byBh
cmd1bWVudHM6IFRoZSByYXcgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHRoZSAn
ZGF0YVR5cGUnIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBkYXRhRmlsdGVyPyAoZGF0YTogYW55
LCB0eTogYW55KTogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB5
b3UncmUgZXhwZWN0aW5nIGJhY2sgZnJvbSB0aGUgc2VydmVyLiBJZiBub25lIGlzIHNwZWNpZmll
ZCwgalF1ZXJ5IHdpbGwgdHJ5IHRvIGluZmVyIGl0IGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUgb2Yg
dGhlIHJlc3BvbnNlIChhbiBYTUwgTUlNRSB0eXBlIHdpbGwgeWllbGQgWE1MLCBpbiAxLjQgSlNP
TiB3aWxsIHlpZWxkIGEgSmF2YVNjcmlwdCBvYmplY3QsIGluIDEuNCBzY3JpcHQgd2lsbCBleGVj
dXRlIHRoZSBzY3JpcHQsIGFuZCBhbnl0aGluZyBlbHNlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBz
dHJpbmcpLlxuICAgICAqL1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAq
IEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxzLiBUaGUgZnVuY3Rp
b24gcmVjZWl2ZXMgdGhyZWUgYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwg
WE1MSHR0cFJlcXVlc3QpIG9iamVjdCwgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBl
cnJvciB0aGF0IG9jY3VycmVkIGFuZCBhbiBvcHRpb25hbCBleGNlcHRpb24gb2JqZWN0LCBpZiBv
bmUgb2NjdXJyZWQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCAoYmVz
aWRlcyBudWxsKSBhcmUgXCJ0aW1lb3V0XCIsIFwiZXJyb3JcIiwgXCJhYm9ydFwiLCBhbmQgXCJw
YXJzZXJlcnJvclwiLiBXaGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJzLCBlcnJvclRocm93biByZWNl
aXZlcyB0aGUgdGV4dHVhbCBwb3J0aW9uIG9mIHRoZSBIVFRQIHN0YXR1cywgc3VjaCBhcyBcIk5v
dCBGb3VuZFwiIG9yIFwiSW50ZXJuYWwgU2VydmVyIEVycm9yLlwiIEFzIG9mIGpRdWVyeSAxLjUs
IHRoZSBlcnJvciBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNo
IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIE5vdGU6IFRoaXMgaGFuZGxlciBpcyBu
b3QgY2FsbGVkIGZvciBjcm9zcy1kb21haW4gc2NyaXB0IGFuZCBjcm9zcy1kb21haW4gSlNPTlAg
cmVxdWVzdHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBlcnJvcj8gKGpx
WEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZywgZXJyb3JUaHJvdzogc3RyaW5nKTog
YW55O1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdHJpZ2dlciBnbG9iYWwgQWpheCBldmVu
dCBoYW5kbGVycyBmb3IgdGhpcyByZXF1ZXN0LiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBTZXQgdG8g
ZmFsc2UgdG8gcHJldmVudCB0aGUgZ2xvYmFsIGhhbmRsZXJzIGxpa2UgYWpheFN0YXJ0IG9yIGFq
YXhTdG9wIGZyb20gYmVpbmcgdHJpZ2dlcmVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wg
dmFyaW91cyBBamF4IEV2ZW50cy5cbiAgICAgKi9cbiAgICBnbG9iYWw/OiBib29sZWFuO1xuICAg
IC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWUgcGFp
cnMgdG8gc2VuZCBhbG9uZyB3aXRoIHJlcXVlc3RzIHVzaW5nIHRoZSBYTUxIdHRwUmVxdWVzdCB0
cmFuc3BvcnQuIFRoZSBoZWFkZXIgWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QgaXMg
YWx3YXlzIGFkZGVkLCBidXQgaXRzIGRlZmF1bHQgWE1MSHR0cFJlcXVlc3QgdmFsdWUgY2FuIGJl
IGNoYW5nZWQgaGVyZS4gVmFsdWVzIGluIHRoZSBoZWFkZXJzIHNldHRpbmcgY2FuIGFsc28gYmUg
b3ZlcndyaXR0ZW4gZnJvbSB3aXRoaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24uICh2ZXJzaW9u
IGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSByZXF1ZXN0IHRvIGJlIHN1Y2Nlc3NmdWwg
b25seSBpZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcmVxdWVzdC4g
VGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSBMYXN0LU1vZGlmaWVkIGhlYWRlci4gRGVmYXVs
dCB2YWx1ZSBpcyBmYWxzZSwgaWdub3JpbmcgdGhlIGhlYWRlci4gSW4galF1ZXJ5IDEuNCB0aGlz
IHRlY2huaXF1ZSBhbHNvIGNoZWNrcyB0aGUgJ2V0YWcnIHNwZWNpZmllZCBieSB0aGUgc2VydmVy
IHRvIGNhdGNoIHVubW9kaWZpZWQgZGF0YS5cbiAgICAgKi9cbiAgICBpZk1vZGlmaWVkPzogYm9v
bGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB0byBi
ZSByZWNvZ25pemVkIGFzIFwibG9jYWwsXCIgKGUuZy4gdGhlIGZpbGVzeXN0ZW0pLCBldmVuIGlm
IGpRdWVyeSBkb2VzIG5vdCByZWNvZ25pemUgaXQgYXMgc3VjaCBieSBkZWZhdWx0LiBUaGUgZm9s
bG93aW5nIHByb3RvY29scyBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYXMgbG9jYWw6IGZpbGUs
ICotZXh0ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJZiB0aGUgaXNMb2NhbCBzZXR0aW5nIG5lZWRzIG1v
ZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4
U2V0dXAoKSBtZXRob2QuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBpc0xv
Y2FsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgY2FsbGJhY2sgZnVu
Y3Rpb24gbmFtZSBpbiBhIGpzb25wIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGlu
c3RlYWQgb2YgJ2NhbGxiYWNrJyBpbiB0aGUgJ2NhbGxiYWNrPT8nIHBhcnQgb2YgdGhlIHF1ZXJ5
IHN0cmluZyBpbiB0aGUgdXJsLiBTbyB7anNvbnA6J29uSlNPTlBMb2FkJ30gd291bGQgcmVzdWx0
IGluICdvbkpTT05QTG9hZD0/JyBwYXNzZWQgdG8gdGhlIHNlcnZlci4gQXMgb2YgalF1ZXJ5IDEu
NSwgc2V0dGluZyB0aGUganNvbnAgb3B0aW9uIHRvIGZhbHNlIHByZXZlbnRzIGpRdWVyeSBmcm9t
IGFkZGluZyB0aGUgXCI/Y2FsbGJhY2tcIiBzdHJpbmcgdG8gdGhlIFVSTCBvciBhdHRlbXB0aW5n
IHRvIHVzZSBcIj0/XCIgZm9yIHRyYW5zZm9ybWF0aW9uLiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91
bGQgYWxzbyBleHBsaWNpdGx5IHNldCB0aGUganNvbnBDYWxsYmFjayBzZXR0aW5nLiBGb3IgZXhh
bXBsZSwgeyBqc29ucDogZmFsc2UsIGpzb25wQ2FsbGJhY2s6IFwiY2FsbGJhY2tOYW1lXCIgfVxu
ICAgICAqL1xuICAgIGpzb25wPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhl
IGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgZm9yIGEgSlNPTlAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3
aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgcmFuZG9tIG5hbWUgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgYnkgalF1ZXJ5LiBJdCBpcyBwcmVmZXJhYmxlIHRvIGxldCBqUXVlcnkgZ2VuZXJhdGUg
YSB1bmlxdWUgbmFtZSBhcyBpdCdsbCBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2UgdGhlIHJlcXVl
c3RzIGFuZCBwcm92aWRlIGNhbGxiYWNrcyBhbmQgZXJyb3IgaGFuZGxpbmcuIFlvdSBtYXkgd2Fu
dCB0byBzcGVjaWZ5IHRoZSBjYWxsYmFjayB3aGVuIHlvdSB3YW50IHRvIGVuYWJsZSBiZXR0ZXIg
YnJvd3NlciBjYWNoaW5nIG9mIEdFVCByZXF1ZXN0cy4gQXMgb2YgalF1ZXJ5IDEuNSwgeW91IGNh
biBhbHNvIHVzZSBhIGZ1bmN0aW9uIGZvciB0aGlzIHNldHRpbmcsIGluIHdoaWNoIGNhc2UgdGhl
IHZhbHVlIG9mIGpzb25wQ2FsbGJhY2sgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhh
dCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBqc29ucENhbGxiYWNrPzogYW55O1xuICAgIC8qKlxu
ICAgICAqIEEgbWltZSB0eXBlIHRvIG92ZXJyaWRlIHRoZSBYSFIgbWltZSB0eXBlLiAodmVyc2lv
biBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgbWltZVR5cGU/OiBzdHJpbmc7XG4gICAgLyoq
XG4gICAgICogQSBwYXNzd29yZCB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVz
cG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9c
biAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkYXRh
IHBhc3NlZCBpbiB0byB0aGUgZGF0YSBvcHRpb24gYXMgYW4gb2JqZWN0ICh0ZWNobmljYWxseSwg
YW55dGhpbmcgb3RoZXIgdGhhbiBhIHN0cmluZykgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIHRyYW5z
Zm9ybWVkIGludG8gYSBxdWVyeSBzdHJpbmcsIGZpdHRpbmcgdG8gdGhlIGRlZmF1bHQgY29udGVu
dC10eXBlIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIuIElmIHlvdSB3YW50
IHRvIHNlbmQgYSBET01Eb2N1bWVudCwgb3Igb3RoZXIgbm9uLXByb2Nlc3NlZCBkYXRhLCBzZXQg
dGhpcyBvcHRpb24gdG8gZmFsc2UuXG4gICAgICovXG4gICAgcHJvY2Vzc0RhdGE/OiBib29sZWFu
O1xuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwbGllcyB3aGVuIHRoZSBcInNjcmlwdFwiIHRyYW5z
cG9ydCBpcyB1c2VkIChlLmcuLCBjcm9zcy1kb21haW4gcmVxdWVzdHMgd2l0aCBcImpzb25wXCIg
b3IgXCJzY3JpcHRcIiBkYXRhVHlwZSBhbmQgXCJHRVRcIiB0eXBlKS4gU2V0cyB0aGUgY2hhcnNl
dCBhdHRyaWJ1dGUgb24gdGhlIHNjcmlwdCB0YWcgdXNlZCBpbiB0aGUgcmVxdWVzdC4gVXNlZCB3
aGVuIHRoZSBjaGFyYWN0ZXIgc2V0IG9uIHRoZSBsb2NhbCBwYWdlIGlzIG5vdCB0aGUgc2FtZSBh
cyB0aGUgb25lIG9uIHRoZSByZW1vdGUgc2NyaXB0LlxuICAgICAqL1xuICAgIHNjcmlwdENoYXJz
ZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIG51bWVyaWMgSFRUUCBj
b2RlcyBhbmQgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBoYXMgdGhl
IGNvcnJlc3BvbmRpbmcgY29kZS4gZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgc3Rh
dHVzIGNvZGUgZnVuY3Rpb25zIHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgc3VjY2Vz
cyBjYWxsYmFjazsgaWYgaXQgcmVzdWx0cyBpbiBhbiBlcnJvciAoaW5jbHVkaW5nIDN4eCByZWRp
cmVjdCksIHRoZXkgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBlcnJvciBjYWxsYmFj
ay4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBzdGF0dXNDb2RlPzogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0aHJl
ZSBhcmd1bWVudHM6IFRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwgZm9ybWF0dGVk
IGFjY29yZGluZyB0byB0aGUgZGF0YVR5cGUgcGFyYW1ldGVyOyBhIHN0cmluZyBkZXNjcmliaW5n
IHRoZSBzdGF0dXM7IGFuZCB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVl
c3QpIG9iamVjdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIHN1Y2Nlc3Mgc2V0dGluZyBjYW4gYWNj
ZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBp
biB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgc3VjY2Vzcz8gKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKTogYW55O1xuICAg
IC8qKlxuICAgICAqIFNldCBhIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHRoZSByZXF1
ZXN0LiBUaGlzIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCB0aW1lb3V0IHNldCB3aXRoICQuYWph
eFNldHVwKCkuIFRoZSB0aW1lb3V0IHBlcmlvZCBzdGFydHMgYXQgdGhlIHBvaW50IHRoZSAkLmFq
YXggY2FsbCBpcyBtYWRlOyBpZiBzZXZlcmFsIG90aGVyIHJlcXVlc3RzIGFyZSBpbiBwcm9ncmVz
cyBhbmQgdGhlIGJyb3dzZXIgaGFzIG5vIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSwgaXQgaXMgcG9z
c2libGUgZm9yIGEgcmVxdWVzdCB0byB0aW1lIG91dCBiZWZvcmUgaXQgY2FuIGJlIHNlbnQuIElu
IGpRdWVyeSAxLjQueCBhbmQgYmVsb3csIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2lsbCBi
ZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIHRoZSByZXF1ZXN0IHRpbWVzIG91dDsgYWNjZXNzaW5n
IGFueSBvYmplY3QgbWVtYmVycyBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uLiBJbiBGaXJlZm94IDMu
MCsgb25seSwgc2NyaXB0IGFuZCBKU09OUCByZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2VsbGVkIGJ5
IGEgdGltZW91dDsgdGhlIHNjcmlwdCB3aWxsIHJ1biBldmVuIGlmIGl0IGFycml2ZXMgYWZ0ZXIg
dGhlIHRpbWVvdXQgcGVyaW9kLlxuICAgICAqL1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAg
LyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHRyYWRp
dGlvbmFsIHN0eWxlIG9mIHBhcmFtIHNlcmlhbGl6YXRpb24uXG4gICAgICovXG4gICAgdHJhZGl0
aW9uYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHJlcXVlc3QgdG8g
bWFrZSAoXCJQT1NUXCIgb3IgXCJHRVRcIiksIGRlZmF1bHQgaXMgXCJHRVRcIi4gTm90ZTogT3Ro
ZXIgSFRUUCByZXF1ZXN0IG1ldGhvZHMsIHN1Y2ggYXMgUFVUIGFuZCBERUxFVEUsIGNhbiBhbHNv
IGJlIHVzZWQgaGVyZSwgYnV0IHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJz
LlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICov
XG4gICAgdXJsPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgdXNlcm5hbWUgdG8gYmUgdXNl
ZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhl
bnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAg
LyoqXG4gICAgICogQ2FsbGJhY2sgZm9yIGNyZWF0aW5nIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmpl
Y3QuIERlZmF1bHRzIHRvIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gYXZhaWxhYmxlIChJRSksIHRo
ZSBYTUxIdHRwUmVxdWVzdCBvdGhlcndpc2UuIE92ZXJyaWRlIHRvIHByb3ZpZGUgeW91ciBvd24g
aW1wbGVtZW50YXRpb24gZm9yIFhNTEh0dHBSZXF1ZXN0IG9yIGVuaGFuY2VtZW50cyB0byB0aGUg
ZmFjdG9yeS5cbiAgICAgKi9cbiAgICB4aHI/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2Jq
ZWN0IG9mIGZpZWxkTmFtZS1maWVsZFZhbHVlIHBhaXJzIHRvIHNldCBvbiB0aGUgbmF0aXZlIFhI
UiBvYmplY3QuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBpdCB0byBzZXQgd2l0aENyZWRlbnRp
YWxzIHRvIHRydWUgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBpZiBuZWVkZWQuIEluIGpRdWVy
eSAxLjUsIHRoZSB3aXRoQ3JlZGVudGlhbHMgcHJvcGVydHkgd2FzIG5vdCBwcm9wYWdhdGVkIHRv
IHRoZSBuYXRpdmUgWEhSIGFuZCB0aHVzIENPUlMgcmVxdWVzdHMgcmVxdWlyaW5nIGl0IHdvdWxk
IGlnbm9yZSB0aGlzIGZsYWcuIEZvciB0aGlzIHJlYXNvbiwgd2UgcmVjb21tZW5kIHVzaW5nIGpR
dWVyeSAxLjUuMSsgc2hvdWxkIHlvdSByZXF1aXJlIHRoZSB1c2Ugb2YgaXQuICh2ZXJzaW9uIGFk
ZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICB4aHJGaWVsZHM/OiB7IFtrZXk6IHN0cmluZ106IGFu
eTsgfTtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBqcVhIUiBvYmplY3RcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5WEhSIGV4dGVuZHMgWE1MSHR0cFJlcXVlc3QsIEpRdWVyeVByb21pc2U8
YW55PiB7XG4gICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lVHlwZTogc3RyaW5nKTogYW55O1xuICAg
IGFib3J0KHN0YXR1c1RleHQ/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKlxuICAgIEludGVyZmFj
ZSBmb3IgdGhlIEpRdWVyeSBjYWxsYmFja1xuKi9cbmludGVyZmFjZSBKUXVlcnlDYWxsYmFjayB7
XG4gICAgYWRkKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG4gICAgZGlzYWJsZSgpOiBhbnk7
XG4gICAgZW1wdHkoKTogYW55O1xuICAgIGZpcmUoLi4uYXJndW1lbnRzOiBhbnlbXSk6IGFueTtc
biAgICBmaXJlZCgpOiBib29sZWFuO1xuICAgIGZpcmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJn
czogYW55W10pOiBhbnk7XG4gICAgaGFzKGNhbGxiYWNrOiBhbnkpOiBib29sZWFuO1xuICAgIGxv
Y2soKTogYW55O1xuICAgIGxvY2tlZCgpOiBib29sZWFuO1xuICAgIHJlbW92ZSguLi5jYWxsYmFj
a3M6IGFueVtdKTogYW55O1xufVxuXG4vKlxuICAgIEFsbG93cyBqUXVlcnkgUHJvbWlzZXMgdG8g
aW50ZXJvcCB3aXRoIG5vbi1qUXVlcnkgcHJvbWlzZXNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VD4ge1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUs
IG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47
XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/
OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIElu
dGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBwcm9taXNlLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmlu
dGVyZmFjZSBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNh
bGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21p
c2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+
O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAg
ICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
blxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxU
PjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
biAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAg
ICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+
O1xuXG4gICAgLy8gRGVwcmVjYXRlZCAtIGdpdmVuIG5vIHR5cGluZ3NcbiAgICBwaXBlKGRvbmVG
aWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIGZhaWxGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIHBy
b2dyZXNzRmlsdGVyPzogKHg6IGFueSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVh
c29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9
PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6
IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4g
VSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5
UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkg
PT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcblxuICAgIC8vIEJlY2F1c2UgSlF1ZXJ5IFByb21p
c2VzIFN1Y2tcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUs
IG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnBy
b2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+
KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+
LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5w
cm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxV
PihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFz
b25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4u
cHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8
VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVy
eVByb21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGRlZmVy
cmVkLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlEZWZlcnJlZDxUPiBl
eHRlbmRzIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2Fs
bGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcblxuICAgIG5vdGlmeSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+
O1xuICAgIG5vdGlmeVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuXG4gICAgcmVqZWN0KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8
VD47XG4gICAgcmVqZWN0V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG5cbiAgICByZXNvbHZlKHZhbDogVCk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIHJlc29sdmUoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNv
bHZlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47
XG4gICAgc3RhdGUoKTogc3RyaW5nO1xuXG4gICAgcHJvbWlzZSh0YXJnZXQ/OiBhbnkpOiBKUXVl
cnlQcm9taXNlPFQ+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBvZiB0aGUgSlF1ZXJ5IGV4dGVu
c2lvbiBvZiB0aGUgVzNDIGV2ZW50IG9iamVjdFxuKi9cblxuaW50ZXJmYWNlIEJhc2VKUXVlcnlF
dmVudE9iamVjdCBleHRlbmRzIEV2ZW50IHtcbiAgICBkYXRhOiBhbnk7XG4gICAgZGVsZWdhdGVU
YXJnZXQ6IEVsZW1lbnQ7XG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47XG4gICAg
aXNJbW1lZGlhdGVQcm9wb2dhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBpc1Byb3BhZ2F0
aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHByZXZl
bnREZWZhdWx0KCk6IGFueTtcbiAgICByZWxhdGVkVGFyZ2V0OiBFbGVtZW50O1xuICAgIHJlc3Vs
dDogYW55O1xuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHN0b3BQ
cm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJl
cjtcbiAgICB3aGljaDogbnVtYmVyO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG59XG5cbmludGVy
ZmFjZSBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0
IHtcbiAgICBhbHRLZXk6IGJvb2xlYW47XG4gICAgY3RybEtleTogYm9vbGVhbjtcbiAgICBtZXRh
S2V5OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAg
IGJ1dHRvbjogbnVtYmVyO1xuICAgIGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1i
ZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBwYWdl
WDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgc2NyZWVuWDogbnVtYmVyO1xuICAg
IHNjcmVlblk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUtleUV2ZW50T2JqZWN0IGV4
dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgY2hhcjogYW55O1xuICAgIGNoYXJD
b2RlOiBudW1iZXI7XG4gICAga2V5OiBhbnk7XG4gICAga2V5Q29kZTogbnVtYmVyO1xufVxuXG5p
bnRlcmZhY2UgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVu
dE9iamVjdCB7XG4gICAgb3JpZ2luYWxFdmVudDogUG9wU3RhdGVFdmVudDtcbn1cblxuaW50ZXJm
YWNlIEpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0LCBKUXVl
cnlJbnB1dEV2ZW50T2JqZWN0LCBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0LCBKUXVlcnlLZXlFdmVu
dE9iamVjdCwgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCB7XG59XG5cbi8qXG4gICAgQ29sbGVj
dGlvbiBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzZXJcbiovXG5cbmludGVyZmFj
ZSBKUXVlcnlTdXBwb3J0IHtcbiAgICBhamF4PzogYm9vbGVhbjtcbiAgICBib3hNb2RlbD86IGJv
b2xlYW47XG4gICAgY2hhbmdlQnViYmxlcz86IGJvb2xlYW47XG4gICAgY2hlY2tDbG9uZT86IGJv
b2xlYW47XG4gICAgY2hlY2tPbj86IGJvb2xlYW47XG4gICAgY29ycz86IGJvb2xlYW47XG4gICAg
Y3NzRmxvYXQ/OiBib29sZWFuO1xuICAgIGhyZWZOb3JtYWxpemVkPzogYm9vbGVhbjtcbiAgICBo
dG1sU2VyaWFsaXplPzogYm9vbGVhbjtcbiAgICBsZWFkaW5nV2hpdGVzcGFjZT86IGJvb2xlYW47
XG4gICAgbm9DbG9uZUNoZWNrZWQ/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVFdmVudD86IGJvb2xl
YW47XG4gICAgb3BhY2l0eT86IGJvb2xlYW47XG4gICAgb3B0RGlzYWJsZWQ/OiBib29sZWFuO1xu
ICAgIG9wdFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBzY3JpcHRFdmFsPyAoKTogYm9vbGVhbjtc
biAgICBzdHlsZT86IGJvb2xlYW47XG4gICAgc3VibWl0QnViYmxlcz86IGJvb2xlYW47XG4gICAg
dGJvZHk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UGFyYW0ge1xuICAgIChvYmo6
IGFueSk6IHN0cmluZztcbiAgICAob2JqOiBhbnksIHRyYWRpdGlvbmFsOiBib29sZWFuKTogc3Ry
aW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBjb25zdHJ1Y3QgalF1ZXJ5
IGV2ZW50cyAod2l0aCAkLkV2ZW50KS4gSXQgaXNcbiAqIGRlZmluZWQgc2VwYXJhdGVseSBpbnN0
ZWFkIG9mIGlubGluZSBpbiBKUXVlcnlTdGF0aWMgdG8gYWxsb3dcbiAqIG92ZXJyaWRpbmcgdGhl
IGNvbnN0cnVjdGlvbiBmdW5jdGlvbiB3aXRoIHNwZWNpZmljIHN0cmluZ3NcbiAqIHJldHVybmlu
ZyBzcGVjaWZpYyBldmVudCBvYmplY3RzLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRDb25z
dHJ1Y3RvciB7XG4gICAgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1
ZXJ5RXZlbnRPYmplY3Q7XG4gICAgbmV3IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86
IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNl
ZCB0byBzcGVjaWZ5IGVhc2luZyBmdW5jdGlvbnMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFYXNp
bmcge1xuICAgIGxpbmVhcihwOiBudW1iZXIpOiBudW1iZXI7XG4gICAgc3dpbmcocDogbnVtYmVy
KTogbnVtYmVyO1xufVxuXG4vKlxuICAgIFN0YXRpYyBtZW1iZXJzIG9mIGpRdWVyeSAodGhvc2Ug
b24gJCBhbmQgalF1ZXJ5IHRoZW1zZWx2ZXMpXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVN0YXRpYyB7
XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSBy
ZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1
ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJl
IG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWph
eFNldHVwKCkuXG4gICAgICovXG4gICAgYWpheChzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdz
KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhU
VFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhl
IEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBi
ZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFq
YXgodXJsOiBzdHJpbmcsIHNldHRpbmdzPzogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhS
O1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5
IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUg
dGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRh
dGFUeXBlcyBBbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBzcGFjZS1z
ZXBhcmF0ZWQgZGF0YVR5cGVzXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNl
dCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAg
YWpheFByZWZpbHRlcihkYXRhVHlwZXM6IHN0cmluZywgaGFuZGxlcjogKG9wdHM6IGFueSwgb3Jp
Z2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6
IHZvaWQ7XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9k
aWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZv
cmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXgg
cmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihoYW5kbGVyOiAob3B0czogYW55
LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55KTogdm9pZDtcblxuICAgIGFqYXhTZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzO1xuXG4g
ICAgIC8qKlxuICAgICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVl
c3RzLiBJdHMgdXNlIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgICpcbiAgICAgICogQHBhcmFt
IG9wdGlvbnMgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBkZWZh
dWx0IEFqYXggcmVxdWVzdC4gQWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsLlxuICAgICAgKi9cbiAg
ICBhamF4U2V0dXAob3B0aW9uczogSlF1ZXJ5QWpheFNldHRpbmdzKTogdm9pZDtcblxuICAgIC8q
KlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBB
IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJv
bSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3Jp
cHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChk
YXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBk
YXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEg
ZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5n
IHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBh
cmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRh
IGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHht
bCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcs
IGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcs
IGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7
XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAg
R0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBk
YXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3
aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rp
b24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFy
YW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERl
ZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4g
ICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1l
bmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdo
aWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAg
ICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAg
ICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2lu
ZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5n
IGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAq
IEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhl
IHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJh
Y2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAg
ICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzog
KGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkp
OiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9t
IHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBh
cmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3Qg
aXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhh
dCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IHN0
cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpR
dWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgYSBKYXZh
U2NyaXB0IGZpbGUgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdCwgdGhl
biBleGVjdXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWlu
aW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0U2NyaXB0KHVybDogc3RyaW5nLCBzdWNjZXNz
PzogKHNjcmlwdDogc3RyaW5nLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIp
ID0+IGFueSk6IEpRdWVyeVhIUjtcblxuICAgIHBhcmFtOiBKUXVlcnlQYXJhbTtcblxuICAgIC8q
KlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVx
dWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUg
VVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mg
QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2Nl
ZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGlu
IHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBl
Y3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpz
b24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywg
c3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhI
UikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAg
KiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3
aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2Jq
ZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0
LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVj
dXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJv
dmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFU
eXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJ
bnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAq
L1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTog
YW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5
cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20g
dGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBh
cmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3Qg
aXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhh
dCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJl
IG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBk
YXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3Mg
KHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDog
c3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czog
c3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1
ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogQSBtdWx0aS1wdXJwb3NlIGNhbGxiYWNrcyBsaXN0
IG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgcG93ZXJmdWwgd2F5IHRvIG1hbmFnZSBjYWxsYmFjayBs
aXN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbGFncyBBbiBvcHRpb25hbCBsaXN0IG9mIHNw
YWNlLXNlcGFyYXRlZCBmbGFncyB0aGF0IGNoYW5nZSBob3cgdGhlIGNhbGxiYWNrIGxpc3QgYmVo
YXZlcy5cbiAgICAgKi9cbiAgICBDYWxsYmFja3MoZmxhZ3M/OiBzdHJpbmcpOiBKUXVlcnlDYWxs
YmFjaztcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIG9yIHJlbGVhc2VzIHRoZSBleGVjdXRpb24g
b2YgalF1ZXJ5J3MgcmVhZHkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG9sZCBJbmRp
Y2F0ZXMgd2hldGhlciB0aGUgcmVhZHkgaG9sZCBpcyBiZWluZyByZXF1ZXN0ZWQgb3IgcmVsZWFz
ZWRcbiAgICAgKi9cbiAgICBob2xkUmVhZHkoaG9sZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAo
c2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudDog
RWxlbWVudCk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiB7fSk6IEpRdWVyeTtcbiAgICAoZWxlbWVu
dEFycmF5OiBFbGVtZW50W10pOiBKUXVlcnk7XG4gICAgKG9iamVjdDogSlF1ZXJ5KTogSlF1ZXJ5
O1xuICAgIChmdW5jOiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICAoYXJyYXk6IGFueVtdKTogSlF1
ZXJ5O1xuICAgICgpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZWxpbnF1aXNoIGpRdWVy
eSdzIGNvbnRyb2wgb2YgdGhlICQgdmFyaWFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVt
b3ZlQWxsIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBqUXVlcnkg
dmFyaWFibGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZSAoaW5jbHVkaW5nIGpRdWVyeSBpdHNlbGYp
LlxuICAgICAqL1xuICAgIG5vQ29uZmxpY3QocmVtb3ZlQWxsPzogYm9vbGVhbik6IE9iamVjdDtc
blxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVu
Y3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2Jq
ZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBK
YXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFQ+W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAg
ICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9u
IG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJl
c2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVk
cyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVj
dHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IFRbXSk6IEpRdWVyeVByb21p
c2U8VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFj
ayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJl
ZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBs
YWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVk
czogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgY3NzSG9va3M6IHsgW2tleTogc3Ry
aW5nXTogYW55OyB9O1xuICAgIGNzc051bWJlcjogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3Rv
cmUgYXJiaXRyYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4g
UmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVs
ZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAq
IEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAg
ICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyBkYXRhIHZhbHVlLlxuICAgICAqL1xuICAgIGRhdGE8
VD4oZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogVDtcbiAgICAvKipc
biAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50
LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVs
bCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVt
ZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBA
cGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAg
ICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGFueTtcbiAgICAv
KipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVt
ZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUg
ZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
bGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAg
Ki9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueTtcblxuICAgIGhhc0RhdGEoZWxl
bWVudDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBx
dWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBx
dWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICByZW1vdmVEYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICAvLyBEZWZlcnJlZFxuICAgIERlZmVycmVkPFQ+KGJlZm9yZVN0YXJ0PzogKGRlZmVycmVk
OiBKUXVlcnlEZWZlcnJlZDxUPikgPT4gYW55KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICAv
LyBFZmZlY3RzXG4gICAgZng6IHsgdGljazogKCkgPT4gdm9pZDsgaW50ZXJ2YWw6IG51bWJlcjsg
c3RvcDogKCkgPT4gdm9pZDsgc3BlZWRzOiB7IHNsb3c6IG51bWJlcjsgZmFzdDogbnVtYmVyOyB9
OyBvZmY6IGJvb2xlYW47IHN0ZXA6IGFueTsgfTtcblxuICAgIC8vIEV2ZW50c1xuICAgIHByb3h5
KGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSwgY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlb
XSk6IGFueTtcbiAgICBwcm94eShjb250ZXh0OiBhbnksIG5hbWU6IHN0cmluZywgLi4uYXJnczog
YW55W10pOiBhbnk7XG5cbiAgICBFdmVudDogSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvcjtcblxuICAg
IC8vIEludGVybmFsc1xuICAgIGVycm9yKG1lc3NhZ2U6IGFueSk6IEpRdWVyeTtcblxuICAgIC8v
IE1pc2NlbGxhbmVvdXNcbiAgICBleHByOiBhbnk7XG4gICAgZm46IGFueTsgIC8vVE9ETzogRGVj
aWRlIGhvdyB3ZSB3YW50IHRvIHR5cGUgdGhpc1xuICAgIGlzUmVhZHk6IGJvb2xlYW47XG5cbiAg
ICAvLyBQcm9wZXJ0aWVzXG4gICAgc3VwcG9ydDogSlF1ZXJ5U3VwcG9ydDtcblxuICAgIC8vIFV0
aWxpdGllc1xuICAgIGNvbnRhaW5zKGNvbnRhaW5lcjogRWxlbWVudCwgY29udGFpbmVkOiBFbGVt
ZW50KTogYm9vbGVhbjtcblxuICAgIGVhY2goY29sbGVjdGlvbjogYW55LCBjYWxsYmFjazogKGlu
ZGV4SW5BcnJheTogYW55LCB2YWx1ZU9mRWxlbWVudDogYW55KSA9PiBhbnkpOiBhbnk7XG4gICAg
ZWFjaChjb2xsZWN0aW9uOiBKUXVlcnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIs
IHZhbHVlT2ZFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYW55KTogYW55O1xuICAgIGVhY2g8VD4o
Y29sbGVjdGlvbjogVFtdLCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9m
RWxlbWVudDogVCkgPT4gYW55KTogYW55O1xuXG4gICAgZXh0ZW5kKHRhcmdldDogYW55LCAuLi5v
YmpzOiBhbnlbXSk6IGFueTtcbiAgICBleHRlbmQoZGVlcDogYm9vbGVhbiwgdGFyZ2V0OiBhbnks
IC4uLm9ianM6IGFueVtdKTogYW55O1xuXG4gICAgZ2xvYmFsRXZhbChjb2RlOiBzdHJpbmcpOiBh
bnk7XG5cbiAgICBncmVwPFQ+KGFycmF5OiBUW10sIGZ1bmM6IChlbGVtZW50T2ZBcnJheTogVCwg
aW5kZXhJbkFycmF5OiBudW1iZXIpID0+IGJvb2xlYW4sIGludmVydD86IGJvb2xlYW4pOiBUW107
XG5cbiAgICBpbkFycmF5PFQ+KHZhbHVlOiBULCBhcnJheTogVFtdLCBmcm9tSW5kZXg/OiBudW1i
ZXIpOiBudW1iZXI7XG5cbiAgICBpc0FycmF5KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Vt
cHR5T2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Z1bmN0aW9uKG9iajogYW55KTog
Ym9vbGVhbjtcbiAgICBpc051bWVyaWModmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgaXNQbGFp
bk9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNXaW5kb3cob2JqOiBhbnkpOiBib29s
ZWFuO1xuICAgIGlzWE1MRG9jKG5vZGU6IE5vZGUpOiBib29sZWFuO1xuXG4gICAgbWFrZUFycmF5
KG9iajogYW55KTogYW55W107XG5cbiAgICBtYXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6
IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IFUpOiBVW107XG4g
ICAgbWFwKGFycmF5OiBhbnksIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IGFueSwgaW5kZXhJ
bkFycmF5OiBhbnkpID0+IGFueSk6IGFueTtcblxuICAgIG1lcmdlPFQ+KGZpcnN0OiBUW10sIHNl
Y29uZDogVFtdKTogVFtdO1xuICAgIG1lcmdlPFQsVT4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBVW10p
OiBhbnlbXTtcblxuICAgIG5vb3AoKTogYW55O1xuXG4gICAgbm93KCk6IG51bWJlcjtcblxuICAg
IHBhcnNlSlNPTihqc29uOiBzdHJpbmcpOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMg
YSBzdHJpbmcgaW50byBhbiBYTUwgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0
YWEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKi9cbiAgICBwYXJz
ZVhNTChkYXRhOiBzdHJpbmcpOiBYTUxEb2N1bWVudDtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVs
ZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZTogYW55W10pOiBKUXVlcnk7XG5cbiAg
ICB0cmltKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgdHlwZShvYmo6IGFueSk6IHN0cmlu
ZztcblxuICAgIHVuaXF1ZShhcnI6IGFueVtdKTogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBQ
YXJzZXMgYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBET00gbm9kZXMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZGF0YSBIVE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0gY29u
dGV4dCBET00gZWxlbWVudCB0byBzZXJ2ZSBhcyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgSFRN
TCBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ga2VlcFNjcmlwdHMgQSBC
b29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRo
ZSBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlSFRNTChkYXRhOiBzdHJpbmcsIGNvbnRl
eHQ/OiBIVE1MRWxlbWVudCwga2VlcFNjcmlwdHM/OiBib29sZWFuKTogYW55W107XG5cbiAgICBB
bmltYXRpb24oZWxlbTogYW55LCBwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueTtc
blxuICAgIGVhc2luZzogSlF1ZXJ5RWFzaW5nO1xufVxuXG4vKlxuICAgIFRoZSBqUXVlcnkgaW5z
dGFuY2UgbWVtYmVyc1xuKi9cbmludGVyZmFjZSBKUXVlcnkge1xuICAgIC8vIEFKQVhcbiAgICBh
amF4Q29tcGxldGUoaGFuZGxlcjogYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhFcnJvcihoYW5kbGVy
OiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U2VuZChoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFY
SFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
biAgICBhamF4U3RhcnQoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdG9w
KGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3VjY2VzcyhoYW5kbGVyOiAo
ZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIGxvYWQodXJsOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNvbXBs
ZXRlPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICBzZXJp
YWxpemVBcnJheSgpOiBhbnlbXTtcblxuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICBhZGRDbGFzcyhj
bGFzc05hbWVzOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkQ2xhc3MoZnVuYzogKGluZGV4OiBh
bnksIGN1cnJlbnRDbGFzczogYW55KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBodHRw
Oi8vYXBpLmpxdWVyeS5jb20vYWRkQmFjay9cbiAgICBhZGRCYWNrKHNlbGVjdG9yPzogc3RyaW5n
KTogSlF1ZXJ5O1xuXG5cbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHN0cmluZztc
biAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAg
ICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIGF0dHI6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIobWFwOiBhbnkpOiBKUXVlcnk7XG5cbiAgICBo
YXNDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICBodG1sKCk6IHN0cmlu
ZztcbiAgICBodG1sKGh0bWxTdHJpbmc6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKGh0bWxD
b250ZW50OiAoaW5kZXg6IG51bWJlciwgb2xkaHRtbDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgaHRtbChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIHByb3AocHJvcGVydHlO
YW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6
IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKG1hcDogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AocHJv
cGVydHlOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBvbGRQcm9wZXJ0eVZhbHVlOiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZTogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIHJlbW92ZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlUHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBzd3RjaD86IGJvb2xlYW4p
OiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Moc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAg
IHRvZ2dsZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSwgc3d0Y2g6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgdmFsKCk6IGFueTtcbiAgICB2YWwodmFsdWU6IHN0cmluZ1td
KTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1
ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHZhbChmdW5jOiAoaW5kZXg6IGFueSwgdmFsdWU6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBvZiBz
dHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNo
ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHBy
b3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBz
ZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJp
bmcsIHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICov
XG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNl
dCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFt
ZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNl
dCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmlu
ZywgdmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3Ig
bW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAg
ICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAq
L1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcltdKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhl
IHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5
TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9u
IHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQu
IFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFu
ZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlO
YW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVy
dGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1
ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJy
ZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBp
biB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBj
c3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51
bWJlcikgPT4gbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9y
ZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IG9mIHByb3BlcnR5LXZhbHVlIHBh
aXJzIHRvIHNldC5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydGllczogT2JqZWN0KTogSlF1ZXJ5
O1xuXG4gICAgaGVpZ2h0KCk6IG51bWJlcjtcbiAgICBoZWlnaHQodmFsdWU6IG51bWJlcik6IEpR
dWVyeTtcbiAgICBoZWlnaHQodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoZWlnaHQoZnVu
YzogKGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBpbm5l
ckhlaWdodCgpOiBudW1iZXI7XG4gICAgaW5uZXJIZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVy
eTtcblxuICAgIGlubmVyV2lkdGgoKTogbnVtYmVyO1xuICAgIGlubmVyV2lkdGgodmFsdWU6IG51
bWJlcik6IEpRdWVyeTtcblxuICAgIG9mZnNldCgpOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1i
ZXI7IH07XG4gICAgb2Zmc2V0KGNvb3JkaW5hdGVzOiBhbnkpOiBKUXVlcnk7XG4gICAgb2Zmc2V0
KGZ1bmM6IChpbmRleDogYW55LCBjb29yZHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
b3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJI
ZWlnaHQodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5c
biAgICBvdXRlcldpZHRoKGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91
dGVyV2lkdGgodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7
XG5cbiAgICBwb3NpdGlvbigpOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IH07XG5cbiAg
ICBzY3JvbGxMZWZ0KCk6IG51bWJlcjtcbiAgICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpOiBK
UXVlcnk7XG5cbiAgICBzY3JvbGxUb3AoKTogbnVtYmVyO1xuICAgIHNjcm9sbFRvcCh2YWx1ZTog
bnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgd2lkdGgoKTogbnVtYmVyO1xuICAgIHdpZHRoKHZhbHVl
OiBudW1iZXIpOiBKUXVlcnk7XG4gICAgd2lkdGgodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICB3aWR0aChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8vIERhdGFcbiAgICBjbGVhclF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIGRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgZGF0
YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgIGRhdGEoa2V5Pzog
c3RyaW5nKTogYW55O1xuXG4gICAgZGVxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICByZW1vdmVEYXRhKG5hbWVPckxpc3Q/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBE
ZWZlcnJlZFxuICAgIHByb21pc2UodHlwZT86IGFueSwgdGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJv
bWlzZTxhbnk+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55
LCBkdXJhdGlvbj86IGFueSwgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmlt
YXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY29t
cGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwg
b3B0aW9uczogeyBkdXJhdGlvbj86IGFueTsgZWFzaW5nPzogc3RyaW5nOyBjb21wbGV0ZT86IEZ1
bmN0aW9uOyBzdGVwPzogRnVuY3Rpb247IHF1ZXVlPzogYm9vbGVhbjsgc3BlY2lhbEVhc2luZz86
IGFueTsgfSk6IEpRdWVyeTtcblxuICAgIGRlbGF5KGR1cmF0aW9uOiBudW1iZXIsIHF1ZXVlTmFt
ZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZU91dChkdXJhdGlvbj86
IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFu
eSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVU
byhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGVhc2luZz86IHN0
cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9u
PzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAg
ZmluaXNoKCk6IEpRdWVyeTtcblxuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzog
YW55KTogSlF1ZXJ5O1xuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBjYWxs
YmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVEb3duKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZURvd24oZHVyYXRpb24/
OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBz
bGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAg
c2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcs
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc3RvcChjbGVhclF1ZXVlPzogYm9vbGVh
biwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBzdG9wKHF1ZXVlPzogYW55LCBj
bGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAg
IHRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9n
Z2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuICAgIHRvZ2dsZShzaG93T3JIaWRlOiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgLy8g
RXZlbnRzXG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhPzogYW55LCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YTogYW55LCBwcmV2ZW50QnViYmxl
OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIHByZXZlbnRC
dWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZCguLi5ldmVudHM6IGFueVtdKTogSlF1
ZXJ5O1xuXG4gICAgYmx1cihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmx1cihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNoYW5nZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgY2hhbmdlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoZXZlbnREYXRhPzogYW55LCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQu
XG4gICAgICovXG4gICAgY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNsaWNrKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2xpY2soZXZlbnREYXRhPzog
YW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJkYmxjbGlja1wiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZGJsY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBk
YmxjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNs
aWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2
ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImZvY3Vz
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGZvY3VzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
Zm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZv
Y3Vzb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
Zm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNv
dXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgdHdvIGhhbmRs
ZXJzIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3Vz
ZSBwb2ludGVyIGVudGVycyBhbmQgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVySW4gQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBv
aW50ZXIgZW50ZXJzIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyT3V0IEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGxlYXZlcyB0aGUgZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW46IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSwgaGFuZGxlck91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBzaW5nbGUgaGFu
ZGxlciB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91
c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVySW5PdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNl
IHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3Zl
cihoYW5kbGVySW5PdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5ZG93blwiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5ZG93bigpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleWRvd25cIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5
ZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBr
ZXlkb3duXCJcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93
bihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
ImtleXByZXNzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcygp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIGtleXByZXNzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAga2V5cHJlc3MoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50
T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXl1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAga2V5dXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChl
dmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNj
cmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZCho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vkb3duXCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2Ny
aXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRv
d24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
Im1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93
bihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlZW50ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNl
ZW50ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50
ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoZXZlbnREYXRhOiBP
YmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWxlYXZl
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hl
biB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlbGVhdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vtb3ZlXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0
IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1v
dXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
Im1vdXNlb3V0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW91dCgp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
Im1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgbW91c2VvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgbW91c2VvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW92ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAg
ICAqL1xuICAgIG1vdXNlb3ZlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2
YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2V1cFwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2V1cCgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3Vz
ZXVwKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZl
bnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBvZmYoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBP
bmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVz
cGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5t
eVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5v
bigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyks
IG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0
cmluZywgc2VsZWN0b3I/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2
ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVz
dCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9y
IFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9u
IHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFs
dWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnRzIEFuIG9iamVjdCB3aGVyZSB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3Jl
IHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5k
IHRoZSB2YWx1ZXMgcmVwcmVzZW50IGhhbmRsZXIgZnVuY3Rpb25zIHByZXZpb3VzbHkgYXR0YWNo
ZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3
aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVu
IGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiB7IFtr
ZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1v
cmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5c
Ii5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEg
c2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLiBS
ZXN0IHBhcmFtZXRlciBhcmdzIGlzIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBq
UXVlcnkudHJpZ2dlcigpLiBOb3RlIHRoYXQgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIG9uIHRoZSBl
dmVudCBoYW5kbGVyIGZ1bmN0aW9uIG11c3QgYmUgbWFya2VkIGFzIG9wdGlvbmFsICg/IHN5bnRh
eCkuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBv
ciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQg
b3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1
Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRl
ciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0
aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBp
cyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hv
cnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAg
ICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3Jl
IGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9u
YWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIu
XG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUg
ZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZl
bnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdh
eXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAg
KiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5k
YXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1
ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhh
dCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJp
bmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFj
aCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhl
IHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmpl
Y3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1z
ZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFs
dWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZl
bnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRl
ciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxs
IHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFu
ZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVu
dC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBp
biBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uKGV2ZW50
czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogYW55LCBkYXRhPzogYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBm
b3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVy
IGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEg
c3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3Vj
aCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVt
ZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBl
ciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250
YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlj
a1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0g
ZGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25l
KGV2ZW50czogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFj
aCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMg
ZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQg
dHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5
ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmlu
ZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0
IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0
aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVk
IGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dl
ZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBm
YWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUg
ZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVu
dCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1v
cmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBz
dWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0g
c2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0
aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVj
dG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hl
biBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERh
dGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28g
YWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJl
dHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBz
dHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0
byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBt
b3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9u
ZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNw
YWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBj
YWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3Rv
ciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVu
dHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9y
IG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRo
ZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2Vk
IHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAg
ICovXG4gICAgb25lKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzog
c3RyaW5nLCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5
IGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBET00gaXMgZnVsbHkgbG9hZGVkLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRo
ZSBET00gaXMgcmVhZHkuXG4gICAgICovXG4gICAgcmVhZHkoaGFuZGxlcjogRnVuY3Rpb24pOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInJlc2l6ZVwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgcmVzaXplKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzY3JvbGxcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNjcm9sbCgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
c2Nyb2xsKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwo
ZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2Vs
ZWN0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzZWxlY3QoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3Rc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHNlbGVjdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
c2VsZWN0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcInN1Ym1pdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3VibWl0KCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIHN1Ym1pdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBzdWJtaXQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlcihldmVudFR5cGU6
IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICB0cmlnZ2Vy
KGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXJIYW5kbGVy
KGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogT2JqZWN0O1xu
XG4gICAgdW5iaW5kKGV2ZW50VHlwZT86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZlbnRUeXBl
OiBzdHJpbmcsIGZsczogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZ0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICB1bmRlbGVnYXRlKCk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVj
dG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6
IGFueSwgZXZlbnRzOiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShuYW1lc3BhY2U6IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHVubG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5sb2FkKGV2ZW50RGF0YT86IGFu
eSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGNvbnRleHQ6IEVsZW1lbnQ7XG4gICAganF1
ZXJ5OiBzdHJpbmc7XG5cbiAgICBlcnJvcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZXJyb3IoZXZlbnREYXRhOiBhbnksIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgcHVzaFN0YWNr
KGVsZW1lbnRzOiBhbnlbXSwgbmFtZTogYW55LCBhcmd1bWVudHM6IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8vIE1hbmlwdWxhdGlvblxuICAgIGFmdGVyKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIGFmdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBh
cHBlbmQoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYXBwZW5kKGZ1bmM6IChpbmRl
eDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZFRvKHRhcmdl
dDogYW55KTogSlF1ZXJ5O1xuXG4gICAgYmVmb3JlKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIGJlZm9yZShmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
Y2xvbmUod2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuLCBkZWVwV2l0aERhdGFBbmRFdmVudHM/
OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgZGV0YWNoKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZW1wdHkoKTogSlF1ZXJ5O1xuXG4gICAgaW5zZXJ0QWZ0ZXIodGFyZ2V0OiBhbnkp
OiBKUXVlcnk7XG4gICAgaW5zZXJ0QmVmb3JlKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAg
cHJlcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwcmVwZW5kKGZ1bmM6IChp
bmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmRUbyh0
YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZShzZWxlY3Rvcj86IGFueSk6IEpRdWVy
eTtcblxuICAgIHJlcGxhY2VBbGwodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNl
V2l0aChmdW5jOiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0ZXh0KCk6IHN0cmluZztcbiAgICB0ZXh0
KHRleHRTdHJpbmc6IGFueSk6IEpRdWVyeTtcbiAgICB0ZXh0KHRleHRTdHJpbmc6IChpbmRleDog
bnVtYmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvQXJyYXko
KTogYW55W107XG5cbiAgICB1bndyYXAoKTogSlF1ZXJ5O1xuXG4gICAgd3JhcCh3cmFwcGluZ0Vs
ZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICB3cmFwQWxsKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xu
XG4gICAgd3JhcElubmVyKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXBJ
bm5lcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2Vs
bGFuZW91c1xuICAgIGVhY2goZnVuYzogKGluZGV4OiBhbnksIGVsZW06IEVsZW1lbnQpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIGdldChpbmRleD86IG51bWJlcik6IGFueTtcblxuICAgIGluZGV4
KCk6IG51bWJlcjtcbiAgICBpbmRleChzZWxlY3Rvcjogc3RyaW5nKTogbnVtYmVyO1xuICAgIGlu
ZGV4KGVsZW1lbnQ6IGFueSk6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBsZW5n
dGg6IG51bWJlcjtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAgIFt4OiBzdHJpbmddOiBhbnk7
XG4gICAgW3g6IG51bWJlcl06IEhUTUxFbGVtZW50O1xuXG4gICAgLy8gVHJhdmVyc2luZ1xuICAg
IGFkZChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIGFkZCgu
Li5lbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgYWRkKGh0bWw6IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBhZGQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBjaGlsZHJlbihzZWxlY3Rv
cj86IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBFbGVtZW50KTogSlF1
ZXJ5O1xuICAgIGNsb3Nlc3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChlbGVt
ZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3RvcnM6IGFueSwgY29udGV4dD86
IEVsZW1lbnQpOiBhbnlbXTtcblxuICAgIGNvbnRlbnRzKCk6IEpRdWVyeTtcblxuICAgIGVuZCgp
OiBKUXVlcnk7XG5cbiAgICBlcShpbmRleDogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgZmlsdGVy
KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGZ1bmM6IChpbmRleDogYW55
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAg
ICBmaWx0ZXIob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBmaW5kKHNlbGVjdG9yOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgZmluZChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmluZChv
Ymo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpcnN0KCk6IEpRdWVyeTtcblxuICAgIGhhcyhz
ZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhhcyhjb250YWluZWQ6IEVsZW1lbnQpOiBK
UXVlcnk7XG5cbiAgICBpcyhzZWxlY3Rvcjogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBpcyhmdW5j
OiAoaW5kZXg6IGFueSkgPT4gYW55KTogYm9vbGVhbjtcbiAgICBpcyhlbGVtZW50OiBhbnkpOiBi
b29sZWFuO1xuICAgIGlzKG9iajogSlF1ZXJ5KTogYm9vbGVhbjtcblxuICAgIGxhc3QoKTogSlF1
ZXJ5O1xuXG4gICAgbWFwKGNhbGxiYWNrOiAoaW5kZXg6IGFueSwgZG9tRWxlbWVudDogRWxlbWVu
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbmV4dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIG5leHRBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0
VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBu
ZXh0VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBuZXh0VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICBub3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBub3QoZnVuYzogKGluZGV4OiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBub3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAg
IG5vdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIG9mZnNldFBhcmVudCgpOiBKUXVlcnk7
XG5cbiAgICBwYXJlbnQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRz
KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50c1VudGlsKHNlbGVjdG9y
Pzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKGVs
ZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1Vu
dGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldihz
ZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZBbGwoc2VsZWN0b3I/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRl
cj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzaWJsaW5ncyhzZWxlY3Rvcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcik6IEpRdWVyeTtc
blxuICAgIC8vIFV0aWxpdGllc1xuXG4gICAgcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogYW55
W107XG4gICAgcXVldWUocXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55
KTogSlF1ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xu
fVxuZGVjbGFyZSBtb2R1bGUgXCJqcXVlcnlcIiB7XG4gICAgZXhwb3J0ID0gJDtcbn1cbmRlY2xh
cmUgdmFyIGpRdWVyeTogSlF1ZXJ5U3RhdGljO1xuZGVjbGFyZSB2YXIgJDogSlF1ZXJ5U3RhdGlj
O1xuLy8gbGlicy9hbmd1bGFyL2FuZ3VsYXIuZC50c1xuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3Ig
QW5ndWxhciBKUyAxLjBcbi8vIFByb2plY3Q6IGh0dHA6Ly9hbmd1bGFyanMub3JnXG4vLyBEZWZp
bml0aW9ucyBieTogRGllZ28gVmlsYXIgPGh0dHA6Ly9naXRodWIuY29tL2RpZWdvdmlsYXI+XG4v
LyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlU
eXBlZFxuXG5cblxuZGVjbGFyZSB2YXIgYW5ndWxhcjogbmcuSUFuZ3VsYXJTdGF0aWM7XG5cbi8v
IFN1cHBvcnQgZm9yIHBhaW5sZXNzIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG5pbnRlcmZhY2UgRnVu
Y3Rpb24ge1xuICAgICRpbmplY3Q6c3RyaW5nW107XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbi8vIG5nIG1vZHVsZSAoYW5ndWxhci5qcylcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmRl
Y2xhcmUgbW9kdWxlIG5nIHtcblxuICAgIC8vIEFsbCBzZXJ2aWNlIHByb3ZpZGVycyBleHRlbmQg
dGhpcyBpbnRlcmZhY2VcbiAgICBpbnRlcmZhY2UgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
ICRnZXQ6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmd1
bGFyU3RhdGljXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyU3RhdGljIHtcbiAgICAg
ICAgYmluZChjb250ZXh0OiBhbnksIGZuOiBGdW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBGdW5j
dGlvbjtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IHN0cmluZywgbW9kdWxlcz86IGFueVtd
KTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogSlF1
ZXJ5LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJv
b3RzdHJhcChlbGVtZW50OiBFbGVtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3Rv
clNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBEb2N1bWVudCwgbW9kdWxlcz86
IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBjb3B5KHNvdXJjZTogYW55
LCBkZXN0aW5hdGlvbj86IGFueSk6IGFueTtcbiAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpR
dWVyeVN0YXRpYztcbiAgICAgICAgZXF1YWxzKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSk6IGJv
b2xlYW47XG4gICAgICAgIGV4dGVuZChkZXN0aW5hdGlvbjogYW55LCAuLi5zb3VyY2VzOiBhbnlb
XSk6IGFueTtcbiAgICAgICAgZm9yRWFjaChvYmo6IGFueSwgaXRlcmF0b3I6ICh2YWx1ZTogYW55
LCBrZXk6IGFueSkgPT4gYW55LCBjb250ZXh0PzogYW55KTogYW55O1xuICAgICAgICBmcm9tSnNv
bihqc29uOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlkZW50aXR5KGFyZz86IGFueSk6IGFueTtc
biAgICAgICAgaW5qZWN0b3IobW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNl
O1xuICAgICAgICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0RhdGUo
dmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9v
bGVhbjtcbiAgICAgICAgaXNFbGVtZW50KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBp
c0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc051bWJlcih2YWx1ZTog
YW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1VuZGVmaW5l
ZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgbG93ZXJjYXNlKHN0cjogc3RyaW5nKTog
c3RyaW5nO1xuICAgICAgICAvKiogY29uc3RydWN0IHlvdXIgYW5ndWxhciBhcHBsaWNhdGlvblxu
XHRcdG9mZmljaWFsIGRvY3M6IEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciBtb2R1
bGVzLlxuXHRcdHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1
bGVcblx0XHQqL1xuICAgICAgICBtb2R1bGUoXG4gICAgICAgICAgICAvKiogbmFtZSBvZiB5b3Vy
IG1vZHVsZSB5b3Ugd2FudCB0byBjcmVhdGUgKi9cbiAgICAgICAgICAgIG5hbWU6IHN0cmluZyxc
biAgICAgICAgICAgIC8qKiBuYW1lIG9mIG1vZHVsZXMgeW91cnMgZGVwZW5kcyBvbiAqL1xuICAg
ICAgICAgICAgcmVxdWlyZXM/OiBzdHJpbmdbXSxcbiAgICAgICAgICAgIGNvbmZpZ0Z1bmN0aW9u
PzogYW55KTogSU1vZHVsZTtcbiAgICAgICAgbm9vcCguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4g
ICAgICAgIHRvSnNvbihvYmo6IGFueSwgcHJldHR5PzogYm9vbGVhbik6IHN0cmluZztcbiAgICAg
ICAgdXBwZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICB2ZXJzaW9uOiB7XG4g
ICAgICAgICAgICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAgICBtYWpvcjogbnVtYmVyO1xuICAg
ICAgICAgICAgbWlub3I6IG51bWJlcjtcbiAgICAgICAgICAgIGRvdDogbnVtYmVyO1xuICAgICAg
ICAgICAgY29kZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBNb2R1bGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSU1vZHVsZSB7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGFuaW1h
dGlvbkZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6
IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAg
ICAgYW5pbWF0aW9uKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZp
Z3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIg
d29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQg
Ki9cbiAgICAgICAgY29uZmlnKGNvbmZpZ0ZuOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAg
IC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRv
IHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2Fk
aW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55
W10pOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4g
ICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1
bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGlubGlu
ZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xs
ZXIob2JqZWN0IDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0
cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBkaXJl
Y3RpdmUobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9k
dWxlO1xuICAgICAgICBkaXJlY3RpdmUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAg
ICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24p
OiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVk
RnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShvYmplY3Q6IE9iamVj
dCk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3RvcnlG
dW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5n
LCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0
ZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJp
bmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAg
ICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFu
eVtdKTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxl
O1xuICAgICAgICBydW4oaW5pdGlhbGl6YXRpb25GdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxl
O1xuICAgICAgICBydW4oaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtc
biAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIHNlcnZpY2VDb25zdHJ1Y3RvcjogRnVuY3Rp
b24pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3Rh
ZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShvYmplY3Q6
IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFu
eSk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcblxu
ICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcmVx
dWlyZXM6IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IEF0dHJpYnV0ZXNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXNcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUF0dHJpYnV0ZXMge1xuXHQvLyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBiZSBh
YmxlIHRvIGFjY2VzcyB0aGUgc2NvcGVkIGF0dHJpYnV0ZXMuIGl0J3Mgbm90IHZlcnkgZWxlZ2Fu
dFxuXHQvLyBiZWNhdXNlIHlvdSBoYXZlIHRvIHVzZSBhdHRyc1snZm9vJ10gaW5zdGVhZCBvZiBh
dHRycy5mb28gYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGJldHRlciB3YXlcblx0Ly8gdGhpcyBzaG91
bGQgcmVhbGx5IGJlIGxpbWl0ZWQgdG8gcmV0dXJuIHN0cmluZyBidXQgaXQgY3JlYXRlcyB0aGlz
IHByb2JsZW06IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE3MjAxODU0LzE2NTY1NlxuXHRb
bmFtZTogc3RyaW5nXTogYW55O1xuXG4gICAgICAgIC8vIEFkZHMgdGhlIENTUyBjbGFzcyB2YWx1
ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciB0byB0aGVcbiAgICAgICAgLy8g
ZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxs
IGJlIHRyaWdnZXJlZFxuICAgICAgICAvLyBmb3IgdGhlIGNsYXNzIGFkZGl0aW9uLlxuICAgICAg
ICAkYWRkQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gUmVtb3Zl
cyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVy
IGZyb20gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQg
dGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgZm9yXG4gICAgICAgIC8vIHRoZSBj
bGFzcyByZW1vdmFsLlxuICAgICAgICAkcmVtb3ZlQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZv
aWQ7XG5cbiAgICAgICAgLy8gU2V0IERPTSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAg
ICAgJHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gT2Jz
ZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAgICAgICAgLy8gVGhlIG9ic2VydmVy
IGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGR1cmluZyB0aGUgbmV4dCAkZGlnZXN0XG4g
ICAgICAgIC8vIGZvbGxvd2luZyBjb21waWxhdGlvbi4gVGhlIG9ic2VydmVyIGlzIHRoZW4gaW52
b2tlZCB3aGVuZXZlciB0aGVcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVkIHZhbHVlIGNoYW5nZXMu
XG4gICAgICAgICRvYnNlcnZlKG5hbWU6IHN0cmluZywgZm46KHZhbHVlPzphbnkpPT5hbnkpOiBG
dW5jdGlvbjtcblxuICAgICAgICAvLyBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFt
ZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpcyBuZWVkZWRcbiAgICAgICAgLy8gdG8g
ZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFt
ZS5cbiAgICAgICAgJGF0dHI6IE9iamVjdDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBGb3JtQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy5kaXJlY3RpdmU6Zm9ybS5Gb3JtQ29udHJvbGxlclxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRm9ybUNvbnRyb2xsZXIge1xuICAgICAgICAkcHJp
c3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlk
OiBib29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGVycm9yOiBh
bnk7XG4gICAgICAgICRhZGRDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6
IHZvaWQ7XG4gICAgICAgICRyZW1vdmVDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJv
bGxlcik6IHZvaWQ7XG4gICAgICAgICRzZXREaXJ0eSgpOiB2b2lkO1xuICAgICAgICAkc2V0UHJp
c3RpbmUoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBO
Z01vZGVsQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJTmdNb2RlbENvbnRyb2xsZXIge1xuICAgICAgICAkcmVu
ZGVyKCk6IHZvaWQ7XG4gICAgICAgICRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXk6IHN0
cmluZywgaXNWYWxpZDogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24g
c3RhdGVzIHZpZXdWYWx1ZSBhbmQgbW9kZWxWYWx1ZSB0byBiZSBhIHN0cmluZyBidXQgb3RoZXJc
biAgICAgICAgLy8gdHlwZXMgZG8gd29yayBhbmQgaXQncyBjb21tb24gdG8gdXNlIHRoZW0uXG4g
ICAgICAgICRzZXRWaWV3VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgICAgICR2aWV3VmFs
dWU6IGFueTtcblxuICAgICAgICAkbW9kZWxWYWx1ZTogYW55O1xuXG4gICAgICAgICRwYXJzZXJz
OiBJTW9kZWxQYXJzZXJbXTtcbiAgICAgICAgJGZvcm1hdHRlcnM6IElNb2RlbEZvcm1hdHRlcltd
O1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAg
ICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAg
JGludmFsaWQ6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbFBhcnNlciB7
XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9k
ZWxGb3JtYXR0ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTY29wZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlLlNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElTY29wZSB7XG4gICAgICAgICRhcHBseSgpOiBhbnk7XG4gICAg
ICAgICRhcHBseShleHA6IHN0cmluZyk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogKHNjb3Bl
OiBJU2NvcGUpID0+IGFueSk6IGFueTtcblxuICAgICAgICAkYnJvYWRjYXN0KG5hbWU6IHN0cmlu
ZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuICAgICAgICAkZGVzdHJveSgpOiB2
b2lkO1xuICAgICAgICAkZGlnZXN0KCk6IHZvaWQ7XG4gICAgICAgICRlbWl0KG5hbWU6IHN0cmlu
ZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuXG4gICAgICAgIC8vIERvY3VtZW50
YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3Vu
dHMgb24gaXRcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogc3RyaW5nLCBhcmdzPzogT2JqZWN0
KTogYW55O1xuICAgICAgICAkZXZhbChleHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55
LCBhcmdzPzogT2JqZWN0KTogYW55O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBl
eHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAg
ICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICAkZXZh
bEFzeW5jKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAg
ICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGVja2luZyBz
dHJhdGVneVxuICAgICAgICAkbmV3KGlzb2xhdGU/OiBib29sZWFuKTogSVNjb3BlO1xuXG4gICAg
ICAgICRvbihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IElBbmd1bGFyRXZlbnQsIC4u
LmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2god2F0Y2hF
eHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJv
b2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5n
LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3Bl
KSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAk
d2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86
IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3
YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzog
KG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2Jq
ZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoQ29sbGVj
dGlvbih3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBv
bGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcbiAgICAgICAg
JHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnks
IGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkg
PT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHBhcmVudDogSVNjb3BlO1xuXG4gICAgICAg
ICRpZDogbnVtYmVyO1xuXG4gICAgICAgIC8vIEhpZGRlbiBtZW1iZXJzXG4gICAgICAgICQkaXNv
bGF0ZUJpbmRpbmdzOiBhbnk7XG4gICAgICAgICQkcGhhc2U6IGFueTtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUFuZ3VsYXJFdmVudCB7XG4gICAgICAgIHRhcmdldFNjb3BlOiBJU2NvcGU7XG4g
ICAgICAgIGN1cnJlbnRTY29wZTogSVNjb3BlO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAg
ICAgIHByZXZlbnREZWZhdWx0OiBGdW5jdGlvbjtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDog
Ym9vbGVhbjtcblxuICAgICAgICAvLyBBdmFpbGFibGUgb25seSBldmVudHMgdGhhdCB3ZXJlICRl
bWl0LXRlZFxuICAgICAgICBzdG9wUHJvcGFnYXRpb24/OiBGdW5jdGlvbjtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBXaW5kb3dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR3aW5kb3dcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSVdpbmRvd1NlcnZpY2UgZXh0ZW5kcyBXaW5kb3cge31cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEJyb3dzZXJTZXJ2aWNlXG4gICAgLy8gVE9E
TyB1bmRvY3VtZW50ZWQsIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIHNvdXJjZSBjb2Rl
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElCcm93c2VyU2VydmljZSB7
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGltZW91dFNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRpbWVvdXRcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRpbWVvdXRTZXJ2aWNlIHtcbiAgICAgICAg
KGZ1bmM6IEZ1bmN0aW9uLCBkZWxheT86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTog
SVByb21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBi
b29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVydmFs
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50
ZXJ2YWxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVydmFsU2Vy
dmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlciwgY291bnQ/OiBu
dW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNh
bmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaWx0ZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJTZXJ2aWNlIHtcbiAgICAgICAgKG5hbWU6IHN0cmlu
Zyk6IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRmlsdGVyUHJvdmlkZXIgZXh0
ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBm
aWx0ZXJGYWN0b3J5OiBGdW5jdGlvbik6IElTZXJ2aWNlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYWxlXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElMb2NhbGVTZXJ2aWNlIHtcbiAgICAgICAgaWQ6IHN0cmluZztc
blxuICAgICAgICAvLyBUaGVzZSBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgLy8gQ2hlY2sg
YW5ndWxhcidzIGkxOG4gZmlsZXMgZm9yIGV4ZW1wbGVzXG4gICAgICAgIE5VTUJFUl9GT1JNQVRT
OiBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgREFURVRJTUVfRk9STUFU
UzogSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgcGx1cmFsQ2F0OiAo
bnVtOiBhbnkpID0+IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJl
ckZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBERUNJTUFMX1NFUDogc3RyaW5nO1xuICAgICAg
ICBHUk9VUF9TRVA6IHN0cmluZztcbiAgICAgICAgUEFUVEVSTlM6IElMb2NhbGVOdW1iZXJQYXR0
ZXJuRGVzY3JpcHRvcltdO1xuICAgICAgICBDVVJSRU5DWV9TWU06IHN0cmluZztcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yIHtcbiAgICAgICAg
bWluSW50OiBudW1iZXI7XG4gICAgICAgIG1pbkZyYWM6IG51bWJlcjtcbiAgICAgICAgbWF4RnJh
YzogbnVtYmVyO1xuICAgICAgICBwb3NQcmU6IHN0cmluZztcbiAgICAgICAgcG9zU3VmOiBzdHJp
bmc7XG4gICAgICAgIG5lZ1ByZTogc3RyaW5nO1xuICAgICAgICBuZWdTdWY6IHN0cmluZztcbiAg
ICAgICAgZ1NpemU6IG51bWJlcjtcbiAgICAgICAgbGdTaXplOiBudW1iZXI7XG4gICAgfVxuXG4g
ICAgaW50ZXJmYWNlIElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBN
T05USDogc3RyaW5nW107XG4gICAgICAgIFNIT1JUTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBE
QVk6IHN0cmluZ1tdO1xuICAgICAgICBTSE9SVERBWTogc3RyaW5nW107XG4gICAgICAgIEFNUE1T
OiBzdHJpbmdbXTtcbiAgICAgICAgbWVkaXVtOiBzdHJpbmc7XG4gICAgICAgIHNob3J0OiBzdHJp
bmc7XG4gICAgICAgIGZ1bGxEYXRlOiBzdHJpbmc7XG4gICAgICAgIGxvbmdEYXRlOiBzdHJpbmc7
XG4gICAgICAgIG1lZGl1bURhdGU6IHN0cmluZztcbiAgICAgICAgc2hvcnREYXRlOiBzdHJpbmc7
XG4gICAgICAgIG1lZGl1bVRpbWU6IHN0cmluZztcbiAgICAgICAgc2hvcnRUaW1lOiBzdHJpbmc7
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9nU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9nXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2dTZXJ2aWNlIHtcbiAgICAgICAgZGVidWc6
IElMb2dDYWxsO1xuICAgICAgICBlcnJvcjogSUxvZ0NhbGw7XG4gICAgICAgIGluZm86IElMb2dD
YWxsO1xuICAgICAgICBsb2c6IElMb2dDYWxsO1xuICAgICAgICB3YXJuOiBJTG9nQ2FsbDtcbiAg
ICB9XG5cbiAgICAvLyBXZSBkZWZpbmUgdGhpcyBhcyBzZXBhcmV0ZSBpbnRlcmZhY2Ugc28gd2Ug
Y2FuIHJlb3BlbiBpdCBsYXRlciBmb3JcbiAgICAvLyB0aGUgbmdNb2NrIG1vZHVsZS5cbiAgICBp
bnRlcmZhY2UgSUxvZ0NhbGwge1xuICAgICAgICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFBhcnNlU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcGFyc2VcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVBhcnNlU2VydmljZSB7XG4gICAgICAgIChleHBy
ZXNzaW9uOiBzdHJpbmcpOiBJQ29tcGlsZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJQ29tcGlsZWRFeHByZXNzaW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSwgbG9jYWxz
PzogYW55KTogYW55O1xuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdW5k
ZWZpbmVkIGlzIGdvbm5hIGJlIHVzZWQgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uXG4gICAgICAg
IC8vIGRvZXMgbm90IGNoZWNrIHRoZSBwYXJhbWV0ZXIuIExldCdzIGZvcmNlIGEgdmFsdWUgZm9y
IGNvbnNpc3RlbmN5LiBJZiBjb25zdW1lclxuICAgICAgICAvLyB3aGFudHMgdG8gdW5kZWZpbmUg
aXQsIHBhc3MgdGhlIHVuZGVmaW5lZCB2YWx1ZSBleHBsaWNpdGx5LlxuICAgICAgICBhc3NpZ24o
Y29udGV4dDogYW55LCB2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIExvY2F0aW9uU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9uUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kZXZfZ3VpZGUuc2VydmljZXMuJGxvY2F0aW9uXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblNlcnZpY2Uge1xuICAg
ICAgICBhYnNVcmwoKTogc3RyaW5nO1xuICAgICAgICBoYXNoKCk6IHN0cmluZztcbiAgICAgICAg
aGFzaChuZXdIYXNoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBob3N0KCk6
IHN0cmluZztcbiAgICAgICAgcGF0aCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgobmV3UGF0aDog
c3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgcG9ydCgpOiBudW1iZXI7XG4gICAg
ICAgIHByb3RvY29sKCk6IHN0cmluZztcbiAgICAgICAgcmVwbGFjZSgpOiBJTG9jYXRpb25TZXJ2
aWNlO1xuICAgICAgICBzZWFyY2goKTogYW55O1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyc01h
cDogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcjogc3Ry
aW5nLCBwYXJhbWV0ZXJWYWx1ZTogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgdXJs
KCk6IHN0cmluZztcbiAgICAgICAgdXJsKHVybDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uUHJvdmlkZXIgZXh0ZW5kcyBJU2Vydmlj
ZVByb3ZpZGVyIHtcbiAgICAgICAgaGFzaFByZWZpeCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2hQ
cmVmaXgocHJlZml4OiBzdHJpbmcpOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICAgICAgaHRtbDVN
b2RlKCk6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBw
YXJhbWV0ZXIgaXMgc3RyaW5nLCBidXRcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gdGVzdHMg
aXQgYXMgYm9vbGVhbiwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZVxuICAgICAgICAvLyBzaW5jZSB0
aGlzIGlzIGEgdG9nZ2xlclxuICAgICAgICBodG1sNU1vZGUoYWN0aXZlOiBib29sZWFuKTogSUxv
Y2F0aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
RG9jdW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRkb2N1bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRG9j
dW1lbnRTZXJ2aWNlIGV4dGVuZHMgRG9jdW1lbnQge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRleGNlcHRpb25IYW5kbGVyXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElFeGNlcHRpb25IYW5kbGVyU2VydmljZSB7XG4gICAgICAg
IChleGNlcHRpb246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdEVsZW1lbnRTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290RWxlbWVudFxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdEVsZW1lbnRTZXJ2aWNlIGV4dGVuZHMg
SlF1ZXJ5IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBRU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUVNlcnZpY2Uge1xuICAgICAgICBhbGwocHJvbWlz
ZXM6IElQcm9taXNlPGFueT5bXSk6IElQcm9taXNlPGFueVtdPjtcbiAgICAgICAgZGVmZXI8VD4o
KTogSURlZmVycmVkPFQ+O1xuICAgICAgICByZWplY3QocmVhc29uPzogYW55KTogSVByb21pc2U8
dm9pZD47XG4gICAgICAgIHdoZW48VD4odmFsdWU6IFQpOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSVByb21pc2U8VD4ge1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nl
c3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+LCBl
cnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0
YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1
bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSVByb21pc2U8VFJlc3Vs
dD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/
OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48
VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBUUmVzdWx0LCBl
cnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0LCBub3RpZnlDYWxsYmFjaz86
IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuXG4gICAgICAgIGNh
dGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSUh0dHBQcm9taXNlPFRS
ZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVq
ZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSVByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVz
dWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9
PiBUUmVzdWx0KTogSVByb21pc2U8VFJlc3VsdD47XG5cbiAgICAgICAgZmluYWxseTxUUmVzdWx0
PihmaW5hbGx5Q2FsbGJhY2s6ICgpPT5hbnkpOklQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJRGVmZXJyZWQ8VD4ge1xuICAgICAgICByZXNvbHZlKHZhbHVlPzogVCk6
IHZvaWQ7XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiB2b2lkO1xuICAgICAgICBub3Rp
Znkoc3RhdGU/OmFueSk6IHZvaWQ7XG4gICAgICAgIHByb21pc2U6IElQcm9taXNlPFQ+O1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuY2hvclNjcm9sbFNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGFuY2hvclNjcm9s
bFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsU2Vy
dmljZSB7XG4gICAgICAgICgpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5jaG9y
U2Nyb2xsUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlzYWJs
ZUF1dG9TY3JvbGxpbmcoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBDYWNoZUZhY3RvcnlTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRjYWNoZUZhY3RvcnlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUNhY2hlRmFjdG9yeVNlcnZpY2Uge1xuICAgICAgICAvLyBMZXRzIG5vdCBm
b2NlIHRoZSBvcHRpb25zTWFwIHRvIGhhdmUgdGhlIGNhcGFjaXR5IG1lbWJlci4gRXZlbiB0aG91
Z2hcbiAgICAgICAgLy8gaXQncyB0aGUgT05MWSBvcHRpb24gY29uc2lkZXJlZCBieSB0aGUgaW1w
bGVtZW50YXRpb24gdG9kYXksIGEgY29uc3VtZXJcbiAgICAgICAgLy8gbWlnaHQgZmluZCBpdCB1
c2VmdWwgdG8gYXNzb2NpYXRlIHNvbWUgb3RoZXIgb3B0aW9ucyB0byB0aGUgY2FjaGUgb2JqZWN0
LlxuICAgICAgICAvLyhjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBu
dW1iZXI7IH0pOiBDYWNoZU9iamVjdDtcbiAgICAgICAgKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9u
c01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IElDYWNoZU9iamVjdDtcblxuICAgICAgICAv
LyBNZXRob2RzIGJlbGxvdyBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgaW5mbygpOiBhbnk7
XG4gICAgICAgIGdldCAoY2FjaGVJZDogc3RyaW5nKTogSUNhY2hlT2JqZWN0O1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJQ2FjaGVPYmplY3Qge1xuICAgICAgICBpbmZvKCk6IHtcbiAgICAgICAg
ICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBzaXplOiBudW1iZXI7XG5cbiAgICAgICAgICAg
IC8vIE5vdCBnYXJhbnRlZWQgdG8gaGF2ZSwgc2luY2UgaXQncyBhIG5vbi1tYW5kYXRvcnkgb3B0
aW9uXG4gICAgICAgICAgICAvL2NhcGFjaXR5OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICAg
IHB1dChrZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lkO1xuICAgICAgICBnZXQgKGtleTog
c3RyaW5nKTogYW55O1xuICAgICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgICAg
ICByZW1vdmVBbGwoKTogdm9pZDtcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbXBpbGVTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXJcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVTZXJ2aWNlIHtcbiAgICAgICAg
KGVsZW1lbnQ6IHN0cmluZywgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwg
bWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAg
IChlbGVtZW50OiBFbGVtZW50LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9u
LCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAg
ICAgKGVsZW1lbnQ6IEpRdWVyeSwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlv
biwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTog
RnVuY3Rpb24pOiBJQ29tcGlsZVByb3ZpZGVyO1xuXG4gICAgICAgIC8vIFVuZG9jdW1lbnRlZCwg
YnV0IGl0IGlzIHRoZXJlLi4uXG4gICAgICAgIGRpcmVjdGl2ZShkaXJlY3RpdmVzTWFwOiBhbnkp
OiBJQ29tcGlsZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJVGVtcGxhdGVMaW5r
aW5nRnVuY3Rpb24ge1xuICAgICAgICAvLyBMZXQncyBoaW50IGJ1dCBub3QgZm9yY2UgY2xvbmVB
dHRhY2hGbidzIHNpZ25hdHVyZVxuICAgICAgICAoc2NvcGU6IElTY29wZSwgY2xvbmVBdHRhY2hG
bj86IChjbG9uZWRFbGVtZW50PzogSlF1ZXJ5LCBzY29wZT86IElTY29wZSkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnRyb2xsZXJT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250
cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250
cm9sbGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNv
bnRyb2xsZXJTZXJ2aWNlIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24g
ZG9lc24ndCBzdGF0ZSB0aGlzLCBsb2NhbHMgYXJlIG9wdGlvbmFsXG4gICAgICAgIChjb250cm9s
bGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIChj
b250cm9sbGVyTmFtZTogc3RyaW5nLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElDb250cm9sbGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtc
biAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1
bmN0aW9uKTogdm9pZDtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBkZXBlbmRlbmN5
QW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBIdHRwU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGlu
dGVyZmFjZSBJSHR0cFNlcnZpY2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBtb2V0aG9kIGFuZCB1
cmwgbXVzdCBiZSBwcm92aWRlZC4uLlxuICAgICAgICAoY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6
IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBnZXQgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29u
ZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlbGV0ZSAodXJsOiBzdHJp
bmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgaGVh
ZCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xu
ICAgICAgICBqc29ucCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJv
bWlzZTxhbnk+O1xuICAgICAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RD
b25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcHV0KHVybDogc3RyaW5n
LCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAg
ICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuXG4gICAgICAgIC8vIEZvciBkZWJ1Z2dp
bmcsIEJVVCBpdCBpcyBkb2N1bWVudGVkIGFzIHB1YmxpYywgc28uLi5cbiAgICAgICAgcGVuZGlu
Z1JlcXVlc3RzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGhpbnRp
bmcuXG4gICAgLy8gU29tZSBvcGV0aW9ucyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGRlcGVuZGlu
ZyBvbiB0aGUgcmVxdWVzdC5cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGh0dHAjVXNhZ2UgZm9yIG9wdGlvbnMgZXhwbGFuYXRpb25zXG4gICAgaW50ZXJmYWNl
IElSZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgIHVybDog
c3RyaW5nO1xuICAgICAgICBwYXJhbXM/OiBhbnk7XG5cbiAgICAgICAgLy8gWFhYIGl0IGhhcyBp
dCdzIG93biBzdHJ1Y3R1cmUuLi4gIHBlcmhhcHMgd2Ugc2hvdWxkIGRlZmluZSBpdCBpbiB0aGUg
ZnV0dXJlXG4gICAgICAgIGhlYWRlcnM/OiBhbnk7XG5cbiAgICAgICAgY2FjaGU/OiBhbnk7XG4g
ICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgICAgICAgLy8gVGhlc2UgYWNj
ZXB0IG11bHRpcGxlIHR5cGVzLCBzbyBsZXQncyBkZWZpbmUgdGhlbSBhcyBhbnlcbiAgICAgICAg
ZGF0YT86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD86IGFueTtcbiAgICAgICAgdHJh
bnNmb3JtUmVzcG9uc2U/OiBhbnk7XG4gICAgICAgIHRpbWVvdXQ/OiBhbnk7IC8vIG51bWJlciB8
IHByb21pc2VcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4g
e1xuICAgICAgICAoZGF0YTogVCwgc3RhdHVzOiBudW1iZXIsIGhlYWRlcnM6IChoZWFkZXJOYW1l
OiBzdHJpbmcpID0+IHN0cmluZywgY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IHZvaWQ7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+IHtcbiAgICAgICAg
ZGF0YT86IFQ7XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICAgICAgaGVhZGVycz86ICho
ZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgICAgY29uZmlnPzogSVJlcXVlc3RD
b25maWc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZTxUPiBleHRlbmRzIElQ
cm9taXNlPFQ+IHtcbiAgICAgICAgc3VjY2VzcyhjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJh
Y2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIGVycm9yKGNhbGxiYWNrOiBJSHR0cFBy
b21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgdGhlbjxUUmVzdWx0
PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4p
ID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxi
YWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVz
dWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8
VD4pID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0
cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVy
IHtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuICAgICAgICBpbnRlcmNlcHRv
cnM6IGFueVtdO1xuICAgICAgICByZXNwb25zZUludGVyY2VwdG9yczogYW55W107XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cEJhY2tlbmRTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwQmFja2VuZFxuICAg
IC8vIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5Llxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cEJhY2tlbmRTZXJ2aWNl
IHtcbiAgICAgICAgLy8gWFhYIFBlcmhhcHMgZGVmaW5lIGNhbGxiYWNrIHNpZ25hdHVyZSBpbiB0
aGUgZnV0dXJlXG4gICAgICAgIChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHBvc3Q/OiBh
bnksIGNhbGxiYWNrPzogRnVuY3Rpb24sIGhlYWRlcnM/OiBhbnksIHRpbWVvdXQ/OiBudW1iZXIs
IHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIEludGVycG9sYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlUHJvdmlkZXJcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlU2VydmljZSB7XG4gICAg
ICAgICh0ZXh0OiBzdHJpbmcsIG11c3RIYXZlRXhwcmVzc2lvbj86IGJvb2xlYW4pOiBJSW50ZXJw
b2xhdGlvbkZ1bmN0aW9uO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBz
dGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0
aW9uRnVuY3Rpb24ge1xuICAgICAgICAoY29udGV4dDogYW55KTogc3RyaW5nO1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlk
ZXIge1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9s
KHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICAgICAgZW5kU3ltYm9s
KCk6IHN0cmluZztcbiAgICAgICAgZW5kU3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xh
dGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUZW1w
bGF0ZUNhY2hlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kdGVtcGxhdGVDYWNoZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJVGVtcGxhdGVDYWNoZVNlcnZpY2UgZXh0ZW5kcyBJQ2FjaGVPYmplY3Qge31cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJvb3RTY29wZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29wZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdFNjb3BlU2VydmljZSBleHRlbmRzIElTY29wZSB7
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG5cdGludGVyZmFjZSBJU0NFU2VydmljZSB7XG5cdFx0Z2V0VHJ1c3RlZCh0eXBlOiBz
dHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRDc3ModmFsdWU6
IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdl
dFRydXN0ZWRKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRSZXNvdXJjZVVybCh2
YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRVcmwodmFsdWU6IGFueSk6IGFueTtcblx0
XHRwYXJzZSh0eXBlOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnks
IGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0NzcyhleHByZXNzaW9uOiBzdHJpbmcp
OiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNIdG1sKGV4
cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5c
dFx0cGFyc2VBc0pzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2Fsczog
YW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Jlc291cmNlVXJsKGV4cHJlc3Npb246IHN0cmluZyk6
IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1VybChleHBy
ZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRc
dHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNIdG1s
KHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0pzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0
dHJ1c3RBc1Jlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1VybCh2YWx1
ZTogYW55KTogYW55O1xuXHRcdGlzRW5hYmxlZCgpOiBib29sZWFuO1xuXHR9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSVNDRVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7
XG4gICAgICAgIGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlU2VydmljZSB7XG4gICAgICAg
IGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcbiAgICAg
ICAgdHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgIHZhbHVl
T2YodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFNDRURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVBy
b3ZpZGVyIHtcbiAgICAgICAgcmVzb3VyY2VVcmxCbG9ja2xpc3QoYmxvY2tsaXN0OiBhbnlbXSk6
IHZvaWQ7XG4gICAgICAgIHJlc291cmNlVXJsQWxsb3dsaXN0KGFsbG93bGlzdDogYW55W10pOiB2
b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERpcmVjdGl2ZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3Zp
ZGVyI2RpcmVjdGl2ZVxuICAgIC8vIGFuZCBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRl
L2RpcmVjdGl2ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaW50ZXJmYWNlIElEaXJl
Y3RpdmV7XG4gICAgICAgIGNvbXBpbGU/OlxuICAgICAgICAgICAgKHRlbXBsYXRlRWxlbWVudDog
YW55LFxuICAgICAgICAgICAgdGVtcGxhdGVBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAg
ICAgICAgIHRyYW5zY2x1ZGU6IChzY29wZTogSVNjb3BlLCBjbG9uZUxpbmtpbmdGbjogRnVuY3Rp
b24pID0+IHZvaWRcbiAgICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICBjb250cm9sbGVyPzog
YW55O1xuICAgICAgICBjb250cm9sbGVyQXM/OiBzdHJpbmc7XG4gICAgICAgIGxpbms/OlxuICAg
ICAgICAgICAgKHNjb3BlOiBJU2NvcGUsXG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQ6IGFu
eSxcbiAgICAgICAgICAgIGluc3RhbmNlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAg
ICAgICBjb250cm9sbGVyOiBhbnlcbiAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgbmFt
ZT86IHN0cmluZztcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXI7XG4gICAgICAgIHJlcGxhY2U/
OiBib29sZWFuO1xuICAgICAgICByZXF1aXJlPzogYW55O1xuICAgICAgICByZXN0cmljdD86IHN0
cmluZztcbiAgICAgICAgc2NvcGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlPzogYW55O1xuICAg
ICAgICB0ZW1wbGF0ZVVybD86IGFueTtcbiAgICAgICAgdGVybWluYWw/OiBib29sZWFuO1xuICAg
ICAgICB0cmFuc2NsdWRlPzogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIGFuZ3VsYXIuZWxlbWVudFxuICAgIC8vIHdoZW4gY2FsbGluZyBhbmd1bGFyLmVsZW1l
bnQsIGFuZ3VsYXIgcmV0dXJucyBhIGpRdWVyeSBvYmplY3QsXG4gICAgLy8gYXVnbWVudGVkIHdp
dGggYWRkaXRpb25hbCBtZXRob2RzIGxpa2UgZS5nLiBzY29wZS5cbiAgICAvLyBzZWU6IGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVudFxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljIGV4dGVuZHMgSlF1
ZXJ5U3RhdGljIHtcbiAgICAgICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBJ
QXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCk6IElBdWdtZW50ZWRK
UXVlcnk7XG4gICAgICAgIChvYmplY3Q6IHt9KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAg
KGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9i
amVjdDogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9u
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGFycmF5OiBhbnlbXSk6IElBdWdtZW50ZWRK
UXVlcnk7XG4gICAgICAgICgpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJQXVnbWVudGVkSlF1ZXJ5IGV4dGVuZHMgSlF1ZXJ5IHtcbiAgICAgICAgLy8gVE9ETzog
ZXZlbnRzLCBob3cgdG8gZGVmaW5lP1xuICAgICAgICAvLyRkZXN0cm95XG5cbiAgICAgICAgZmlu
ZChzZWxlY3Rvcjogc3RyaW5nKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChlbGVt
ZW50OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKG9iajogSlF1ZXJ5KTog
SUF1Z21lbnRlZEpRdWVyeTtcblxuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZyk6IGFu
eTtcbiAgICAgICAgaW5qZWN0b3IoKTogYW55O1xuICAgICAgICBzY29wZSgpOiBJU2NvcGU7XG5c
biAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtc
biAgICAgICAgaW5oZXJpdGVkRGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1
ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuXG4gICAg
fVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBVVRPIG1vZHVsZSAoYW5ndWxh
ci5qcylcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBleHBvcnQgbW9kdWxlIGF1dG8ge1xu
XG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIEluamVjdG9yU2VydmljZVxuICAg
ICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kaW5qZWN0b3Jc
biAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElJbmplY3RvclNlcnZp
Y2Uge1xuICAgICAgICAgICAgYW5ub3RhdGUoZm46IEZ1bmN0aW9uKTogc3RyaW5nW107XG4gICAg
ICAgICAgICBhbm5vdGF0ZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBzdHJpbmdb
XTtcbiAgICAgICAgICAgIGdldCAobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICAgICAgaW5z
dGFudGlhdGUodHlwZUNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xu
ICAgICAgICAgICAgaW52b2tlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IGFueTtc
biAgICAgICAgICAgIGludm9rZShmdW5jOiBGdW5jdGlvbiwgY29udGV4dD86IGFueSwgbG9jYWxz
PzogYW55KTogYW55O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAg
ICAgLy8gUHJvdmlkZVNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL0FVVE8uJHByb3ZpZGVcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAg
aW50ZXJmYWNlIElQcm92aWRlU2VydmljZSB7XG4gICAgICAgICAgICAvLyBEb2N1bWVudGF0aW9u
IHNheXMgaXQgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBpbnN0YW5jZSwgYnV0IGFjdHVhbFxuICAg
ICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICAg
ICAgICAgICAgLy8gY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAg
ICAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAg
ICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9yOiBGdW5jdGlvbik6IHZv
aWQ7XG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3JJbmxpbmU6
IGFueVtdKTogdm9pZDtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNl
RmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAg
ICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtd
KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmlu
ZywgcHJvdmlkZXI6IG5nLklTZXJ2aWNlUHJvdmlkZXIpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xu
ICAgICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1
Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgc2Vydmlj
ZShuYW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlk
ZXI7XG4gICAgICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBuZy5JU2Vy
dmljZVByb3ZpZGVyO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4vLyBtb2RlbHMvVG9kb0l0ZW0u
dHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnQgY2xh
c3MgVG9kb0l0ZW0ge1xuICAgICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgIHB1YmxpYyB0
aXRsZTogc3RyaW5nLFxuICAgICAgICAgICAgcHVibGljIGNvbXBsZXRlZDogYm9vbGVhblxuICAg
ICAgICAgICAgKSB7IH1cbiAgICB9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU2NvcGUudHNcblxu
bW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1Njb3BlIGV4dGVuZHMgbmcu
SVNjb3BlIHtcblx0XHR0b2RvczogVG9kb0l0ZW1bXTtcblx0XHRuZXdUb2RvOiBzdHJpbmc7XG5c
dFx0ZWRpdGVkVG9kbzogVG9kb0l0ZW07XG5cdFx0b3JpZ2luYWxUb2RvOiBUb2RvSXRlbTtcblx0
XHRyZW1haW5pbmdDb3VudDogbnVtYmVyO1xuXHRcdGRvbmVDb3VudDogbnVtYmVyO1xuXHRcdGFs
bENoZWNrZWQ6IGJvb2xlYW47XG5cdFx0cmV2ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0c3RhdHVzRmls
dGVyOiB7IGNvbXBsZXRlZD86IGJvb2xlYW4gfTtcblx0XHRsb2NhdGlvbjogbmcuSUxvY2F0aW9u
U2VydmljZTtcblx0XHR2bTogVG9kb0N0cmw7XG5cdH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9T
dG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TdG9y
YWdlIHtcblx0XHRnZXQgKCk6IFRvZG9JdGVtW107XG5cdFx0cHV0KHRvZG9zOiBUb2RvSXRlbVtd
KTtcblx0fVxufS8vIGRpcmVjdGl2ZXMvVG9kb0ZvY3VzLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5c
dCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3Vz
IG9uIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lvbiBpdCBi
aW5kcyB0byBldmFsdWF0ZXMgdG8gdHJ1ZS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2Rv
Rm9jdXMoJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xuXHRc
dHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVy
eSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdCRzY29wZS4kd2F0Y2goYXR0cmlidXRl
cy50b2RvRm9jdXMsIG5ld3ZhbCA9PiB7XG5cdFx0XHRcdFx0aWYgKG5ld3ZhbCkge1xuXHRcdFx0
XHRcdFx0JHRpbWVvdXQoKCkgPT4gZWxlbWVudFswXS5mb2N1cygpLCAwLCBmYWxzZSk7XG5cdFx0
XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0dG9kb0ZvY3Vz
LiRpbmplY3QgPSBbJyR0aW1lb3V0J107XG5cbn0vLyBkaXJlY3RpdmVzL1RvZG9CbHVyLnRzXG5c
bm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogRGly
ZWN0aXZlIHRoYXQgZXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlz
IGFwcGxpZWQgdG8gbG9zZXMgZm9jdXMuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRv
ZG9CbHVyKCk6IG5nLklEaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAg
bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFu
eSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYmluZCgnYmx1cicsICgpID0+IHsgJHNj
b3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9CbHVyKTsgfSk7XG4gICAgICAgICAgICAgICAgJHNj
b3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdibHVyJyk7IH0pO1xu
ICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIGRpcmVjdGl2ZXMvVG9kb0Vz
Y2FwZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0Y29uc3QgRVND
QVBFX0tFWSA9IDI3O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBjYW5jZWxzIGVkaXRp
bmcgYSB0b2RvIGlmIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVzYyBrZXkuXG5cdCAqL1xuXHRleHBv
cnQgZnVuY3Rpb24gdG9kb0VzY2FwZSgpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xu
XHRcdFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0
ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LmJpbmQoJ2tleWRvd24nLCAoZXZlbnQpID0+
IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWSkge1xuXHRcdFx0
XHRcdFx0JHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9Fc2NhcGUpO1xuXHRcdFx0XHRcdH1c
blx0XHRcdFx0fSk7XG5cblx0XHRcdFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVs
ZW1lbnQudW5iaW5kKCdrZXlkb3duJyk7IH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn1cbi8v
IHNlcnZpY2VzL1RvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJp
Y3QnO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZXMgdGhhdCBwZXJzaXN0cyBhbmQgcmV0cmll
dmVzIFRPRE9zIGZyb20gbG9jYWxTdG9yYWdlLlxuICAgICAqL1xuICAgIGV4cG9ydCBjbGFzcyBU
b2RvU3RvcmFnZSBpbXBsZW1lbnRzIElUb2RvU3RvcmFnZSB7XG5cbiAgICAgICAgU1RPUkFHRV9J
RCA9ICd0b2Rvcy1hbmd1bGFyanMtdHlwZXNjcmlwdCc7XG5cbiAgICAgICAgZ2V0ICgpOiBUb2Rv
SXRlbVtdIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJ
dGVtKHRoaXMuU1RPUkFHRV9JRCkgfHwgJ1tdJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXQo
dG9kb3M6IFRvZG9JdGVtW10pIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRo
aXMuU1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3MpKTtcbiAgICAgICAgfVxuICAgIH1c
bn0vLyBjb250cm9sbGVycy9Ub2RvQ3RybC50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0
cmljdCc7XG5cblx0LyoqXG5cdCAqIFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBhcHAuIFRo
ZSBjb250cm9sbGVyOlxuXHQgKiAtIHJldHJpZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1vZGVsIHZp
YSB0aGUgdG9kb1N0b3JhZ2Ugc2VydmljZVxuXHQgKiAtIGV4cG9zZXMgdGhlIG1vZGVsIHRvIHRo
ZSB0ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxlcnNcblx0ICovXG5cdGV4cG9ydCBj
bGFzcyBUb2RvQ3RybCB7XG5cblx0XHRwcml2YXRlIHRvZG9zOiBUb2RvSXRlbVtdO1xuXG5cdFx0
Ly8gJGluamVjdCBhbm5vdGF0aW9uLlxuXHRcdC8vIEl0IHByb3ZpZGVzICRpbmplY3RvciB3aXRo
IGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyB0byBiZSBpbmplY3RlZCBpbnRvIGNvbnN0
cnVjdG9yXG5cdFx0Ly8gaXQgaXMgYmV0dGVyIHRvIGhhdmUgaXQgY2xvc2UgdG8gdGhlIGNvbnN0
cnVjdG9yLCBiZWNhdXNlIHRoZSBwYXJhbWV0ZXJzIG11c3QgbWF0Y2ggaW4gY291bnQgYW5kIHR5
cGUuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlcblx0XHRw
dWJsaWMgc3RhdGljICRpbmplY3QgPSBbXG5cdFx0XHQnJHNjb3BlJyxcblx0XHRcdCckbG9jYXRp
b24nLFxuXHRcdFx0J3RvZG9TdG9yYWdlJyxcblx0XHRcdCdmaWx0ZXJGaWx0ZXInXG5cdFx0XTtc
blxuXHRcdC8vIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQgdmlhIEFuZ3VsYXJKUyAkaW5qZWN0
b3Jcblx0XHQvLyBjb250cm9sbGVyJ3MgbmFtZSBpcyByZWdpc3RlcmVkIGluIEFwcGxpY2F0aW9u
LnRzIGFuZCBzcGVjaWZpZWQgZnJvbSBuZy1jb250cm9sbGVyIGF0dHJpYnV0ZSBpbiBpbmRleC5o
dG1sXG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0XHRwcml2YXRlICRzY29wZTogSVRvZG9TY29wZSxc
blx0XHRcdHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxuXHRcdFx0cHJp
dmF0ZSB0b2RvU3RvcmFnZTogSVRvZG9TdG9yYWdlLFxuXHRcdFx0cHJpdmF0ZSBmaWx0ZXJGaWx0
ZXJcblx0XHQpIHtcblx0XHRcdHRoaXMudG9kb3MgPSAkc2NvcGUudG9kb3MgPSB0b2RvU3RvcmFn
ZS5nZXQoKTtcblxuXHRcdFx0JHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHRcdCRzY29wZS5lZGl0
ZWRUb2RvID0gbnVsbDtcblxuXHRcdFx0Ly8gJ3ZtJyBzdGFuZHMgZm9yICd2aWV3IG1vZGVsJy4g
V2UncmUgYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyIHRvIHRoZSBzY29wZVxu
XHRcdFx0Ly8gZm9yIGl0cyBtZXRob2RzIHRvIGJlIGFjY2Vzc2libGUgZnJvbSB2aWV3IC8gSFRN
TFxuXHRcdFx0JHNjb3BlLnZtID0gdGhpcztcblxuXHRcdFx0Ly8gd2F0Y2hpbmcgZm9yIGV2ZW50
cy9jaGFuZ2VzIGluIHNjb3BlLCB3aGljaCBhcmUgY2F1c2VkIGJ5IHZpZXcvdXNlciBpbnB1dFxu
XHRcdFx0Ly8gaWYgeW91IHN1YnNjcmliZSB0byBzY29wZSBvciBldmVudCB3aXRoIGxpZmV0aW1l
IGxvbmdlciB0aGFuIHRoaXMgY29udHJvbGxlciwgbWFrZSBzdXJlIHlvdSB1bnN1YnNjcmliZS5c
blx0XHRcdCRzY29wZS4kd2F0Y2goJ3RvZG9zJywgKCkgPT4gdGhpcy5vblRvZG9zKCksIHRydWUp
O1xuXHRcdFx0JHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0aCgpJywgcGF0aCA9PiB0aGlzLm9u
UGF0aChwYXRoKSlcblxuXHRcdFx0aWYgKCRsb2NhdGlvbi5wYXRoKCkgPT09ICcnKSAkbG9jYXRp
b24ucGF0aCgnLycpO1xuXHRcdFx0JHNjb3BlLmxvY2F0aW9uID0gJGxvY2F0aW9uO1xuXHRcdH1c
blxuXHRcdG9uUGF0aChwYXRoOiBzdHJpbmcpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnN0YXR1c0Zp
bHRlciA9IChwYXRoID09PSAnL2FjdGl2ZScpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IGZhbHNl
IH0gOiAocGF0aCA9PT0gJy9jb21wbGV0ZWQnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiB0cnVl
IH0gOiB7fTtcblx0XHR9XG5cblx0XHRvblRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUucmVt
YWluaW5nQ291bnQgPSB0aGlzLmZpbHRlckZpbHRlcih0aGlzLnRvZG9zLCB7IGNvbXBsZXRlZDog
ZmFsc2UgfSkubGVuZ3RoO1xuXHRcdFx0dGhpcy4kc2NvcGUuZG9uZUNvdW50ID0gdGhpcy50b2Rv
cy5sZW5ndGggLSB0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudDtcblx0XHRcdHRoaXMuJHNjb3Bl
LmFsbENoZWNrZWQgPSAhdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnRcblx0XHRcdHRoaXMudG9k
b1N0b3JhZ2UucHV0KHRoaXMudG9kb3MpO1xuXHRcdH1cblxuXHRcdGFkZFRvZG8oKSB7XG5cdFx0
XHR2YXIgbmV3VG9kbyA6IHN0cmluZyA9IHRoaXMuJHNjb3BlLm5ld1RvZG8udHJpbSgpO1xuXHRc
dFx0aWYgKCFuZXdUb2RvLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0
XHRcdHRoaXMudG9kb3MucHVzaChuZXcgVG9kb0l0ZW0obmV3VG9kbywgZmFsc2UpKTtcblx0XHRc
dHRoaXMuJHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHR9XG5cblx0XHRlZGl0VG9kbyh0b2RvSXRl
bTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSB0b2RvSXRlbTtc
blxuXHRcdFx0Ly8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8gaW4gY2FzZSBlZGl0aW5nIGlzIGNh
bmNlbGxlZC5cblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIuZXh0ZW5k
KHt9LCB0b2RvSXRlbSk7XG5cdFx0fVxuXG5cdFx0cmV2ZXJ0RWRpdHModG9kb0l0ZW06IFRvZG9J
dGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zW3RoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSldID0g
dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvO1xuXHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSB0
cnVlO1xuXHRcdH1cblxuXHRcdGRvbmVFZGl0aW5nKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRc
dFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cdFx0XHR0aGlzLiRzY29wZS5vcmln
aW5hbFRvZG8gPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuJHNjb3BlLnJldmVydGVkKSB7XG5cdFx0
XHRcdC8vIFRvZG8gZWRpdHMgd2VyZSByZXZlcnRlZCwgZG9uJ3Qgc2F2ZS5cblx0XHRcdFx0dGhp
cy4kc2NvcGUucmV2ZXJ0ZWQgPSBudWxsO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0
XHR0b2RvSXRlbS50aXRsZSA9IHRvZG9JdGVtLnRpdGxlLnRyaW0oKTtcblx0XHRcdGlmICghdG9k
b0l0ZW0udGl0bGUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVUb2RvKHRvZG9JdGVtKTtcblx0XHRc
dH1cblx0XHR9XG5cblx0XHRyZW1vdmVUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0
dGhpcy50b2Rvcy5zcGxpY2UodGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKSwgMSk7XG5cdFx0
fVxuXG5cdFx0Y2xlYXJEb25lVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS50b2RvcyA9IHRo
aXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcih0b2RvSXRlbSA9PiAhdG9kb0l0ZW0uY29tcGxl
dGVkKTtcblx0XHR9XG5cblx0XHRtYXJrQWxsKGNvbXBsZXRlZDogYm9vbGVhbikge1xuXHRcdFx0
dGhpcy50b2Rvcy5mb3JFYWNoKHRvZG9JdGVtID0+IHsgdG9kb0l0ZW0uY29tcGxldGVkID0gY29t
cGxldGVkOyB9KTtcblx0XHR9XG5cdH1cblxufVxuLy8gQXBwbGljYXRpb24udHNcblxuLyoqXG4g
KiBUaGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1bGUuXG4gKlxuICogQHR5cGUge2FuZ3VsYXIuTW9k
dWxlfVxuICovXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0
b2RvbXZjID0gYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBbXSlcbiAgICAgICAgICAgIC5jb250
cm9sbGVyKCd0b2RvQ3RybCcsIFRvZG9DdHJsKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9k
b0JsdXInLCB0b2RvQmx1cilcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1cycsIHRv
ZG9Gb2N1cylcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Fc2NhcGUnLCB0b2RvRXNjYXBl
KVxuICAgICAgICAgICAgLnNlcnZpY2UoJ3RvZG9TdG9yYWdlJywgVG9kb1N0b3JhZ2UpO1xufVxu
IgogCiAvKioqLyB9KSwKIC8qIDQxNSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjguM1xuLy8g
ICAgIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNSBKZXJlbXkg
QXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRp
dG9yc1xuLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxu
ICAvLyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3
aW5kb3dgIGluIHRoZSBicm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5cbiAgdmFy
IHJvb3QgPSB0aGlzO1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2Ag
dmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2
ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFy
IEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlw
ZSwgRnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIC8vIENyZWF0ZSBxdWljayBy
ZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxu
ICB2YXJcbiAgICBwdXNoICAgICAgICAgICAgID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNl
ICAgICAgICAgICAgPSBBcnJheVByb3RvLnNsaWNlLFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBP
YmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3du
UHJvcGVydHk7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGlt
cGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJl
LlxuICB2YXJcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5h
dGl2ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9
IEZ1bmNQcm90by5iaW5kLFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAgICA9IE9iamVjdC5jcmVhdGU7
XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBl
LXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBz
YWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAg
dmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJu
IG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xu
ICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNj
b3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGli
aWxpdHkgZm9yIHRoZSBvbGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUg
YnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIGlmICh0eXBlb2YgZXhwb3J0
cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5l
ZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9
IF87XG4gICAgfVxuICAgIGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0g
XztcbiAgfVxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuOC4zJztc
blxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3Ig
Y3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ss
IHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0
aW9ucy5cbiAgdmFyIG9wdGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3Vu
dCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRj
aCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1
cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2
YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90
aGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtc
biAgICAgIH07XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNv
bGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5k
ZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9u
KGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJu
IGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9u
KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVy
biBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBB
IG1vc3RseS1pbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4g
YmUgYXBwbGllZFxuICAvLyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5p
bmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFuIGFyYml0
cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29y
LlxuICB2YXIgY2IgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBp
ZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlv
bih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4g
ICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICBy
ZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRlcmF0ZWUgPSBmdW5jdGlvbih2
YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkp
O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25l
ciBmdW5jdGlvbnMuXG4gIHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNGdW5jLCB1
bmRlZmluZWRPbmx5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxl
bmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0g
bnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5n
dGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4g
ICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlz
Lmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAg
ICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIXVuZGVmaW5lZE9ubHkgfHwgb2Jq
W2tleV0gPT09IHZvaWQgMCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAg
ICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFs
IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFu
b3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYg
KCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRl
KSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBw
cm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBl
ID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm9wZXJ0eSA9IGZ1
bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBv
YmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gSGVs
cGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0
aW9uXG4gIC8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3Rc
biAgLy8gUmVsYXRlZDogaHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYt
ZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBK
SVQgYnVnIG9uIEFSTS02NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93
KDIsIDUzKSAtIDE7XG4gIHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZh
ciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0g
Z2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1i
ZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5c
biAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxu
ICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JF
YWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtl
cy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRl
bnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250
ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3Ig
KGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAg
aXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2
YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0s
IGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5c
biAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNo
IGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZh
ciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0
aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3Ro
KTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4g
ICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAg
cmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9i
aik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJl
ZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlvbiBjcmVh
dGVSZWR1Y2UoZGlyKSB7XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJhdG9yIGZ1bmN0aW9uIGFzIHVz
aW5nIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFpbiBmdW5jdGlvbiB3aWxsIGRl
b3B0aW1pemUgdGhlLCBzZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3Iob2JqLCBpdGVy
YXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCkge1xuICAgICAgZm9yICg7IGluZGV4ID49
IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIgY3VycmVu
dEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0
ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAg
ICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0
ZWUsIG1lbW8sIGNvbnRleHQpIHtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRl
ZSwgY29udGV4dCwgNCk7XG4gICAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8u
a2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAg
ICAgICAgIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgLy8gRGV0ZXJt
aW5lIHRoZSBpbml0aWFsIHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAgICBpZiAoYXJn
dW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRl
eF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIHJldHVy
biBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZy
b20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICBf
LnJlZHVjZSA9IF8uZm9sZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJlZHVjZSgxKTtcblxuICAvLyBU
aGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZv
bGRyYC5cbiAgXy5yZWR1Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4g
IC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxp
YXNlZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihvYmosIHBy
ZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBrZXk7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9i
aikpIHtcbiAgICAgIGtleSA9IF8uZmluZEluZGV4KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtc
biAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gXy5maW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICB9XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVy
biBvYmpba2V5XTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBh
c3MgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9
IF8uc2VsZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIg
cmVzdWx0cyA9IFtdO1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4g
ICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAo
cHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAg
fSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxl
bWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgXy5yZWplY3QgPSBmdW5jdGlv
bihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8u
bmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUg
d2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxp
YXNlZCBhcyBgYWxsYC5cbiAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNh
dGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xu
ICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAg
IGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/
IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtl
eV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRy
dWU7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRo
ZSBvYmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4g
IF8uc29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAg
ICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlz
QXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8
IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5k
ZXg7XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2Jq
KSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBE
ZXRlcm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVz
aW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZXNgIGFuZCBgaW5jbHVkZWAuXG4g
IF8uY29udGFpbnMgPSBfLmluY2x1ZGVzID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2JqLCBpdGVt
LCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBf
LnZhbHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1
YXJkKSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCBpdGVtLCBmcm9t
SW5kZXgpID49IDA7XG4gIH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50
cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24o
b2JqLCBtZXRob2QpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtc
biAgICB2YXIgaXNGdW5jID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFw
KG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNGdW5jID8gbWV0aG9k
IDogdmFsdWVbbWV0aG9kXTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyBmdW5jIDogZnVu
Yy5hcHBseSh2YWx1ZSwgYXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2Ug
dmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0
eS5cbiAgXy5wbHVjayA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIF8ubWFwKG9i
aiwgXy5wcm9wZXJ0eShrZXkpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9m
IGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmplY3RzXG4g
IC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hlcmUgPSBm
dW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5tYXRjaGVy
KGF0dHJzKSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1
c2UgY2FzZSBvZiBgZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBjb250YWlu
aW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9u
KG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maW5kKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7
XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFz
ZWQgY29tcHV0YXRpb24pLlxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRl
eHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5p
dHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAm
JiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8u
dmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAo
dmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxu
ICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250
ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xu
ICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAg
IGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmluaXR5ICYm
IHJlc3VsdCA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAg
ICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAg
IH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBl
bGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlv
bihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBs
YXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlm
IChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5
TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBv
YmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9
IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVl
ID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFs
dWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGlu
ZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1
dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVz
dWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAg
IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFNo
dWZmbGUgYSBjb2xsZWN0aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8v
IFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNo
ZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
dmFyIHNldCA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgIHZh
ciBsZW5ndGggPSBzZXQubGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxlbmd0aCk7
XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykg
e1xuICAgICAgcmFuZCA9IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5kICE9PSBp
bmRleCkgc2h1ZmZsZWRbaW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVmZmxlZFty
YW5kXSA9IHNldFtpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfTtcblxu
ICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAgLy8g
SWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVu
dC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsg
d2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAg
aWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBv
YmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3Ro
IC0gMSldO1xuICAgIH1cbiAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5t
YXgoMCwgbikpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNy
aXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29u
dGV4dCk7XG4gICAgcmV0dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5k
ZXgsIGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAg
ICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGluZGV4
LCBsaXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4g
ICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlh
O1xuICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQg
MCkgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAt
MTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAg
fSksICd2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9y
IGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rp
b24oYmVoYXZpb3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4
dCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRl
ZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtc
biAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAg
YmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJl
c3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5
IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3Jv
dXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3Jv
dXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhh
cyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXld
ID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5
IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlv
dSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8uaW5kZXhC
eSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFtrZXld
ID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRo
YXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJp
bmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVc
biAgLy8gY3JpdGVyaW9uLlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZh
bHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBl
bHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWws
IGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9i
aikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJl
dHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xu
ICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5c
biAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4g
MDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2Jq
KS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5
czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNh
dGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNh
dGUuXG4gIF8ucGFydGl0aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBwYXNzID0g
W10sIGZhaWwgPSBbXTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmop
IHtcbiAgICAgIChwcmVkaWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNo
KHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xuXG4gIC8v
IEFycmF5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQgdGhlIGZp
cnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZp
cnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0
YWtlYC4gVGhlICoqZ3VhcmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBf
Lm1hcGAuXG4gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwg
Z3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAo
biA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8uaW5pdGlh
bChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRo
aW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9u
XG4gIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFs
bCB0aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4g
IF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGlj
ZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8
IGd1YXJkID8gMSA6IG4pKSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2Yg
YW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1
ZXMgaW4gdGhlIGFycmF5LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtc
biAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxs
IHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8u
cmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8v
IFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxp
YXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhl
IGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhl
IHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3Ag
PSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJh
eSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFs
bCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJy
YXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9O1xuXG4g
IC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5j
dGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBz
dGFydEluZGV4KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdLCBpZHggPSAwO1xuICAgIGZvciAodmFy
IGkgPSBzdGFydEluZGV4IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJh
eUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUp
KSkge1xuICAgICAgICAvL2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVu
dHMgb2JqZWN0XG4gICAgICAgIGlmICghc2hhbGxvdykgdmFsdWUgPSBmbGF0dGVuKHZhbHVlLCBz
aGFsbG93LCBzdHJpY3QpO1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtc
biAgICAgICAgb3V0cHV0Lmxlbmd0aCArPSBsZW47XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSB7
XG4gICAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAg
IH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4g
ICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBv
dXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25l
IGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJl
dHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJu
IGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZp
ZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJu
IF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxu
ICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRo
ZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlv
biBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAu
XG4gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRl
ZSwgY29udGV4dCkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBj
b250ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNT
b3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVl
ID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIg
c2VlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkp
OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAg
ICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFs
dWU7XG4gICAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNv
bXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAg
ICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4s
IGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAg
cmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRh
aW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAg
IH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFy
cmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBh
bGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5jdGlvbigp
IHtcbiAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlKSk7XG4g
IH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hh
cmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2Vj
dGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBh
cmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9
IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7
XG4gICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAgICAgICBp
ZiAoIV8uY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAg
ICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJl
dHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9u
ZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVt
ZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICBfLmRp
ZmZlcmVuY2UgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gZmxhdHRlbihhcmd1
bWVudHMsIHRydWUsIHRydWUsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rp
b24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9
KTtcbiAgfTtcblxuICAvLyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmds
ZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVy
LlxuICBfLnppcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuemlwKGFyZ3VtZW50cyk7
XG4gIH07XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJh
eSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hh
cmVkIGluZGljZXNcbiAgXy51bnppcCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0
aCA9IGFycmF5ICYmIF8ubWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCB8fCAwO1xuICAgIHZh
ciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IF8ucGx1Y2soYXJy
YXksIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDb252
ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBb
a2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBz
YW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9u
ZGluZyB2YWx1ZXMuXG4gIF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7XG4gICAg
dmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgo
bGlzdCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICBy
ZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1
bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4g
cmVzdWx0O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZp
bmRJbmRleCBhbmQgZmluZExhc3RJbmRleCBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlUHJl
ZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVk
aWNhdGUsIGNvbnRleHQpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4
dCk7XG4gICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRl
eCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYm
IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShh
cnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAg
IHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXgg
b24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZElu
ZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4gIF8uZmluZExhc3RJbmRleCA9
IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9y
IGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8v
IGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVz
ZXMgYmluYXJ5IHNlYXJjaC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmos
IGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4
dCwgMSk7XG4gICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwg
aGlnaCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAg
IHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJh
dGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtc
biAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24g
dG8gY3JlYXRlIHRoZSBpbmRleE9mIGFuZCBsYXN0SW5kZXhPZiBmdW5jdGlvbnNcbiAgZnVuY3Rp
b24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xu
ICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAs
IGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVt
YmVyJykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgaSA9IGlkeCA+PSAw
ID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAg
ICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6
IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5k
ZXggJiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwg
aXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4g
ICAgICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNh
dGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIF8uaXNOYU4pO1xuICAgICAgICBy
ZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9
IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHgg
Kz0gZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xu
ICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhl
IHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXks
XG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4g
IC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNz
IGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICBf
LmluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRl
eCk7XG4gIF8ubGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5kTGFzdElu
ZGV4KTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJp
dGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGBy
YW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0
dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8u
cmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51
bGwpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1c
biAgICBzdGVwID0gc3RlcCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGgu
Y2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShs
ZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3Rh
cnQgKz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJl
dHVybiByYW5nZTtcbiAgfTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXG4gIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRl
IGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvclxuICAvLyBvciBhIG5vcm1hbCBmdW5jdGlvbiB3
aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9u
KHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtc
biAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBz
b3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0
ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBw
bHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3Vs
dDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3Vu
ZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAg
Ly8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBG
dW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0aW9uKGZ1
bmMsIGNvbnRleHQpIHtcbiAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2
ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRz
LCAxKSk7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3Io
J0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBhcmdzID0gc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAg
ICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5j
b25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7
XG4gIH07XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2
ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxl
ZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4g
IC8vIGFzIGEgcGxhY2Vob2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVu
dHMgdG8gYmUgcHJlLWZpbGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykge1xuICAg
IHZhciBib3VuZEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFyIGJvdW5k
ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFy
Z3MubGVuZ3RoO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdz
W2ldID09PSBfID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAg
fVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFy
Z3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJv
dW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtc
blxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmpl
Y3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUg
Ym91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmlu
ZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgdmFyIGksIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcbiAgICBpZiAo
bGVuZ3RoIDw9IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5j
dGlvbiBuYW1lcycpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAg
a2V5ID0gYXJndW1lbnRzW2ldO1xuICAgICAgb2JqW2tleV0gPSBfLmJpbmQob2JqW2tleV0sIG9i
aik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBl
bnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVu
Y3Rpb24oZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtc
biAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcn
ICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAg
IGlmICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xu
ICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtcblxuICAv
LyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMs
IGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAg
Xy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAg
ICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5c
biAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBj
dXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRp
YWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVu
IGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmlu
ZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlv
biB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1v
cmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtl
IHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8v
IGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5n
IGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9u
cykge1xuICAgIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBu
dWxsO1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0g
e307XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlv
bnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxs
O1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICgh
dGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYm
IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJl
bWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7
XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJl
bWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVh
clRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1c
biAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29u
dGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxs
O1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxz
ZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAg
ICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5z
IGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQs
IHdpbGwgbm90XG4gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVk
IGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElm
IGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8v
IGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBm
dW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgYXJncywg
Y29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigp
IHtcbiAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgICAgaWYgKGxh
c3QgPCB3YWl0ICYmIGxhc3QgPj0gMCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChs
YXRlciwgd2FpdCAtIGxhc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51
bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5h
cHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBh
cmdzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7
XG4gICAgICB0aW1lc3RhbXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlh
dGUgJiYgIXRpbWVvdXQ7XG4gICAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0
KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1
bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtc
biAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJl
dHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vj
b25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVm
b3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2lu
YWwgZnVuY3Rpb24uXG4gIF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICBy
ZXR1cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBu
ZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVnYXRlID0g
ZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0
dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4g
IC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qg
b2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRo
ZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAg
IHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtc
biAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFy
IHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGls
ZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVy
biByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3
aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgXy5hZnRl
ciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAg
ICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rp
b24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0
aGUgTnRoIGNhbGwuXG4gIF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2
YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDAp
IHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1c
biAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVj
dXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxs
IGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8ucGFydGlh
bChfLmJlZm9yZSwgMik7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0t
LS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBg
Zm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3Rv
U3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5v
bkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5n
JyxcbiAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3du
UHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51
bVByb3BzKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVBy
b3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAg
dmFyIHByb3RvID0gKF8uaXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJv
dG90eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBj
YXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoXy5oYXMob2JqLCBw
cm9wKSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAg
d2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tu
b25FbnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3Rv
W3Byb3BdICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChw
cm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2Yg
YW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3Jp
cHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2BcbiAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5
cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAo
dmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAg
IC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9w
cyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIGFs
bCB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuICBfLmFsbEtleXMgPSBmdW5jdGlv
bihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBr
ZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAg
Ly8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3Bz
KG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhl
IHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9u
KG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtl
eXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ld
XTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBy
ZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG9i
amVjdFxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdFxuICBf
Lm1hcE9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVy
YXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICBfLmtleXMob2Jq
KSxcbiAgICAgICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHRzID0g
e30sXG4gICAgICAgICAgY3VycmVudEtleTtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY3VycmVudEtleSA9IGtleXNbaW5kZXhd
O1xuICAgICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXld
LCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07
XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAg
cGFpcnMuXG4gIF8ucGFpcnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBB
cnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHBhaXJzW2ldID0gW2tleXNbaV0sIG9ialtrZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVy
biBwYWlycztcbiAgfTtcblxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBv
YmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0ID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBrZXlzID0gXy5rZXlz
KG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtvYmpba2V5c1tpXV1dID0ga2V5c1tpXTtcbiAgICB9
XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBv
ZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8vIEFsaWFz
ZWQgYXMgYG1ldGhvZHNgXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAg
ICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4g
ICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmpl
Y3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5l
eHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZl
biBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2Jq
ZWN0KHMpXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZh
U2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBfLmV4dGVu
ZE93biA9IF8uYXNzaWduID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBSZXR1cm5z
IHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3Rc
biAgXy5maW5kS2V5ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBw
cmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gXy5rZXlz
KG9iaiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChwcmVkaWNh
dGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH07XG5cbiAgLy8g
UmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0
ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gZnVuY3Rpb24ob2JqZWN0LCBvaXRlcmF0ZWUsIGNv
bnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9iamVjdCwgaXRlcmF0ZWUsIGtl
eXM7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChfLmlzRnVu
Y3Rpb24ob2l0ZXJhdGVlKSkge1xuICAgICAga2V5cyA9IF8uYWxsS2V5cyhvYmopO1xuICAgICAg
aXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtc
biAgICAgIGtleXMgPSBmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKTtcbiAgICAg
IGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7IHJldHVybiBrZXkgaW4gb2Jq
OyB9O1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAw
LCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5
ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJh
dGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJl
dHVybiByZXN1bHQ7XG4gIH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3
aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkp
IHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxzZSB7XG4g
ICAgICB2YXIga2V5cyA9IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEp
LCBTdHJpbmcpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAg
ICAgIHJldHVybiAhXy5jb250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAg
cmV0dXJuIF8ucGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBGaWxs
IGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRz
ID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9i
amVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8v
IElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUg
YWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9u
KHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5
cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0
dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxp
Y2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAo
IV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikg
PyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMg
aW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhl
IHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRo
b2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1l
ZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwg
aW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4g
IH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2Yg
YGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMp
IHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xu
ICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9i
amVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXld
IHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7
XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBm
b3IgYGlzRXF1YWxgLlxuICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykg
e1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRo
ZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9w
b3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2Fs
KS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xu
ICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0g
dW5kZWZpbmVkYC5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09
IGI7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFu
Y2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93
cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNz
TmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcu
Y2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAv
LyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xl
YW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6
XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24g
KE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmdd
JzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qg
d3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1
aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09
PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFO
YHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3Qo
TmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4g
K2IgIT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQg
Zm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8g
K2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4g
ICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFu
ZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJl
ZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUg
dGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAg
ICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09
PSArYjtcbiAgICB9XG5cbiAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVj
dCBBcnJheV0nO1xuICAgIGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0g
J29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAg
Ly8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50
LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFt
ZXMgYXJlLlxuICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0
cnVjdG9yO1xuICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlvbihhQ3Rv
cikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3Ry
dWN0b3InIGluIGIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4g
ICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRo
bSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9t
IEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAg
Ly8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3Mg
ZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMg
Y29tcGFyaXNvbi5cbiAgICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0
YWNrIHx8IFtdO1xuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChs
ZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJz
ZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVk
IHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3Rh
Y2tbbGVuZ3RoXSA9PT0gYjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0
byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4g
ICAgYlN0YWNrLnB1c2goYik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMg
YW5kIGFycmF5cy5cbiAgICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5
IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5c
biAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgp
IHJldHVybiBmYWxzZTtcbiAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9y
aW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAg
ICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1
cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBv
YmplY3RzLlxuICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9
IGtleXMubGVuZ3RoO1xuICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4g
dGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFs
aXR5LlxuICAgICAgaWYgKF8ua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNl
O1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNo
IG1lbWJlclxuICAgICAgICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKF8uaGFz
KGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBm
YWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJv
bSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAg
IGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEg
ZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5p
c0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfTtcblxu
ICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4g
XCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgXy5p
c0VtcHR5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1
ZTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSAmJiAoXy5pc0FycmF5KG9iaikgfHwgXy5pc1N0
cmluZyhvYmopIHx8IF8uaXNBcmd1bWVudHMob2JqKSkpIHJldHVybiBvYmoubGVuZ3RoID09PSAw
O1xuICAgIHJldHVybiBfLmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH07XG5cbiAgLy8gSXMg
YSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxu
ICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUn
cyBuYXRpdmUgQXJyYXkuaXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1
bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0
IEFycmF5XSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4g
IF8uaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7
XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYg
ISFvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRz
LCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAsIGlzRXJy
b3IuXG4gIF8uZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVy
JywgJ0RhdGUnLCAnUmVnRXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydp
cycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwo
b2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8g
RGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVt
LCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1
bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8u
aXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmhhcyhvYmosICdj
YWxsZWUnKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFw
cHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIHR5cGVvZiBidWdzIGluIG9sZCB2OCxcbiAgLy8g
SUUgMTEgKCMxNjIxKSwgYW5kIGluIFNhZmFyaSA4ICgjMTkyOSkuXG4gIGlmICh0eXBlb2YgLy4v
ICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0Jykge1xuICAgIF8u
aXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0g
J2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmpl
Y3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
cmV0dXJuIGlzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4gIH07XG5c
biAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51bWJlciB3
aGljaCBkb2VzIG5vdCBlcXVhbCBpdHNlbGYpLlxuICBfLmlzTmFOID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgcmV0dXJuIF8uaXNOdW1iZXIob2JqKSAmJiBvYmogIT09ICtvYmo7XG4gIH07XG5cbiAg
Ly8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3Ry
aW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEg
Z2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtc
biAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFi
bGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBj
aGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8g
b24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMg
PSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Q
cm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xu
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGluICpub0Nv
bmZsaWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAgLy8gcHJl
dmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0
LlxuICBfLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2aW91c1Vu
ZGVyc2NvcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRp
dHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgXy5pZGVudGl0eSA9
IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFByZWRp
Y2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJz
Y29yZS5cbiAgXy5jb25zdGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG5cbiAgXy5ub29wID0g
ZnVuY3Rpb24oKXt9O1xuXG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0eTtcblxuICAvLyBHZW5lcmF0
ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJv
cGVydHkuXG4gIF8ucHJvcGVydHlPZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmog
PT0gbnVsbCA/IGZ1bmN0aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9i
altrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hl
Y2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFs
dWVgIHBhaXJzLlxuICBfLm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRycykge1xu
ICAgIGF0dHJzID0gXy5leHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24o
b2JqKSB7XG4gICAgICByZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07XG4gIH07
XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlv
bihuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4
KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEp
O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkp
O1xuICAgIHJldHVybiBhY2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdl
ciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9u
KG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4g
ICAgICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJh
bmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJseSBmYXN0
ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8u
bm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0
VGltZSgpO1xuICB9O1xuXG4gICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5n
LlxuICB2YXIgZXNjYXBlTWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7
JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYj
eDI3OycsXG4gICAgJ2AnOiAnJiN4NjA7J1xuICB9O1xuICB2YXIgdW5lc2NhcGVNYXAgPSBfLmlu
dmVydChlc2NhcGVNYXApO1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNj
YXBpbmcgc3RyaW5ncyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIGNyZWF0ZUVz
Y2FwZXIgPSBmdW5jdGlvbihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNo
KSB7XG4gICAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9y
IGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxuICAgIHZhciBzb3Vy
Y2UgPSAnKD86JyArIF8ua2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJl
Z2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNv
dXJjZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcg
PSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJl
Z2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVy
KSA6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNj
YXBlTWFwKTtcbiAgXy51bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4g
IC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRo
ZW4gaW52b2tlIGl0IHdpdGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90aGVyd2lz
ZSwgcmV0dXJuIGl0LlxuICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHksIGZh
bGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmpl
Y3RbcHJvcGVydHldO1xuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2YWx1ZSA9
IGZhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVl
LmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGlu
dGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8v
IFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBf
LnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIg
KyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAv
LyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRl
cnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBh
bHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZh
bHVhdGUgICAgOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDogLzwlPShb
XFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xu
ICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3Ug
ZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBv
ciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5v
dCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFy
YWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFc
biAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiAgICAg
IFwiJ1wiLFxuICAgICdcXFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdyJyxcbiAg
ICAnXFxuJzogICAgICduJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjkn
OiAndTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAy
OHxcXHUyMDI5L2c7XG5cbiAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAg
IHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBKYXZhU2NyaXB0
IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9u
LlxuICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVy
cywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90
ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5
IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIF8udGVtcGxhdGUgPSBmdW5j
dGlvbih0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYm
IG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5k
ZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21i
aW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlv
bi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8
IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNo
KS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4g
ICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxh
dGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2
YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVw
bGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVh
dGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCku
cmVwbGFjZShlc2NhcGVyLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0
Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicr
XFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4n
XCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBc
IicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wi
O1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xc
blwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9i
ZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZl
c3QuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5c
IjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2
YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNl
ID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9
IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwi
cHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4g
ICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBy
ZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291
cmNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAg
IHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xu
ICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5cbiAgICAv
LyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29t
cGlsYXRpb24uXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaic7
XG4gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicg
KyBzb3VyY2UgKyAnfSc7XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgLy8gQWRk
IGEgXCJjaGFpblwiIGZ1bmN0aW9uLiBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29y
ZSBvYmplY3QuXG4gIF8uY2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2Ug
PSBfKG9iaik7XG4gICAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdGFu
Y2U7XG4gIH07XG5cbiAgLy8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJZiBVbmRl
cnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmpl
Y3QgdGhhdFxuICAvLyBjYW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFs
dGVyZWQgdmVyc2lvbnMgb2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3Jh
cHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBj
b250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3VsdCA9IGZ1
bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhv
YmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5j
dGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAg
IHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVd
ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAg
ICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQo
dGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4g
IC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9i
amVjdC5cbiAgXy5taXhpbihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rp
b25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywg
J3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xu
ICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVd
ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1l
dGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcg
fHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIGRlbGV0ZSBvYmpbMF07
XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8g
QWRkIGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFj
aChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIg
bWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0
aW9uKCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3Jh
cHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJl
c3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZh
bHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAg
Ly8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdp
bmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZp
Y2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5w
cm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtc
biAgICByZXR1cm4gJycgKyB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3Ry
YXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRl
cnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1
bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0
aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBu
YW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRo
YXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5
IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3Nl
IGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRl
ZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBl
b2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ3Vu
ZGVyc2NvcmUnLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAg
fVxufS5jYWxsKHRoaXMpKTtcbiIKK21vZHVsZS5leHBvcnRzID0gIi8vICAgICBVbmRlcnNjb3Jl
LmpzIDEuOC4zXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAw
OS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBS
ZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJh
c2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSBy
b290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBleHBvcnRzYCBvbiB0aGUg
c2VydmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFs
dWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3Qu
XztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2
ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBP
YmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8g
Q3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3Jl
IHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1
c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJp
bmcgICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBP
YmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRp
dmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJl
IGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5Lmlz
QXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZl
QmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQsXG4gICAgbmF0aXZlQ3JlYXRlICAgICAgID0g
T2JqZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJv
Z2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4g
IC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3Ig
dXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFu
Y2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJu
IG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBv
cnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNr
d2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3Jl
IGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgaWYg
KHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxl
ICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1v
ZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtc
biAgICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJ
T04gPSAnMS44LjMnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBl
ZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3Nl
ZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2Nv
cmVcbiAgLy8gZnVuY3Rpb25zLlxuICB2YXIgb3B0aW1pemVDYiA9IGZ1bmN0aW9uKGZ1bmMsIGNv
bnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1
bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAg
ICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5j
dGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2
YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRl
eHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiBy
ZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xu
ICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5k
ZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkg
e1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xu
ICB9O1xuXG4gIC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxi
YWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gIC8vIHRvIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxl
Y3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlclxuICAvLyBpZGVu
dGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJv
cGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdD
b3VudCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXy5pZGVudGl0eTtcbiAgICBp
ZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQs
IGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXIo
dmFsdWUpO1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcbiAgXy5pdGVyYXRl
ZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBjb250
ZXh0LCBJbmZpbml0eSk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNy
ZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0ZUFzc2lnbmVyID0gZnVuY3Rp
b24oa2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7
XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGgg
PCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAx
OyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1l
bnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAg
ICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkr
Kykge1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICghdW5kZWZp
bmVkT25seSB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xu
ICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH07XG5cbiAg
Ly8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGlu
aGVyaXRzIGZyb20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5
cGUpIHtcbiAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlm
IChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICBDdG9y
LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAg
Q3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFy
IHByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xu
ICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAg
fTtcblxuICAvLyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hl
dGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9y
IGFzIGFuIG9iamVjdFxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35q
b3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5
IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lO
REVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHByb3BlcnR5KCds
ZW5ndGgnKTtcbiAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAg
IHZhciBsZW5ndGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBs
ZW5ndGggPT0gJ251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYgbGVuZ3RoIDw9IE1BWF9BUlJBWV9J
TkRFWDtcbiAgfTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0
aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9u
IHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBp
ZiB0aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwg
aXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikp
IHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkr
Kykge1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBl
bHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgICBmb3IgKGkgPSAwLCBs
ZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVl
KG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJu
IG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0
ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAgXy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29u
dGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxc
biAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMg
PSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDog
aW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwg
Y3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAg
Ly8gQ3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4g
IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBPcHRpbWl6ZWQgaXRlcmF0b3Ig
ZnVuY3Rpb24gYXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aFxuICAgIC8vIGluIHRoZSBtYWluIGZ1
bmN0aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5MS5cbiAgICBmdW5jdGlvbiBpdGVy
YXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKSB7XG4gICAgICBm
b3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAg
ICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICAg
IG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7
XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rp
b24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlM
aWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2Jq
KS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4g
ICAgICAvLyBEZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUgaWYgbm9uZSBpcyBwcm92aWRlZC5c
biAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICAgICBtZW1vID0gb2JqW2tl
eXMgPyBrZXlzW2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAg
fVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4
LCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNp
bmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9y
IGBmb2xkbGAuXG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5qZWN0ID0gY3JlYXRlUmVkdWNl
KDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxz
byBrbm93biBhcyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGNyZWF0ZVJl
ZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0
cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1
bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAo
aXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAga2V5ID0gXy5maW5kSW5kZXgob2JqLCBwcmVkaWNh
dGUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBfLmZpbmRLZXkob2JqLCBw
cmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoa2V5ICE9PSB2b2lkIDAgJiYga2V5
ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVs
ZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAu
XG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRl
LCBjb250ZXh0KTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3Qp
IHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNo
KHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1
cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJl
amVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIF8u
ZmlsdGVyKG9iaiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xuICB9O1xuXG4g
IC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0
ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlv
bihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0
ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMo
b2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJl
bnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRl
KG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1c
biAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25l
IGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNl
ZCBhcyBgYW55YC5cbiAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwg
Y29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAg
dmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVu
Z3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5
c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBj
dXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xu
ICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEg
Z2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlc2AgYW5k
IGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZXMgPSBfLmluY2x1ZGUgPSBmdW5j
dGlvbihvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtl
KG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0g
J251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAgcmV0dXJuIF8uaW5kZXhPZihv
YmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbiAgfTtcblxuICAvLyBJbnZva2UgYSBtZXRob2Qg
KHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cbiAgXy5pbnZv
a2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChh
cmd1bWVudHMsIDIpO1xuICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTtcbiAg
ICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBp
c0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRob2RdO1xuICAgICAgcmV0dXJuIGZ1bmMgPT0gbnVs
bCA/IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAv
LyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRj
aGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICBy
ZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xuICB9O1xuXG4gIC8vIENvbnZlbmll
bmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBv
bmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5c
biAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIo
b2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9u
IG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0
XG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uZmluZFdo
ZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbmQob2JqLCBfLm1h
dGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAo
b3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWF4ID0gZnVuY3Rpb24ob2JqLCBp
dGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21w
dXRlZCA9IC1JbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVy
YXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShv
YmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGgg
PSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07
XG4gICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVl
O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2Io
aXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGlu
ZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBs
aXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09
PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQg
PSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxu
ICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJu
IHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBf
Lm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0
ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29t
cHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAg
IG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAg
ICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XG4gICAg
ICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xu
ICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2Jq
LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVy
YXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29t
cHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpIHtc
biAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21w
dXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lv
biBvZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwOi8vZW4ud2lraXBlZGlh
Lm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICBfLnNodWZmbGUgPSBmdW5jdGlv
bihvYmopIHtcbiAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVz
KG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7XG4gICAgdmFyIHNodWZmbGVkID0g
QXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIHJhbmQ7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrKSB7XG4gICAgICByYW5kID0gXy5yYW5kb20oMCwgaW5kZXgpO1xuICAgICAg
aWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5kXTtcbiAg
ICAgIHNodWZmbGVkW3JhbmRdID0gc2V0W2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHNodWZm
bGVkO1xuICB9O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xs
ZWN0aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xl
IHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxv
d3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwg
Z3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBpZiAoIWlzQXJy
YXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4gb2JqW18ucmFu
ZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJldHVybiBfLnNodWZmbGUob2JqKS5z
bGljZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3Mg
dmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRC
eSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNi
KGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0
aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6
IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRl
ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVm
dCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0g
cmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIg
fHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZv
aWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdo
dC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVu
Y3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIg
Z3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBv
YmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4g
ICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmpl
Y3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0
ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRl
cmlvbi5cbiAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7
XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVs
c2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmpl
Y3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBidXQgZm9y
XG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1
ZS5cbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4g
ICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBv
ZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8v
IGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhh
dCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGdyb3VwKGZ1bmN0
aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJl
c3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICAvLyBTYWZlbHkg
Y3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRv
QXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlm
IChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNBcnJh
eUxpa2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIF8u
dmFsdWVzKG9iaik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMg
aW4gYW4gb2JqZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09
IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0
aCA6IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAvLyBTcGxpdCBhIGNvbGxlY3Rpb24g
aW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHNhdGlzZnkgdGhlIGdpdmVu
XG4gIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHNhdGlz
ZnkgdGhlIHByZWRpY2F0ZS5cbiAgXy5wYXJ0aXRpb24gPSBmdW5jdGlvbihvYmosIHByZWRpY2F0
ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4g
ICAgdmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtdO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBrZXksIG9iaikge1xuICAgICAgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmopID8gcGFz
cyA6IGZhaWwpLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBbcGFzcywgZmFpbF07
XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4g
IC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxs
IHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFz
IGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0
byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0
aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9p
ZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICBy
ZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBS
ZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNp
YWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiog
d2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcg
dGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4g
ICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAt
IChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxh
c3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFz
dCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5
LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAg
IGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtc
biAgICByZXR1cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7
XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2Yg
dGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLlxuICAvLyBFc3BlY2lhbGx5
IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJl
dHVyblxuICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ucmVzdCA9IF8u
dGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBz
bGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAg
Ly8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3Qg
PSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0
eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUg
YGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFs
bG93LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sIGlkeCA9IDA7
XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlu
cHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAg
ICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc0Fy
Z3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIC8vZmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFy
cmF5IG9yIGFyZ3VtZW50cyBvYmplY3RcbiAgICAgICAgaWYgKCFzaGFsbG93KSB2YWx1ZSA9IGZs
YXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCk7XG4gICAgICAgIHZhciBqID0gMCwgbGVuID0g
dmFsdWUubGVuZ3RoO1xuICAgICAgICBvdXRwdXQubGVuZ3RoICs9IGxlbjtcbiAgICAgICAgd2hp
bGUgKGogPCBsZW4pIHtcbiAgICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAg
ICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgr
K10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxu
ICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0
KSwgb3IganVzdCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFs
bG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3csIGZhbHNlKTtcbiAgfTtc
blxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRh
aW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRob3V0ID0gZnVuY3Rpb24oYXJyYXkp
IHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywg
MSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRo
ZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3Ug
aGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNl
ZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNT
b3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRl
ZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0
ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0g
bnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9
IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdl
dExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJy
YXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBp
LCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAgICBpZiAoIWkg
fHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgc2VlbiA9
IGNvbXB1dGVkO1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIV8u
Y29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVk
KTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxz
ZSBpZiAoIV8uY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2go
dmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8v
IFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3Qg
ZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlv
biA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcmd1bWVudHMsIHRy
dWUsIHRydWUpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMg
ZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMu
XG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0g
W107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFy
IGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoXy5jb250YWlucyhyZXN1bHQsIGl0
ZW0pKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisr
KSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztc
biAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtc
biAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8v
IE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCBy
ZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3Qg
PSBmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7XG4gICAgcmV0dXJuIF8uZmlsdGVy
KGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwg
dmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0
cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5k
ZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW56
aXAoYXJndW1lbnRzKTtcbiAgfTtcblxuICAvLyBDb21wbGVtZW50IG9mIF8uemlwLiBVbnppcCBh
Y2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBl
bGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlc1xuICBfLnVuemlwID0gZnVuY3Rpb24oYXJyYXkpIHtc
biAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3Ro
IHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBp
bmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhd
ID0gXy5wbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9
O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5n
bGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBh
cnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8v
IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2
YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0
aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVz
KSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7
XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAg
fVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRv
IGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4IGZ1bmN0aW9uc1xuICBmdW5j
dGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rp
b24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJl
ZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xu
ICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7
IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBp
ZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xu
ICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRo
ZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRl
c3RcbiAgXy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiAgXy5m
aW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVz
ZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXgg
YXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWlu
dGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rp
b24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0
ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAg
IHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwg
aGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4g
ICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxz
ZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIEdlbmVy
YXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5kIGxhc3RJbmRleE9mIGZ1bmN0
aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNv
cnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAg
ICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBl
b2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAg
ICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAg
ICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHgg
KyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNl
IGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRl
ZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0g
PyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAg
IGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgXy5pc05h
Tik7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAg
ICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHgg
PCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0p
IHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4g
IC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRl
bSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGlu
IHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNv
cnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFy
eSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4
LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0x
LCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29u
dGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5h
dGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9j
dW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1s
I3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAg
aWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFy
dCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG5cbiAgICB2YXIgbGVuZ3RoID0g
TWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciBy
YW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5n
dGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4g
ICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBG
dW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0
aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9y
bWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50c1xuICB2YXIgZXhlY3V0ZUJv
dW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29u
dGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRG
dW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNl
bGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0g
c291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoXy5pc09iamVjdChyZXN1bHQp
KSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBh
IGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQg
YXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1
KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5k
ID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIGlmIChuYXRpdmVCaW5kICYmIGZ1bmMu
YmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywgc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cg
bmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAg
dmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGJvdW5kID0gZnVu
Y3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0
LCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICB9O1xuICAg
IHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBi
eSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3Vt
ZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250
ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxsb3dpbmcgYW55IGNvbWJpbmF0
aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBmdW5jdGlv
bihmdW5jKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtc
biAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxl
bmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7
XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3Nb
aV0gPSBib3VuZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFy
Z3NbaV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3Ro
KSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRl
Qm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJu
IGJvdW5kO1xuICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9k
cyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhv
ZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFj
a3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwg
PSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwg
a2V5O1xuICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3Qg
YmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aDsg
aSsrKSB7XG4gICAgICBrZXkgPSBhcmd1bWVudHNbaV07XG4gICAgICBvYmpba2V5XSA9IF8uYmlu
ZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBN
ZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBf
Lm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6ZSA9IGZ1
bmN0aW9uKGtleSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICAgIHZh
ciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykg
OiBrZXkpO1xuICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3Nd
ID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJl
c3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXpl
O1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9m
IG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRz
IHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgIHZhciBh
cmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCl7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3
YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBy
dW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5k
ZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rp
b24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9u
Y2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhy
b3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0
IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0
IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVk
Z2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBv
biB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5j
LCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2
YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlv
bnMpIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHBy
ZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAg
dGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3Mp
O1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlm
ICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7
XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBj
b250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWlu
aW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xu
ICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVs
bDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0g
ZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0
ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJh
aWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCBy
ZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xu
XG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMg
dG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24g
d2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1p
bGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlv
biBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAg
Xy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0
aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRl
ciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xu
XG4gICAgICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAwKSB7XG4gICAgICAgIHRpbWVvdXQg
PSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAg
ICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICBy
ZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91
dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxu
ICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJn
cyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAgICB2YXIgY2Fs
bE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlmICghdGltZW91dCkgdGltZW91
dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAg
ICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9
IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4g
IH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3Vt
ZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRz
LCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVj
dXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3Jh
cHBlcikge1xuICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4gIH07XG5cbiAg
Ly8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5c
biAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24o
KSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAg
IH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0
aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1
cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbiAgXy5jb21wb3NlID0gZnVu
Y3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJn
cy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3Rh
cnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQp
O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBm
dW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBj
YWxsLlxuICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMu
YXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFJl
dHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5v
dCBpbmNsdWRpbmcpIHRoZSBOdGggY2FsbC5cbiAgXy5iZWZvcmUgPSBmdW5jdGlvbih0aW1lcywg
ZnVuYykge1xuICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlm
ICgtLXRpbWVzID4gMCkge1xuICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgICAg
cmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhh
dCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8g
b2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgXy5v
bmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4g
IC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJl
IGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFz
RW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmlu
ZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBl
T2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVy
YWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4gIGZ1bmN0aW9u
IGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAgdmFyIG5vbkVudW1JZHggPSBu
b25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25z
dHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBj
b25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3Ig
aXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlm
IChfLmhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2go
cHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51
bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtw
cm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAg
ICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZl
IHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVz
IHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBm
dW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAg
IGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0g
W107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5w
dXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xs
ZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAg
Ly8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxs
S2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4g
W107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1
c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxl
Y3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAv
LyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFs
dWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2
YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ld
ID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8v
IFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxl
bWVudCBvZiB0aGUgb2JqZWN0XG4gIC8vIEluIGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJldHVybnMg
YW4gb2JqZWN0XG4gIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4
dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlz
ID0gIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAg
ICAgIHJlc3VsdHMgPSB7fSxcbiAgICAgICAgICBjdXJyZW50S2V5O1xuICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjdXJyZW50S2V5
ID0ga2V5c1tpbmRleF07XG4gICAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShv
YmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4g
cmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBg
W2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZh
ciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAg
IHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAg
ICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQg
dmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAg
Xy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFy
IGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBr
ZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBh
IHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVj
dC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMg
PSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkg
aW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChr
ZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEV4dGVu
ZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2Jq
ZWN0KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5cbiAgLy8g
QXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhl
IHBhc3NlZC1pbiBvYmplY3QocylcbiAgLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3Jn
L2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3Np
Z24pXG4gIF8uZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihfLmtleXMpO1xu
XG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSBw
cmVkaWNhdGUgdGVzdFxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29u
dGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFy
IGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBr
ZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAg
ICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1c
biAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5n
IHRoZSBhbGxvd2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmplY3Qs
IG9pdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSB7fSwgb2JqID0gb2JqZWN0
LCBpdGVyYXRlZSwga2V5cztcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4g
ICAgaWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7XG4gICAgICBrZXlzID0gXy5hbGxLZXlz
KG9iaik7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Iob2l0ZXJhdGVlLCBjb250ZXh0KTtc
biAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFs
c2UsIDEpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHsgcmV0
dXJuIGtleSBpbiBvYmo7IH07XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAg
Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4g
ICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtc
biAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAgLy8gUmV0dXJuIGEgY29weSBv
ZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsb2NrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21p
dCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoXy5pc0Z1bmN0
aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRlZSk7XG4g
ICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5tYXAoZmxhdHRlbihhcmd1bWVudHMsIGZh
bHNlLCBmYWxzZSwgMSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVl
LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9
O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9
O1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMu
XG4gIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMsIHRydWUpO1xuXG4gIC8v
IENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBl
IG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVu
IHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIF8uY3Jl
YXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNl
Q3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBfLmV4dGVuZE93bihyZXN1bHQsIHBy
b3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93
LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBf
LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5c
biAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMg
b2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFw
IGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRp
b25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0g
ZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAg
cmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBh
IGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5pc01hdGNoID0gZnVuY3Rpb24o
b2JqZWN0LCBhdHRycykge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVuZ3RoID0g
a2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAg
ICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5
XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAg
ICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJp
c29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFT
dGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9
PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1v
bnkgYGVnYWxgIHByb3Bvc2FsXShodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9p
ZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8g
YSA9PT0gMSAvIGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVj
YXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxs
KSByZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAg
ICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNl
b2YgXykgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5c
biAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1l
ICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05h
bWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGRh
dGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29i
amVjdCBSZWdFeHBdJzpcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBm
b3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdb
b2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNw
b25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xu
ICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJl
dHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4g
ICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAg
ICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOXG4gICAgICAgIGlmICgrYSAh
PT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29u
IGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiAr
YSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2Jq
ZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBD
b2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0
ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2Vu
dGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNl
bnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAg
ICByZXR1cm4gK2EgPT09ICtiO1xuICAgIH1cblxuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05h
bWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICAgIGlm
ICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZh
bHNlO1xuXG4gICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUg
bm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgIC8vIGZyb20g
ZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBi
Q3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoXy5p
c0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5j
ZW9mIGJDdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBp
biBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAg
ICAgfVxuICAgIH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVz
LiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBp
cyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9u
IGBKT2AuXG5cbiAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMu
XG4gICAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVj
dHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAg
ICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7
XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3Jt
YW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8v
IHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0g
YSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUg
Zmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3Rh
Y2sucHVzaChhKTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNv
bXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChhcmVBcnJheXMpIHtcbiAgICAgIC8v
IENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24g
aXMgbmVjZXNzYXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3Ro
ICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBj
b250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgIHdoaWxlIChs
ZW5ndGgtLSkge1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ss
IGJTdGFjaykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8g
RGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhhKSwga2V5O1xu
ICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9i
amVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFy
aW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICBpZiAoXy5rZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3Ro
KSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVl
cCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAg
ICAgaWYgKCEoXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3Rh
Y2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZp
cnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3Rh
Y2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4g
IC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJl
IGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEs
IGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVt
cHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9w
ZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51
bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXko
b2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9i
ai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09
IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVn
YXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2
ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2Jq
KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxl
IGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBl
ID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09
PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9k
czogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBp
c1JlZ0V4cCwgaXNFcnJvci5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0
cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InXSwgZnVuY3Rpb24obmFt
ZSkge1xuICAgIF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4g
dG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAgICB9O1xu
ICB9KTtcblxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4g
YnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNw
ZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVu
dHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJu
IF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNG
dW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1Z3MgaW4g
b2xkIHY4LFxuICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5KS5cbiAg
aWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmpl
Y3QnKSB7XG4gICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4g
dHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xuICAgIH07XG4gIH1cblxuICAvLyBJ
cyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBmdW5jdGlv
bihvYmopIHtcbiAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChv
YmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMgdGhl
IG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNOYU4gPSBm
dW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9iaiAhPT0gK29i
ajtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj9cbiAgXy5pc0Jvb2xl
YW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0g
ZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07
XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMg
YSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihv
YmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQg
ZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBk
aXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5
cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBu
dWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxp
dHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2Nv
cmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRv
IGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5k
ZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3Qu
XyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBL
ZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxu
ICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07
XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb25zLiBPZnRlbiB1c2VmdWwgb3V0
c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBfLmNvbnN0YW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtc
blxuICBfLm5vb3AgPSBmdW5jdGlvbigpe307XG5cbiAgXy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xu
XG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVy
bnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgcmV0dXJuIG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5KSB7XG4g
ICAgICByZXR1cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJl
ZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2Zc
biAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0
aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJl
dHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7
XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50
aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0g
QXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRl
ZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ld
ID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBh
IHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFu
ZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAg
IG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRo
LmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEg
KHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4g
aW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4g
bmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgIC8vIExpc3Qgb2YgSFRNTCBlbnRpdGll
cyBmb3IgZXNjYXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxu
ICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxu
ICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2MDsnXG4gIH07XG4gIHZhciB1bmVz
Y2FwZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb25zIGZvciBlc2Nh
cGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxu
ICB2YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkge1xuICAgIHZhciBlc2NhcGVyID0g
ZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBbbWF0Y2hdO1xuICAgIH07XG4gICAg
Ly8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVk
XG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xu
ICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdl
eHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtc
biAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAg
IHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VS
ZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3Jl
YXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVz
Y2FwZU1hcCk7XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlz
IGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVcbiAgLy8gYG9iamVjdGAgYXMgY29u
dGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0
LCBwcm9wZXJ0eSwgZmFsbGJhY2spIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/
IHZvaWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtc
biAgICAgIHZhbHVlID0gZmFsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBfLmlzRnVuY3Rpb24o
dmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gIH07XG5cbiAgLy8gR2VuZXJh
dGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBz
ZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291
bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQg
PSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlk
O1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVt
cGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0
dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5n
cyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJw
b2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xc
c1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0
aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9u
LCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8v
IGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAv
LyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4g
YmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4g
ICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHIn
OiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4Jyxc
biAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8
XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9u
KG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9O1xuXG4g
IC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3Mg
aW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0
cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3Rs
eSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xk
U2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50
ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlm
ICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAg
c2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtc
blxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24g
dmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0
aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9s
YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01h
dGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21w
aWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3By
aWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7
XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVy
cG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShp
bmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZXIsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXgg
PSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAg
c291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNj
YXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAg
ICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/
Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNv
dXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5c
biAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRo
ZSBjb3JyZWN0IG9mZmVzdC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3Vy
Y2UgKz0gXCInO1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVk
LCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICBpZiAoIXNldHRpbmdzLnZh
cmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xu
XG4gICAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4s
XCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcn
KTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAgICB0cnkg
e1xuICAgICAgdmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAn
b2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0g
c291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5j
dGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4g
ICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmll
bmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJp
YWJsZSB8fCAnb2JqJztcbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3Vt
ZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAg
fTtcblxuICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3Jh
cHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAg
IHJldHVybiBpbnN0YW5jZTtcbiAgfTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0t
XG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMg
YSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdy
YXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUg
ZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2
YXIgcmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikge1xuICAgIHJldHVybiBpbnN0YW5j
ZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBv
d24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4g
PSBmdW5jdGlvbihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24o
bmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXy5w
cm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5f
d3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAg
cmV0dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAg
fSk7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8g
dGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRv
ciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNo
JywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5j
dGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5w
cm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFw
cGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFt
ZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkg
ZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xu
ICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3Jh
cHBlci5cbiAgXy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFt
ZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBl
W25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG1ldGhvZC5h
cHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBF
eHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAg
Xy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBl
ZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveHkgZm9yIHNvbWUgbWV0aG9k
cyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQg
SlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8ucHJvdG90eXBlLnZhbHVlT2YgPSBfLnByb3RvdHlw
ZS50b0pTT04gPSBfLnByb3RvdHlwZS52YWx1ZTtcblxuICBfLnByb3RvdHlwZS50b1N0cmluZyA9
IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnJyArIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAg
Ly8gQU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkg
d2l0aCBBTUQgbG9hZGVyc1xuICAvLyB0aGF0IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1cm4gc2Vt
YW50aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVyYWxcbiAgLy8gcHJhY3RpY2UgZm9y
IEFNRCByZWdpc3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3VzLCB1bmRlcnNjb3JlIHJlZ2lzdGVy
c1xuICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBi
YXNlIGxpYnJhcnkgdGhhdCBpc1xuICAvLyBwb3B1bGFyIGVub3VnaCB0byBiZSBidW5kbGVkIGlu
IGEgdGhpcmQgcGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQgb2ZcbiAgLy8gYW4gQU1EIGxvYWQg
cmVxdWVzdC4gVGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBhblxuICAv
LyBhbm9ueW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVz
dC5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xu
ICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBf
O1xuICAgIH0pO1xuICB9XG59LmNhbGwodGhpcykpO1xuIgogCiAvKioqLyB9KSwKIC8qIDQxNiAq
LwpAQCAtMTQ4Nzc1LDcgKzE0ODc3NSw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgZnVuY3Rpb24gY29tYmluZShkZXN0LCBzcmMpIHsKICAgICBPYmplY3Qua2V5cyhzcmMpLmZv
ckVhY2goZnVuY3Rpb24obmFtZSkgewotICAgICAgaWYgKF8uaGFzKEpTSElOVC5ibGFja2xpc3Qs
IG5hbWUpKSByZXR1cm47CisgICAgICBpZiAoXy5oYXMoSlNISU5ULmJsb2NrbGlzdCwgbmFtZSkp
IHJldHVybjsKICAgICAgIGRlc3RbbmFtZV0gPSBzcmNbbmFtZV07CiAgICAgfSk7CiAgIH0KQEAg
LTE0OTA2MCw3ICsxNDkwNjAsNyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogICAgICAg
ICAgIGtleSA9IGtleS5zbGljZSgxKTsKICAgICAgICAgICB2YWwgPSBmYWxzZTsKIAotICAgICAg
ICAgIEpTSElOVC5ibGFja2xpc3Rba2V5XSA9IGtleTsKKyAgICAgICAgICBKU0hJTlQuYmxvY2ts
aXN0W2tleV0gPSBrZXk7CiAgICAgICAgICAgZGVsZXRlIHByZWRlZmluZWRba2V5XTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICBwcmVkZWZba2V5XSA9ICh2YWwgPT09ICJ0cnVlIik7CkBA
IC0xNTM4NjcsNyArMTUzODY3LDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKICAgICAg
IEpTSElOVC5lcnJvcnMgPSBbXTsKICAgICAgIEpTSElOVC51bmRlZnMgPSBbXTsKICAgICAgIEpT
SElOVC5pbnRlcm5hbHMgPSBbXTsKLSAgICAgIEpTSElOVC5ibGFja2xpc3QgPSB7fTsKKyAgICAg
IEpTSElOVC5ibG9ja2xpc3QgPSB7fTsKICAgICAgIEpTSElOVC5zY29wZSA9ICIobWFpbikiOwog
ICAgIH0KIApAQCAtMTUzODk2LDcgKzE1Mzg5Niw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24o
KSB7CiAKICAgICAgICAgaWYgKGl0ZW1bMF0gPT09ICItIikgewogICAgICAgICAgIHNsaWNlID0g
aXRlbS5zbGljZSgxKTsKLSAgICAgICAgICBKU0hJTlQuYmxhY2tsaXN0W3NsaWNlXSA9IHNsaWNl
OworICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rbc2xpY2VdID0gc2xpY2U7CiAgICAgICAgICAg
Ly8gcmVtb3ZlIGZyb20gcHJlZGVmaW5lZCBpZiB0aGVyZQogICAgICAgICAgIGRlbGV0ZSBwcmVk
ZWZpbmVkW3NsaWNlXTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE1ODI0NSw3ICsxNTgyNDUsNyBA
QCBleHBvcnRzLnZhbCA9IHsKICAgcHJlZGVmICAgICAgIDogZmFsc2UsCiAKICAgLyoqCi0gICAq
IFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSB3aGl0ZSBsaXN0IG9mIGdsb2Jh
bCB2YXJpYWJsZXMgdGhhdAorICAgKiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5
IGFuIGFsbG93IGxpc3Qgb2YgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0CiAgICAqIGFyZSBub3QgZm9y
bWFsbHkgZGVmaW5lZCBpbiB0aGUgc291cmNlIGNvZGUuIFRoaXMgaXMgbW9zdCB1c2VmdWwgd2hl
bgogICAgKiBjb21iaW5lZCB3aXRoIHRoZSBgdW5kZWZgIG9wdGlvbiBpbiBvcmRlciB0byBzdXBw
cmVzcyB3YXJuaW5ncyBmb3IKICAgICogcHJvamVjdC1zcGVjaWZpYyBnbG9iYWwgdmFyaWFibGVz
LgpAQCAtMTk1NTc2LDcgKzE5NTU3Niw3IEBAIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNp
Zmllcihub2RlKSAKIAl2YXIgcmVnZXhTaW5nbGVFc2NhcGUgPSAvWyInXFxcYlxmXG5cclx0XS87
CiAKIAl2YXIgcmVnZXhEaWdpdCA9IC9bMC05XS87Ci0JdmFyIHJlZ2V4V2hpdGVsaXN0ID0gL1sg
ISMtJlwoLVxbXF0tfl0vOworCXZhciByZWdleEFsbG93bGlzdCA9IC9bICEjLSZcKC1cW1xdLX5d
LzsKIAogCXZhciBqc2VzYyA9IGZ1bmN0aW9uKGFyZ3VtZW50LCBvcHRpb25zKSB7CiAJCS8vIEhh
bmRsZSBvcHRpb25zCkBAIC0xOTU3NTEsNyArMTk1NzUxLDcgQEAgZnVuY3Rpb24gSW1wb3J0TmFt
ZXNwYWNlU3BlY2lmaWVyKG5vZGUpIAogCQkJCX0KIAkJCX0KIAkJCWlmICghb3B0aW9ucy5lc2Nh
cGVFdmVyeXRoaW5nKSB7Ci0JCQkJaWYgKHJlZ2V4V2hpdGVsaXN0LnRlc3QoY2hhcmFjdGVyKSkg
eworCQkJCWlmIChyZWdleEFsbG93bGlzdC50ZXN0KGNoYXJhY3RlcikpIHsKIAkJCQkJLy8gSXTi
gJlzIGEgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBgImAsIGAnYCBvciBg
XGAsCiAJCQkJCS8vIHNvIGRvbuKAmXQgZXNjYXBlIGl0LgogCQkJCQlyZXN1bHQgKz0gY2hhcmFj
dGVyOwpAQCAtMjA5MDgxLDcgKzIwOTA4MSw3IEBAIHZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVy
b3BSZXF1aXJlRGVmYXUKIAogZXhwb3J0cy5jYWxsID0gY2FsbDsKIGV4cG9ydHMuX2NhbGwgPSBf
Y2FsbDsKLWV4cG9ydHMuaXNCbGFja2xpc3RlZCA9IGlzQmxhY2tsaXN0ZWQ7CitleHBvcnRzLmlz
QmxvY2tsaXN0ZWQgPSBpc0Jsb2NrbGlzdGVkOwogZXhwb3J0cy52aXNpdCA9IHZpc2l0OwogZXhw
b3J0cy5za2lwID0gc2tpcDsKIGV4cG9ydHMuc2tpcEtleSA9IHNraXBLZXk7CkBAIC0yMDkxNTcs
OSArMjA5MTU3LDkgQEAgZnVuY3Rpb24gX2NhbGwoZm5zKSB7CiAgIHJldHVybiBmYWxzZTsKIH0K
IAotZnVuY3Rpb24gaXNCbGFja2xpc3RlZCgpIHsKLSAgdmFyIGJsYWNrbGlzdCA9IHRoaXMub3B0
cy5ibGFja2xpc3Q7Ci0gIHJldHVybiBibGFja2xpc3QgJiYgYmxhY2tsaXN0LmluZGV4T2YodGhp
cy5ub2RlLnR5cGUpID4gLTE7CitmdW5jdGlvbiBpc0Jsb2NrbGlzdGVkKCkgeworICB2YXIgYmxv
Y2tsaXN0ID0gdGhpcy5vcHRzLmJsb2NrbGlzdDsKKyAgcmV0dXJuIGJsb2NrbGlzdCAmJiBibG9j
a2xpc3QuaW5kZXhPZih0aGlzLm5vZGUudHlwZSkgPiAtMTsKIH0KIAogZnVuY3Rpb24gdmlzaXQo
KSB7CkBAIC0yMDkxNjcsNyArMjA5MTY3LDcgQEAgZnVuY3Rpb24gdmlzaXQoKSB7CiAgICAgcmV0
dXJuIGZhbHNlOwogICB9CiAKLSAgaWYgKHRoaXMuaXNCbGFja2xpc3RlZCgpKSB7CisgIGlmICh0
aGlzLmlzQmxvY2tsaXN0ZWQoKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC0yMTA4
MjUsNyArMjEwODI1LDcgQEAgZnVuY3Rpb24gc2hvdWxkSWdub3JlS2V5KGtleSkgewogCiAgIGlm
IChrZXkgPT09ICJlbnRlciIgfHwga2V5ID09PSAiZXhpdCIgfHwga2V5ID09PSAic2hvdWxkU2tp
cCIpIHJldHVybiB0cnVlOwogCi0gIGlmIChrZXkgPT09ICJibGFja2xpc3QiIHx8IGtleSA9PT0g
Im5vU2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlzIikgcmV0dXJuIHRydWU7CisgIGlmIChrZXkg
PT09ICJibG9ja2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlz
IikgcmV0dXJuIHRydWU7CiAKICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjIyNTE1LDcgKzIyMjUx
NSw3IEBAIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyAKIAogY29uc3Qg
bGlmZWN5Y2xlTWV0aG9kcyA9IG5ldyBTZXQoWyJjb21wb25lbnRXaWxsVW5tb3VudCIsICJjb21w
b25lbnREaWRNb3VudCIsICJjb21wb25lbnRXaWxsTW91bnQiLCAiY29tcG9uZW50RGlkVXBkYXRl
IiwgImNvbXBvbmVudFdpbGxVcGRhdGUiLCAiY29tcG9uZW50RGlkQ2F0Y2giLCAiY29tcG9uZW50
V2lsbFJlY2VpdmVQcm9wcyJdKTsKIAotY29uc3Qgd2hpdGVsaXN0ZWRQcm9wZXJ0aWVzID0gbmV3
IFNldChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsKK2NvbnN0IGFsbG93bGlzdGVkUHJv
cGVydGllcyA9IG5ldyBTZXQoWyJwcm9wcyIsICJjb250ZXh0IiwgInJlZnMiXSk7CiAKIGZ1bmN0
aW9uIGdldEluaXRpYWxQcm9wcyhyZWFsbSwgY29tcG9uZW50VHlwZSkgewogICBsZXQgcHJvcHNO
YW1lID0gbnVsbDsKQEAgLTIyMjY4NSw3ICsyMjI2ODUsNyBAQCBmdW5jdGlvbiBldmFsdWF0ZUNs
YXNzQ29uc3RydWN0b3IocmVhbG0sCiAgICAgbGV0IGluc3RhbmNlID0gKDAsIF9pbmRleDIuQ29u
c3RydWN0KShyZWFsbSwgY29uc3RydWN0b3JGdW5jLCBbcHJvcHMsIGNvbnRleHRdKTsKICAgICAo
MCwgX2ludmFyaWFudDIuZGVmYXVsdCkoaW5zdGFuY2UgaW5zdGFuY2VvZiBfaW5kZXguT2JqZWN0
VmFsdWUpOwogICAgIGZvciAobGV0IFtwcm9wZXJ0eU5hbWVdIG9mIGluc3RhbmNlLnByb3BlcnRp
ZXMpIHsKLSAgICAgIGlmICghd2hpdGVsaXN0ZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eU5hbWUp
KSB7CisgICAgICBpZiAoIWFsbG93bGlzdGVkUHJvcGVydGllcy5oYXMocHJvcGVydHlOYW1lKSkg
ewogICAgICAgICBpbnN0YW5jZVByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7CiAgICAgICB9
CiAgICAgfQpJbmRleDogV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvd2Vi
LXRvb2xpbmctYmVuY2htYXJrL2NsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL0pldFN0cmVhbTIuMC93ZWItdG9vbGluZy1iZW5jaG1hcmsvY2xpLmpzCShyZXZp
c2lvbiAyNzExMzkpCisrKyBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0cmVhbTIuMC93
ZWItdG9vbGluZy1iZW5jaG1hcmsvY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQwNSwxNSAr
MTA0MDUsMTUgQEAgdHJhdmVyc2UucmVtb3ZlUHJvcGVydGllcyA9IGZ1bmN0aW9uICh0cgogICBy
ZXR1cm4gdHJlZTsKIH07CiAKLWZ1bmN0aW9uIGhhc0JsYWNrbGlzdGVkVHlwZShwYXRoLCBzdGF0
ZSkgeworZnVuY3Rpb24gaGFzQmxvY2tsaXN0ZWRUeXBlKHBhdGgsIHN0YXRlKSB7CiAgIGlmIChw
YXRoLm5vZGUudHlwZSA9PT0gc3RhdGUudHlwZSkgewogICAgIHN0YXRlLmhhcyA9IHRydWU7CiAg
ICAgcGF0aC5zdG9wKCk7CiAgIH0KIH0KIAotdHJhdmVyc2UuaGFzVHlwZSA9IGZ1bmN0aW9uICh0
cmVlLCBzY29wZSwgdHlwZSwgYmxhY2tsaXN0VHlwZXMpIHsKLSAgaWYgKCgwLCBfaW5jbHVkZXMy
LmRlZmF1bHQpKGJsYWNrbGlzdFR5cGVzLCB0cmVlLnR5cGUpKSByZXR1cm4gZmFsc2U7Cit0cmF2
ZXJzZS5oYXNUeXBlID0gZnVuY3Rpb24gKHRyZWUsIHNjb3BlLCB0eXBlLCBibG9ja2xpc3RUeXBl
cykgeworICBpZiAoKDAsIF9pbmNsdWRlczIuZGVmYXVsdCkoYmxvY2tsaXN0VHlwZXMsIHRyZWUu
dHlwZSkpIHJldHVybiBmYWxzZTsKIAogICBpZiAodHJlZS50eXBlID09PSB0eXBlKSByZXR1cm4g
dHJ1ZTsKIApAQCAtMTA0MjMsOCArMTA0MjMsOCBAQCB0cmF2ZXJzZS5oYXNUeXBlID0gZnVuY3Rp
b24gKHRyZWUsIHNjb3BlCiAgIH07CiAKICAgdHJhdmVyc2UodHJlZSwgewotICAgIGJsYWNrbGlz
dDogYmxhY2tsaXN0VHlwZXMsCi0gICAgZW50ZXI6IGhhc0JsYWNrbGlzdGVkVHlwZQorICAgIGJs
b2NrbGlzdDogYmxvY2tsaXN0VHlwZXMsCisgICAgZW50ZXI6IGhhc0Jsb2NrbGlzdGVkVHlwZQog
ICB9LCBzY29wZSwgc3RhdGUpOwogCiAgIHJldHVybiBzdGF0ZS5oYXM7CkBAIC0zNzAxMiw3ICsz
NzAxMiw3IEBAIGZ1bmN0aW9uIFR5cGVkQXJyYXlTcGVjaWVzQ3JlYXRlKHJlYWxtLCAKIHZhciBw
cm9taXNlRXhpc3RzID0gdHlwZW9mIFByb21pc2UgPT09ICdmdW5jdGlvbic7CiAKIC8qIGVzbGlu
dC1kaXNhYmxlIG5vLXVuZGVmICovCi12YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09
ICdvYmplY3QnID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibGFj
a2xpc3QKK3ZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxm
IDogZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlkLWJsb2NrbGlzdAogCiB2YXIgc3lt
Ym9sRXhpc3RzID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCc7CiB2YXIgbWFwRXhpc3Rz
ID0gdHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCc7CkBAIC0xMTM4NDAsNyArMTEzODQwLDcgQEAg
bW9kdWxlLmV4cG9ydHMgPSAie1widmVyc2lvblwiOjMsXCJzb3VyYwogLyogNDExICovCiAvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8qIE1v
b1Rvb2xzOiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLiBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE3IFtWYWxlcmlvIFByb2lldHRp
XShodHRwczovL21vb3Rvb2xzLm5ldC8pLiovIFxuLyohXG5XZWIgQnVpbGQ6IGh0dHBzOi8vbW9v
dG9vbHMubmV0L2NvcmUvYnVpbGRlci9lNDI2YTlhZTcxNjdjNTgwN2IxNzNkNWRlZmY2NzNmY1xu
Ki9cbi8qXG4tLS1cblxubmFtZTogQ29yZVxuXG5kZXNjcmlwdGlvbjogVGhlIGhlYXJ0IG9mIE1v
b1Rvb2xzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY29weXJpZ2h0OiBDb3B5
cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29t
L2thbWljYW5lLykuXG5cbmF1dGhvcnM6IFRoZSBNb29Ub29scyBwcm9kdWN0aW9uIHRlYW0gKGh0
dHA6Ly9tb290b29scy5uZXQvZGV2ZWxvcGVycy8pXG5cbmluc3BpcmF0aW9uOlxuICAtIENsYXNz
IGltcGxlbWVudGF0aW9uIGluc3BpcmVkIGJ5IFtCYXNlLmpzXShodHRwOi8vZGVhbi5lZHdhcmRz
Lm5hbWUvd2VibG9nLzIwMDYvMDMvYmFzZS8pIENvcHlyaWdodCAoYykgMjAwNiBEZWFuIEVkd2Fy
ZHMsIFtHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNl
Lm9yZy9saWNlbnNlcy9sZ3BsLWxpY2Vuc2UucGhwKVxuICAtIFNvbWUgZnVuY3Rpb25hbGl0eSBp
bnNwaXJlZCBieSBbUHJvdG90eXBlLmpzXShodHRwOi8vcHJvdG90eXBlanMub3JnKSBDb3B5cmln
aHQgKGMpIDIwMDUtMjAwNyBTYW0gU3RlcGhlbnNvbiwgW01JVCBMaWNlbnNlXShodHRwOi8vb3Bl
bnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuXG5wcm92aWRlczogW0NvcmUs
IE1vb1Rvb2xzLCBUeXBlLCB0eXBlT2YsIGluc3RhbmNlT2YsIE5hdGl2ZV1cblxuLi4uXG4qL1xu
LyohIE1vb1Rvb2xzOiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLiBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFBy
b2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS4qL1xuKGZ1bmN0aW9uKCl7XG5c
bnRoaXMuTW9vVG9vbHMgPSB7XG5cdHZlcnNpb246ICcxLjYuMCcsXG5cdGJ1aWxkOiAnNTI5NDIy
ODcyYWRmZmY0MDFiOTAxYjhiNmM3Y2E1MTE0ZWU5NWUyYidcbn07XG5cbi8vIHR5cGVPZiwgaW5z
dGFuY2VPZlxuXG52YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0
aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuICdudWxsJztcblx0aWYgKGl0ZW0uJGZhbWlseSAhPSBu
dWxsKSByZXR1cm4gaXRlbS4kZmFtaWx5KCk7XG5cblx0aWYgKGl0ZW0ubm9kZU5hbWUpe1xuXHRc
dGlmIChpdGVtLm5vZGVUeXBlID09IDEpIHJldHVybiAnZWxlbWVudCc7XG5cdFx0aWYgKGl0ZW0u
bm9kZVR5cGUgPT0gMykgcmV0dXJuICgvXFxTLykudGVzdChpdGVtLm5vZGVWYWx1ZSkgPyAndGV4
dG5vZGUnIDogJ3doaXRlc3BhY2UnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLmxlbmd0aCA9
PSAnbnVtYmVyJyl7XG5cdFx0aWYgKCdjYWxsZWUnIGluIGl0ZW0pIHJldHVybiAnYXJndW1lbnRz
Jztcblx0XHRpZiAoJ2l0ZW0nIGluIGl0ZW0pIHJldHVybiAnY29sbGVjdGlvbic7XG5cdH1cblxu
XHRyZXR1cm4gdHlwZW9mIGl0ZW07XG59O1xuXG52YXIgaW5zdGFuY2VPZiA9IHRoaXMuaW5zdGFu
Y2VPZiA9IGZ1bmN0aW9uKGl0ZW0sIG9iamVjdCl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVy
biBmYWxzZTtcblx0dmFyIGNvbnN0cnVjdG9yID0gaXRlbS4kY29uc3RydWN0b3IgfHwgaXRlbS5j
b25zdHJ1Y3Rvcjtcblx0d2hpbGUgKGNvbnN0cnVjdG9yKXtcblx0XHRpZiAoY29uc3RydWN0b3Ig
PT09IG9iamVjdCkgcmV0dXJuIHRydWU7XG5cdFx0Y29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5w
YXJlbnQ7XG5cdH1cblx0Lyo8bHRJRTg+Ki9cblx0aWYgKCFpdGVtLmhhc093blByb3BlcnR5KSBy
ZXR1cm4gZmFsc2U7XG5cdC8qPC9sdElFOD4qL1xuXHRyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIG9i
amVjdDtcbn07XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3du
UHJvcGVydHk7XG5cbi8qPGx0SUU4PiovXG52YXIgZW51bWVyYWJsZXMgPSB0cnVlO1xuZm9yICh2
YXIgaSBpbiB7dG9TdHJpbmc6IDF9KSBlbnVtZXJhYmxlcyA9IG51bGw7XG5pZiAoZW51bWVyYWJs
ZXMpIGVudW1lcmFibGVzID0gWydoYXNPd25Qcm9wZXJ0eScsICd2YWx1ZU9mJywgJ2lzUHJvdG90
eXBlT2YnLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJp
bmcnLCAnY29uc3RydWN0b3InXTtcbmZ1bmN0aW9uIGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtl
eShvYmplY3QsIGZuLCBiaW5kKXtcblx0aWYgKGVudW1lcmFibGVzKSBmb3IgKHZhciBpID0gZW51
bWVyYWJsZXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgayA9IGVudW1lcmFibGVzW2ldO1xuXHRc
dC8vIHNpZ25hdHVyZSBoYXMga2V5LXZhbHVlLCBzbyBvdmVybG9hZFNldHRlciBjYW4gZGlyZWN0
bHkgcGFzcyB0aGVcblx0XHQvLyBtZXRob2QgZnVuY3Rpb24sIHdpdGhvdXQgc3dhcHBpbmcgYXJn
dW1lbnRzLlxuXHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGZuLmNhbGwo
YmluZCwgaywgb2JqZWN0W2tdKTtcblx0fVxufVxuLyo8L2x0SUU4PiovXG5cbi8vIEZ1bmN0aW9u
IG92ZXJsb2FkaW5nXG5cbnZhciBGdW5jdGlvbiA9IHRoaXMuRnVuY3Rpb247XG5cbkZ1bmN0aW9u
LnByb3RvdHlwZS5vdmVybG9hZFNldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBz
ZWxmID0gdGhpcztcblx0cmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmIChhID09IG51bGwp
IHJldHVybiB0aGlzO1xuXHRcdGlmICh1c2VQbHVyYWwgfHwgdHlwZW9mIGEgIT0gJ3N0cmluZycp
e1xuXHRcdFx0Zm9yICh2YXIgayBpbiBhKSBzZWxmLmNhbGwodGhpcywgaywgYVtrXSk7XG5cdFx0
XHQvKjxsdElFOD4qL1xuXHRcdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KGEsIHNlbGYs
IHRoaXMpO1xuXHRcdFx0Lyo8L2x0SUU4PiovXG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuY2Fs
bCh0aGlzLCBhLCBiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG59O1xuXG5GdW5j
dGlvbi5wcm90b3R5cGUub3ZlcmxvYWRHZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2
YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhKXtcblx0XHR2YXIgYXJncywgcmVz
dWx0O1xuXHRcdGlmICh0eXBlb2YgYSAhPSAnc3RyaW5nJykgYXJncyA9IGE7XG5cdFx0ZWxzZSBp
ZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0ZWxzZSBpZiAo
dXNlUGx1cmFsKSBhcmdzID0gW2FdO1xuXHRcdGlmIChhcmdzKXtcblx0XHRcdHJlc3VsdCA9IHt9
O1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSByZXN1bHRbYXJn
c1tpXV0gPSBzZWxmLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJl
c3VsdCA9IHNlbGYuY2FsbCh0aGlzLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0
fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihrZXksIHZhbHVl
KXtcblx0dGhpc1trZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbkZ1bmN0aW9u
LnByb3RvdHlwZS5pbXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpcy5wcm90
b3R5cGVba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG4vLyBGcm9tXG5cbnZh
ciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuQXJyYXkuY29udmVydCA9IGZ1bmN0
aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gW107XG5cdHJldHVybiAoVHlw
ZS5pc0VudW1lcmFibGUoaXRlbSkgJiYgdHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycpID8gKHR5cGVP
ZihpdGVtKSA9PSAnYXJyYXknKSA/IGl0ZW0gOiBzbGljZS5jYWxsKGl0ZW0pIDogW2l0ZW1dO1xu
fTtcblxuRnVuY3Rpb24uY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKHR5cGVP
ZihpdGVtKSA9PSAnZnVuY3Rpb24nKSA/IGl0ZW0gOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBp
dGVtO1xuXHR9O1xufTtcblxuXG5OdW1iZXIuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2
YXIgbnVtYmVyID0gcGFyc2VGbG9hdChpdGVtKTtcblx0cmV0dXJuIGlzRmluaXRlKG51bWJlcikg
PyBudW1iZXIgOiBudWxsO1xufTtcblxuU3RyaW5nLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtc
blx0cmV0dXJuIGl0ZW0gKyAnJztcbn07XG5cblxuXG5GdW5jdGlvbi5mcm9tID0gRnVuY3Rpb24u
Y29udmVydDtcbk51bWJlci5mcm9tID0gTnVtYmVyLmNvbnZlcnQ7XG5TdHJpbmcuZnJvbSA9IFN0
cmluZy5jb252ZXJ0O1xuXG4vLyBoaWRlLCBwcm90ZWN0XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7
XG5cblx0aGlkZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRoaWRkZW4gPSB0cnVlO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdHByb3RlY3Q6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kcHJv
dGVjdGVkID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLy8gVHlwZVxu
XG52YXIgVHlwZSA9IHRoaXMuVHlwZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCl7XG5cdGlmIChu
YW1lKXtcblx0XHR2YXIgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0dmFyIHR5cGVD
aGVjayA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gbG93
ZXIpO1xuXHRcdH07XG5cblx0XHRUeXBlWydpcycgKyBuYW1lXSA9IHR5cGVDaGVjaztcblx0XHRp
ZiAob2JqZWN0ICE9IG51bGwpe1xuXHRcdFx0b2JqZWN0LnByb3RvdHlwZS4kZmFtaWx5ID0gKGZ1
bmN0aW9uKCl7XG5cdFx0XHRcdHJldHVybiBsb3dlcjtcblx0XHRcdH0pLmhpZGUoKTtcblx0XHRc
dFxuXHRcdH1cblx0fVxuXG5cdGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0
b2JqZWN0LmV4dGVuZCh0aGlzKTtcblx0b2JqZWN0LiRjb25zdHJ1Y3RvciA9IFR5cGU7XG5cdG9i
amVjdC5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0O1xuXG5cdHJldHVybiBvYmplY3Q7
XG59O1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5UeXBl
LmlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKGl0ZW0gIT0gbnVsbCAm
JiB0eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicgJiYgdG9TdHJpbmcuY2FsbChpdGVtKSAh
PSAnW29iamVjdCBGdW5jdGlvbl0nICk7XG59O1xuXG52YXIgaG9va3MgPSB7fTtcblxudmFyIGhv
b2tzT2YgPSBmdW5jdGlvbihvYmplY3Qpe1xuXHR2YXIgdHlwZSA9IHR5cGVPZihvYmplY3QucHJv
dG90eXBlKTtcblx0cmV0dXJuIGhvb2tzW3R5cGVdIHx8IChob29rc1t0eXBlXSA9IFtdKTtcbn07
XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9k
ICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cblx0dmFyIGhvb2tzID0gaG9va3NPZih0aGlz
KTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIg
aG9vayA9IGhvb2tzW2ldO1xuXHRcdGlmICh0eXBlT2YoaG9vaykgPT0gJ3R5cGUnKSBpbXBsZW1l
bnQuY2FsbChob29rLCBuYW1lLCBtZXRob2QpO1xuXHRcdGVsc2UgaG9vay5jYWxsKHRoaXMsIG5h
bWUsIG1ldGhvZCk7XG5cdH1cblxuXHR2YXIgcHJldmlvdXMgPSB0aGlzLnByb3RvdHlwZVtuYW1l
XTtcblx0aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXMu
cHJvdG90eXBlW25hbWVdID0gbWV0aG9kO1xuXG5cdGlmICh0aGlzW25hbWVdID09IG51bGwgJiYg
dHlwZU9mKG1ldGhvZCkgPT0gJ2Z1bmN0aW9uJykgZXh0ZW5kLmNhbGwodGhpcywgbmFtZSwgZnVu
Y3Rpb24oaXRlbSl7XG5cdFx0cmV0dXJuIG1ldGhvZC5hcHBseShpdGVtLCBzbGljZS5jYWxsKGFy
Z3VtZW50cywgMSkpO1xuXHR9KTtcbn07XG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbihuYW1lLCBt
ZXRob2Qpe1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cdHZhciBw
cmV2aW91cyA9IHRoaXNbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91
cy4kcHJvdGVjdGVkKSB0aGlzW25hbWVdID0gbWV0aG9kO1xufTtcblxuVHlwZS5pbXBsZW1lbnQo
e1xuXG5cdGltcGxlbWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0ZXh0ZW5k
OiBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRhbGlhczogZnVuY3Rpb24obmFtZSwgZXhp
c3Rpbmcpe1xuXHRcdGltcGxlbWVudC5jYWxsKHRoaXMsIG5hbWUsIHRoaXMucHJvdG90eXBlW2V4
aXN0aW5nXSk7XG5cdH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRtaXJyb3I6IGZ1bmN0aW9uKGhv
b2spe1xuXHRcdGhvb2tzT2YodGhpcykucHVzaChob29rKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fVxuXG59KTtcblxubmV3IFR5cGUoJ1R5cGUnLCBUeXBlKTtcblxuLy8gRGVmYXVsdCBUeXBlc1xu
XG52YXIgZm9yY2UgPSBmdW5jdGlvbihuYW1lLCBvYmplY3QsIG1ldGhvZHMpe1xuXHR2YXIgaXNU
eXBlID0gKG9iamVjdCAhPSBPYmplY3QpLFxuXHRcdHByb3RvdHlwZSA9IG9iamVjdC5wcm90b3R5
cGU7XG5cblx0aWYgKGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUobmFtZSwgb2JqZWN0KTtcblxu
XHRmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHR2
YXIga2V5ID0gbWV0aG9kc1tpXSxcblx0XHRcdGdlbmVyaWMgPSBvYmplY3Rba2V5XSxcblx0XHRc
dHByb3RvID0gcHJvdG90eXBlW2tleV07XG5cblx0XHRpZiAoZ2VuZXJpYykgZ2VuZXJpYy5wcm90
ZWN0KCk7XG5cdFx0aWYgKGlzVHlwZSAmJiBwcm90bykgb2JqZWN0LmltcGxlbWVudChrZXksIHBy
b3RvLnByb3RlY3QoKSk7XG5cdH1cblxuXHRpZiAoaXNUeXBlKXtcblx0XHR2YXIgbWV0aG9kc0Vu
dW1lcmFibGUgPSBwcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUobWV0aG9kc1swXSk7XG5c
dFx0b2JqZWN0LmZvckVhY2hNZXRob2QgPSBmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoIW1ldGhv
ZHNFbnVtZXJhYmxlKSBmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdFx0Zm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVttZXRob2RzW2ldXSwg
bWV0aG9kc1tpXSk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gcHJvdG90eXBlKSBm
bi5jYWxsKHByb3RvdHlwZSwgcHJvdG90eXBlW2tleV0sIGtleSk7XG5cdFx0fTtcblx0fVxuXG5c
dHJldHVybiBmb3JjZTtcbn07XG5cbmZvcmNlKCdTdHJpbmcnLCBTdHJpbmcsIFtcblx0J2NoYXJB
dCcsICdjaGFyQ29kZUF0JywgJ2NvbmNhdCcsICdjb250YWlucycsICdpbmRleE9mJywgJ2xhc3RJ
bmRleE9mJywgJ21hdGNoJywgJ3F1b3RlJywgJ3JlcGxhY2UnLCAnc2VhcmNoJyxcblx0J3NsaWNl
JywgJ3NwbGl0JywgJ3N1YnN0cicsICdzdWJzdHJpbmcnLCAndHJpbScsICd0b0xvd2VyQ2FzZScs
ICd0b1VwcGVyQ2FzZSdcbl0pKCdBcnJheScsIEFycmF5LCBbXG5cdCdwb3AnLCAncHVzaCcsICdy
ZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0Jywg
J2pvaW4nLCAnc2xpY2UnLFxuXHQnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdmaWx0ZXInLCAn
Zm9yRWFjaCcsICdldmVyeScsICdtYXAnLCAnc29tZScsICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQn
LCAnY29udGFpbnMnXG5dKSgnTnVtYmVyJywgTnVtYmVyLCBbXG5cdCd0b0V4cG9uZW50aWFsJywg
J3RvRml4ZWQnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9QcmVjaXNpb24nXG5dKSgnRnVuY3Rpb24n
LCBGdW5jdGlvbiwgW1xuXHQnYXBwbHknLCAnY2FsbCcsICdiaW5kJ1xuXSkoJ1JlZ0V4cCcsIFJl
Z0V4cCwgW1xuXHQnZXhlYycsICd0ZXN0J1xuXSkoJ09iamVjdCcsIE9iamVjdCwgW1xuXHQnY3Jl
YXRlJywgJ2RlZmluZVByb3BlcnR5JywgJ2RlZmluZVByb3BlcnRpZXMnLCAna2V5cycsXG5cdCdn
ZXRQcm90b3R5cGVPZicsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVy
dHlOYW1lcycsXG5cdCdwcmV2ZW50RXh0ZW5zaW9ucycsICdpc0V4dGVuc2libGUnLCAnc2VhbCcs
ICdpc1NlYWxlZCcsICdmcmVlemUnLCAnaXNGcm96ZW4nXG5dKSgnRGF0ZScsIERhdGUsIFsnbm93
J10pO1xuXG5PYmplY3QuZXh0ZW5kID0gZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCk7XG5cbkRhdGUu
ZXh0ZW5kKCdub3cnLCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKyhuZXcgRGF0ZSk7XG59KTtcblxu
bmV3IFR5cGUoJ0Jvb2xlYW4nLCBCb29sZWFuKTtcblxuLy8gZml4ZXMgTmFOIHJldHVybmluZyBh
cyBOdW1iZXJcblxuTnVtYmVyLnByb3RvdHlwZS4kZmFtaWx5ID0gZnVuY3Rpb24oKXtcblx0cmV0
dXJuIGlzRmluaXRlKHRoaXMpID8gJ251bWJlcicgOiAnbnVsbCc7XG59LmhpZGUoKTtcblxuLy8g
TnVtYmVyLnJhbmRvbVxuXG5OdW1iZXIuZXh0ZW5kKCdyYW5kb20nLCBmdW5jdGlvbihtaW4sIG1h
eCl7XG5cdHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkg
KyBtaW4pO1xufSk7XG5cbi8vIGZvckVhY2gsIGVhY2gsIGtleXNcblxuQXJyYXkuaW1wbGVtZW50
KHtcblxuXHQvKjwhRVM1PiovXG5cdGZvckVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRm
b3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmIChp
IGluIHRoaXMpIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHR9LFxu
XHQvKjwvIUVTNT4qL1xuXG5cdGVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRBcnJheS5m
b3JFYWNoKHRoaXMsIGZuLCBiaW5kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
T2JqZWN0LmV4dGVuZCh7XG5cblx0a2V5czogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIga2V5
cyA9IFtdO1xuXHRcdGZvciAodmFyIGsgaW4gb2JqZWN0KXtcblx0XHRcdGlmIChoYXNPd25Qcm9w
ZXJ0eS5jYWxsKG9iamVjdCwgaykpIGtleXMucHVzaChrKTtcblx0XHR9XG5cdFx0Lyo8bHRJRTg+
Ki9cblx0XHRmb3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmdW5jdGlvbihrKXtc
blx0XHRcdGtleXMucHVzaChrKTtcblx0XHR9KTtcblx0XHQvKjwvbHRJRTg+Ki9cblx0XHRyZXR1
cm4ga2V5cztcblx0fSxcblxuXHRmb3JFYWNoOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtc
blx0XHRPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdGZu
LmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9KTtcblx0fVxuXG59
KTtcblxuT2JqZWN0LmVhY2ggPSBPYmplY3QuZm9yRWFjaDtcblxuXG4vLyBBcnJheSAmIE9iamVj
dCBjbG9uaW5nLCBPYmplY3QgbWVyZ2luZyBhbmQgYXBwZW5kaW5nXG5cbnZhciBjbG9uZU9mID0g
ZnVuY3Rpb24oaXRlbSl7XG5cdHN3aXRjaCAodHlwZU9mKGl0ZW0pKXtcblx0XHRjYXNlICdhcnJh
eSc6IHJldHVybiBpdGVtLmNsb25lKCk7XG5cdFx0Y2FzZSAnb2JqZWN0JzogcmV0dXJuIE9iamVj
dC5jbG9uZShpdGVtKTtcblx0XHRkZWZhdWx0OiByZXR1cm4gaXRlbTtcblx0fVxufTtcblxuQXJy
YXkuaW1wbGVtZW50KCdjbG9uZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBpID0gdGhpcy5sZW5ndGgs
IGNsb25lID0gbmV3IEFycmF5KGkpO1xuXHR3aGlsZSAoaS0tKSBjbG9uZVtpXSA9IGNsb25lT2Yo
dGhpc1tpXSk7XG5cdHJldHVybiBjbG9uZTtcbn0pO1xuXG52YXIgbWVyZ2VPbmUgPSBmdW5jdGlv
bihzb3VyY2UsIGtleSwgY3VycmVudCl7XG5cdHN3aXRjaCAodHlwZU9mKGN1cnJlbnQpKXtcblx0
XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0aWYgKHR5cGVPZihzb3VyY2Vba2V5XSkgPT0gJ29iamVj
dCcpIE9iamVjdC5tZXJnZShzb3VyY2Vba2V5XSwgY3VycmVudCk7XG5cdFx0XHRlbHNlIHNvdXJj
ZVtrZXldID0gT2JqZWN0LmNsb25lKGN1cnJlbnQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAn
YXJyYXknOiBzb3VyY2Vba2V5XSA9IGN1cnJlbnQuY2xvbmUoKTsgYnJlYWs7XG5cdFx0ZGVmYXVs
dDogc291cmNlW2tleV0gPSBjdXJyZW50O1xuXHR9XG5cdHJldHVybiBzb3VyY2U7XG59O1xuXG5P
YmplY3QuZXh0ZW5kKHtcblxuXHRtZXJnZTogZnVuY3Rpb24oc291cmNlLCBrLCB2KXtcblx0XHRp
ZiAodHlwZU9mKGspID09ICdzdHJpbmcnKSByZXR1cm4gbWVyZ2VPbmUoc291cmNlLCBrLCB2KTtc
blx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xu
XHRcdFx0dmFyIG9iamVjdCA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBv
YmplY3QpIG1lcmdlT25lKHNvdXJjZSwga2V5LCBvYmplY3Rba2V5XSk7XG5cdFx0fVxuXHRcdHJl
dHVybiBzb3VyY2U7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFy
IGNsb25lID0ge307XG5cdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgY2xvbmVba2V5XSA9IGNs
b25lT2Yob2JqZWN0W2tleV0pO1xuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRhcHBlbmQ6
IGZ1bmN0aW9uKG9yaWdpbmFsKXtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5s
ZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGV4dGVuZGVkID0gYXJndW1lbnRzW2ldIHx8
IHt9O1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGV4dGVuZGVkKSBvcmlnaW5hbFtrZXldID0gZXh0
ZW5kZWRba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsO1xuXHR9XG5cbn0pO1xuXG4v
LyBPYmplY3QtbGVzcyB0eXBlc1xuXG5bJ09iamVjdCcsICdXaGl0ZVNwYWNlJywgJ1RleHROb2Rl
JywgJ0NvbGxlY3Rpb24nLCAnQXJndW1lbnRzJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0bmV3
IFR5cGUobmFtZSk7XG59KTtcblxuLy8gVW5pcXVlIElEXG5cbnZhciBVSUQgPSBEYXRlLm5vdygp
O1xuXG5TdHJpbmcuZXh0ZW5kKCd1bmlxdWVJRCcsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiAoVUlE
KyspLnRvU3RyaW5nKDM2KTtcbn0pO1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBB
cnJheVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgQXJyYXkgUHJvdG90eXBlcyBsaWtlIGVhY2gs
IGNvbnRhaW5zLCBhbmQgZXJhc2UuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW1R5cGVdXG5cbnByb3ZpZGVzOiBBcnJheVxuXG4uLi5cbiovXG5cbkFycmF5Lmlt
cGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRldmVyeTogZnVuY3Rpb24oZm4sIGJpbmQpe1xu
XHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xu
XHRcdFx0aWYgKChpIGluIHRoaXMpICYmICFmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMp
KSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGZpbHRl
cjogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0gW107XG5cdFx0Zm9yICh2
YXIgdmFsdWUsIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspIGlmIChp
IGluIHRoaXMpe1xuXHRcdFx0dmFsdWUgPSB0aGlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmlu
ZCwgdmFsdWUsIGksIHRoaXMpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1
cm4gcmVzdWx0cztcblx0fSxcblxuXHRpbmRleE9mOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0
XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDA7XG5cdFx0Zm9yICh2YXIgaSA9IChmcm9t
IDwgMCkgPyBNYXRoLm1heCgwLCBsZW5ndGggKyBmcm9tKSA6IGZyb20gfHwgMDsgaSA8IGxlbmd0
aDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTtcblx0XHR9XG5c
dFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZh
ciBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4gMCwgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG5c
dFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlz
KSByZXN1bHRzW2ldID0gZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24oZm4sIGJpbmQpe1xu
XHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xu
XHRcdFx0aWYgKChpIGluIHRoaXMpICYmIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykp
IHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdC8qPC8hRVM1
PiovXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0
aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0gIT0gbnVsbDtcblx0XHR9KTtcblx0fSxcblxu
XHRpbnZva2U6IGZ1bmN0aW9uKG1ldGhvZE5hbWUpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuc2xp
Y2UoYXJndW1lbnRzLCAxKTtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oaXRlbSl7XG5c
dFx0XHRyZXR1cm4gaXRlbVttZXRob2ROYW1lXS5hcHBseShpdGVtLCBhcmdzKTtcblx0XHR9KTtc
blx0fSxcblxuXHRhc3NvY2lhdGU6IGZ1bmN0aW9uKGtleXMpe1xuXHRcdHZhciBvYmogPSB7fSwg
bGVuZ3RoID0gTWF0aC5taW4odGhpcy5sZW5ndGgsIGtleXMubGVuZ3RoKTtcblx0XHRmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBvYmpba2V5c1tpXV0gPSB0aGlzW2ldO1xuXHRcdHJl
dHVybiBvYmo7XG5cdH0sXG5cblx0bGluazogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgcmVz
dWx0ID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkr
Kyl7XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHRcdFx0aWYgKG9iamVjdFtr
ZXldKHRoaXNbaV0pKXtcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IHRoaXNbaV07XG5cdFx0XHRc
dFx0ZGVsZXRlIG9iamVjdFtrZXldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0
XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0
aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHJldHVybiB0aGlzLmluZGV4T2YoaXRlbSwgZnJvbSkgIT0g
LTE7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dGhpcy5wdXNoLmFw
cGx5KHRoaXMsIGFycmF5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRMYXN0OiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1t0aGlzLmxlbmd0aCAt
IDFdIDogbnVsbDtcblx0fSxcblxuXHRnZXRSYW5kb206IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
ICh0aGlzLmxlbmd0aCkgPyB0aGlzW051bWJlci5yYW5kb20oMCwgdGhpcy5sZW5ndGggLSAxKV0g
OiBudWxsO1xuXHR9LFxuXG5cdGluY2x1ZGU6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICghdGhp
cy5jb250YWlucyhpdGVtKSkgdGhpcy5wdXNoKGl0ZW0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGNvbWJpbmU6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9
IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5pbmNsdWRlKGFycmF5W2ldKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0Zm9yICh2
YXIgaSA9IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSB0
aGlzLnNwbGljZShpLCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZW1w
dHk6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGZsYXR0ZW46IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFycmF5ID0gW107XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIg
dHlwZSA9IHR5cGVPZih0aGlzW2ldKTtcblx0XHRcdGlmICh0eXBlID09ICdudWxsJykgY29udGlu
dWU7XG5cdFx0XHRhcnJheSA9IGFycmF5LmNvbmNhdCgodHlwZSA9PSAnYXJyYXknIHx8IHR5cGUg
PT0gJ2NvbGxlY3Rpb24nIHx8IHR5cGUgPT0gJ2FyZ3VtZW50cycgfHwgaW5zdGFuY2VPZih0aGlz
W2ldLCBBcnJheSkpID8gQXJyYXkuZmxhdHRlbih0aGlzW2ldKSA6IHRoaXNbaV0pO1xuXHRcdH1c
blx0XHRyZXR1cm4gYXJyYXk7XG5cdH0sXG5cblx0cGljazogZnVuY3Rpb24oKXtcblx0XHRmb3Ig
KHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICh0aGlz
W2ldICE9IG51bGwpIHJldHVybiB0aGlzW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0
fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCAh
PSAzKSByZXR1cm4gbnVsbDtcblx0XHR2YXIgcmdiID0gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUp
e1xuXHRcdFx0aWYgKHZhbHVlLmxlbmd0aCA9PSAxKSB2YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJl
dHVybiBwYXJzZUludCh2YWx1ZSwgMTYpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAoYXJyYXkpID8g
cmdiIDogJ3JnYignICsgcmdiICsgJyknO1xuXHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihh
cnJheSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7XG5cdFx0aWYgKHRo
aXMubGVuZ3RoID09IDQgJiYgdGhpc1szXSA9PSAwICYmICFhcnJheSkgcmV0dXJuICd0cmFuc3Bh
cmVudCc7XG5cdFx0dmFyIGhleCA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsr
KXtcblx0XHRcdHZhciBiaXQgPSAodGhpc1tpXSAtIDApLnRvU3RyaW5nKDE2KTtcblx0XHRcdGhl
eC5wdXNoKChiaXQubGVuZ3RoID09IDEpID8gJzAnICsgYml0IDogYml0KTtcblx0XHR9XG5cdFx0
cmV0dXJuIChhcnJheSkgPyBoZXggOiAnIycgKyBoZXguam9pbignJyk7XG5cdH1cblxufSk7XG5c
blxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ1bmN0aW9uXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBG
dW5jdGlvbiBQcm90b3R5cGVzIGxpa2UgY3JlYXRlLCBiaW5kLCBwYXNzLCBhbmQgZGVsYXkuXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRl
czogRnVuY3Rpb25cblxuLi4uXG4qL1xuXG5GdW5jdGlvbi5leHRlbmQoe1xuXG5cdGF0dGVtcHQ6
IGZ1bmN0aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBhcmd1bWVudHNbaV0oKTtc
blx0XHRcdH0gY2F0Y2ggKGUpe31cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxufSk7
XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oYXJncywgYmlu
ZCl7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLmFwcGx5KGJpbmQsIEFycmF5LmNvbnZl
cnQoYXJncykpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxu
XG5cdC8qPCFFUzUtYmluZD4qL1xuXHRiaW5kOiBmdW5jdGlvbih0aGF0KXtcblx0XHR2YXIgc2Vs
ZiA9IHRoaXMsXG5cdFx0XHRhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBBcnJheS5zbGlj
ZShhcmd1bWVudHMsIDEpIDogbnVsbCxcblx0XHRcdEYgPSBmdW5jdGlvbigpe307XG5cblx0XHR2
YXIgYm91bmQgPSBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIGNvbnRleHQgPSB0aGF0LCBsZW5ndGgg
PSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0aWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCl7XG5c
dFx0XHRcdEYucHJvdG90eXBlID0gc2VsZi5wcm90b3R5cGU7XG5cdFx0XHRcdGNvbnRleHQgPSBu
ZXcgRjtcblx0XHRcdH1cblx0XHRcdHZhciByZXN1bHQgPSAoIWFyZ3MgJiYgIWxlbmd0aClcblx0
XHRcdFx0PyBzZWxmLmNhbGwoY29udGV4dClcblx0XHRcdFx0OiBzZWxmLmFwcGx5KGNvbnRleHQs
IGFyZ3MgJiYgbGVuZ3RoID8gYXJncy5jb25jYXQoQXJyYXkuc2xpY2UoYXJndW1lbnRzKSkgOiBh
cmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gY29udGV4dCA9PSB0aGF0ID8gcmVzdWx0
IDogY29udGV4dDtcblx0XHR9O1xuXHRcdHJldHVybiBib3VuZDtcblx0fSxcblx0Lyo8LyFFUzUt
YmluZD4qL1xuXG5cdHBhc3M6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHZhciBzZWxmID0g
dGhpcztcblx0XHRpZiAoYXJncyAhPSBudWxsKSBhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtc
blx0XHRyZXR1cm4gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBzZWxmLmFwcGx5KGJpbmQsIGFy
Z3MgfHwgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9LFxuXG5cdGRlbGF5OiBmdW5jdGlvbihkZWxh
eSwgYmluZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldFRpbWVvdXQodGhpcy5wYXNzKChhcmdzID09
IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgZGVsYXkpO1xuXHR9LFxuXG5cdHBlcmlvZGljYWw6
IGZ1bmN0aW9uKHBlcmlvZGljYWwsIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRJbnRlcnZh
bCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBwZXJpb2RpY2Fs
KTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogTnVtYmVyXG5cbmRlc2NyaXB0
aW9uOiBDb250YWlucyBOdW1iZXIgUHJvdG90eXBlcyBsaWtlIGxpbWl0LCByb3VuZCwgdGltZXMs
IGFuZCBjZWlsLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5
cGVcblxucHJvdmlkZXM6IE51bWJlclxuXG4uLi5cbiovXG5cbk51bWJlci5pbXBsZW1lbnQoe1xu
XG5cdGxpbWl0OiBmdW5jdGlvbihtaW4sIG1heCl7XG5cdFx0cmV0dXJuIE1hdGgubWluKG1heCwg
TWF0aC5tYXgobWluLCB0aGlzKSk7XG5cdH0sXG5cblx0cm91bmQ6IGZ1bmN0aW9uKHByZWNpc2lv
bil7XG5cdFx0cHJlY2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKS50b0ZpeGVk
KHByZWNpc2lvbiA8IDAgPyAtcHJlY2lzaW9uIDogMCk7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQo
dGhpcyAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG5cdH0sXG5cblx0dGltZXM6IGZ1bmN0aW9u
KGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXM7IGkrKykgZm4uY2FsbChi
aW5kLCBpLCB0aGlzKTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0
XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH1cblxufSk7XG5cbk51bWJl
ci5hbGlhcygnZWFjaCcsICd0aW1lcycpO1xuXG4oZnVuY3Rpb24obWF0aCl7XG5cbnZhciBtZXRo
b2RzID0ge307XG5cbm1hdGguZWFjaChmdW5jdGlvbihuYW1lKXtcblx0aWYgKCFOdW1iZXJbbmFt
ZV0pIG1ldGhvZHNbbmFtZV0gPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBNYXRoW25hbWVdLmFw
cGx5KG51bGwsIFt0aGlzXS5jb25jYXQoQXJyYXkuY29udmVydChhcmd1bWVudHMpKSk7XG5cdH07
XG59KTtcblxuTnVtYmVyLmltcGxlbWVudChtZXRob2RzKTtcblxufSkoWydhYnMnLCAnYWNvcycs
ICdhc2luJywgJ2F0YW4nLCAnYXRhbjInLCAnY2VpbCcsICdjb3MnLCAnZXhwJywgJ2Zsb29yJywg
J2xvZycsICdtYXgnLCAnbWluJywgJ3BvdycsICdzaW4nLCAnc3FydCcsICd0YW4nXSk7XG5cbi8q
XG4tLS1cblxubmFtZTogU3RyaW5nXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBTdHJpbmcgUHJv
dG90eXBlcyBsaWtlIGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgdGVzdCwgYW5kIHRvSW50LlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlLCBBcnJheV1cblxu
cHJvdmlkZXM6IFN0cmluZ1xuXG4uLi5cbiovXG5cblN0cmluZy5pbXBsZW1lbnQoe1xuXG5cdC8v
PCFFUzY+XG5cdGNvbnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIGluZGV4KXtcblx0XHRyZXR1cm4g
KGluZGV4ID8gU3RyaW5nKHRoaXMpLnNsaWNlKGluZGV4KSA6IFN0cmluZyh0aGlzKSkuaW5kZXhP
ZihzdHJpbmcpID4gLTE7XG5cdH0sXG5cdC8vPC8hRVM2PlxuXG5cdHRlc3Q6IGZ1bmN0aW9uKHJl
Z2V4LCBwYXJhbXMpe1xuXHRcdHJldHVybiAoKHR5cGVPZihyZWdleCkgPT0gJ3JlZ2V4cCcpID8g
cmVnZXggOiBuZXcgUmVnRXhwKCcnICsgcmVnZXgsIHBhcmFtcykpLnRlc3QodGhpcyk7XG5cdH0s
XG5cblx0dHJpbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2Uo
L15cXHMrfFxccyskL2csICcnKTtcblx0fSxcblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG5cdH0sXG5c
blx0Y2FtZWxDYXNlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFj
ZSgvLVxcRC9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2guY2hhckF0KDEp
LnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0aHlwaGVuYXRlOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24obWF0
Y2gpe1xuXHRcdFx0cmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSk7
XG5cdFx0fSk7XG5cdH0sXG5cblx0Y2FwaXRhbGl6ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
U3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xcYlthLXpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRc
dHJldHVybiBtYXRjaC50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGVzY2FwZVJl
Z0V4cDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLyhbLS4q
Kz9eJHt9KCl8W1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1
bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0
fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMp
O1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIGhleCA9IFN0
cmluZyh0aGlzKS5tYXRjaCgvXiM/KFxcd3sxLDJ9KShcXHd7MSwyfSkoXFx3ezEsMn0pJC8pO1xu
XHRcdHJldHVybiAoaGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1JnYihhcnJheSkgOiBudWxsO1xu
XHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIHJnYiA9IFN0cmlu
Zyh0aGlzKS5tYXRjaCgvXFxkezEsM30vZyk7XG5cdFx0cmV0dXJuIChyZ2IpID8gcmdiLnJnYlRv
SGV4KGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0c3Vic3RpdHV0ZTogZnVuY3Rpb24ob2JqZWN0
LCByZWdleHApe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZShyZWdleHAgfHwgKC9c
XFxcP1xceyhbXnt9XSspXFx9L2cpLCBmdW5jdGlvbihtYXRjaCwgbmFtZSl7XG5cdFx0XHRpZiAo
bWF0Y2guY2hhckF0KDApID09ICdcXFxcJykgcmV0dXJuIG1hdGNoLnNsaWNlKDEpO1xuXHRcdFx0
cmV0dXJuIChvYmplY3RbbmFtZV0gIT0gbnVsbCkgPyBvYmplY3RbbmFtZV0gOiAnJztcblx0XHR9
KTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogQnJvd3NlclxuXG5kZXNjcmlw
dGlvbjogVGhlIEJyb3dzZXIgT2JqZWN0LiBDb250YWlucyBCcm93c2VyIGluaXRpYWxpemF0aW9u
LCBXaW5kb3cgYW5kIERvY3VtZW50LCBhbmQgdGhlIEJyb3dzZXIgSGFzaC5cblxubGljZW5zZTog
TUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIEZ1bmN0aW9uLCBOdW1iZXIs
IFN0cmluZ11cblxucHJvdmlkZXM6IFtCcm93c2VyLCBXaW5kb3csIERvY3VtZW50XVxuXG4uLi5c
biovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xudmFy
IHdpbmRvdyA9IGRvY3VtZW50LndpbmRvdyA9IHRoaXM7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9u
KHVhLCBwbGF0Zm9ybSl7XG5cdHVhID0gdWEudG9Mb3dlckNhc2UoKTtcblx0cGxhdGZvcm0gPSAo
cGxhdGZvcm0gPyBwbGF0Zm9ybS50b0xvd2VyQ2FzZSgpIDogJycpO1xuXG5cdC8vIGNocm9tZSBp
cyBpbmNsdWRlZCBpbiB0aGUgZWRnZSBVQSwgc28gbmVlZCB0byBjaGVjayBmb3IgZWRnZSBmaXJz
dCxcblx0Ly8gYmVmb3JlIGNoZWNraW5nIGlmIGl0J3MgY2hyb21lLlxuXHR2YXIgVUEgPSB1YS5t
YXRjaCgvKGVkZ2UpW1xcc1xcLzpdKFtcXHdcXGRcXC5dKykvKTtcblx0aWYgKCFVQSl7XG5cdFx0
VUEgPSB1YS5tYXRjaCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21lfHRyaWRlbnR8Y3Jpb3N8dmVy
c2lvbilbXFxzXFwvOl0oW1xcd1xcZFxcLl0rKT8uKj8oc2FmYXJpfCg/OnJ2W1xcc1xcLzpdfHZl
cnNpb25bXFxzXFwvOl0pKFtcXHdcXGRcXC5dKyl8JCkvKSB8fCBbbnVsbCwgJ3Vua25vd24nLCAw
XTtcblx0fVxuXG5cdGlmIChVQVsxXSA9PSAndHJpZGVudCcpe1xuXHRcdFVBWzFdID0gJ2llJztc
blx0XHRpZiAoVUFbNF0pIFVBWzJdID0gVUFbNF07XG5cdH0gZWxzZSBpZiAoVUFbMV0gPT0gJ2Ny
aW9zJyl7XG5cdFx0VUFbMV0gPSAnY2hyb21lJztcblx0fVxuXG5cdHBsYXRmb3JtID0gdWEubWF0
Y2goL2lwKD86YWR8b2R8aG9uZSkvKSA/ICdpb3MnIDogKHVhLm1hdGNoKC8oPzp3ZWJvc3xhbmRy
b2lkKS8pIHx8IHVhLm1hdGNoKC9tYWN8d2lufGxpbnV4LykgfHwgWydvdGhlciddKVswXTtcblx0
aWYgKHBsYXRmb3JtID09ICd3aW4nKSBwbGF0Zm9ybSA9ICd3aW5kb3dzJztcblxuXHRyZXR1cm4g
e1xuXHRcdGV4dGVuZDogRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCxcblx0XHRuYW1lOiAoVUFb
MV0gPT0gJ3ZlcnNpb24nKSA/IFVBWzNdIDogVUFbMV0sXG5cdFx0dmVyc2lvbjogcGFyc2VGbG9h
dCgoVUFbMV0gPT0gJ29wZXJhJyAmJiBVQVs0XSkgPyBVQVs0XSA6IFVBWzJdKSxcblx0XHRwbGF0
Zm9ybTogcGxhdGZvcm1cblx0fTtcbn07XG5cbnZhciBCcm93c2VyID0gdGhpcy5Ccm93c2VyID0g
cGFyc2UobmF2aWdhdG9yLnVzZXJBZ2VudCwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuaWYgKEJy
b3dzZXIubmFtZSA9PSAnaWUnICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSl7XG5cdEJyb3dzZXIu
dmVyc2lvbiA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxuQnJvd3Nlci5leHRlbmQoe1xu
XHRGZWF0dXJlczoge1xuXHRcdHhwYXRoOiAhIShkb2N1bWVudC5ldmFsdWF0ZSksXG5cdFx0YWly
OiAhISh3aW5kb3cucnVudGltZSksXG5cdFx0cXVlcnk6ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0
b3IpLFxuXHRcdGpzb246ICEhKHdpbmRvdy5KU09OKVxuXHR9LFxuXHRwYXJzZVVBOiBwYXJzZVxu
fSk7XG5cblxuXG4vLyBSZXF1ZXN0XG5cbkJyb3dzZXIuUmVxdWVzdCA9IChmdW5jdGlvbigpe1xu
XG5cdHZhciBYTUxIVFRQID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IFhNTEh0dHBSZXF1
ZXN0KCk7XG5cdH07XG5cblx0dmFyIE1TWE1MMiA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5l
dyBBY3RpdmVYT2JqZWN0KCdNU1hNTDIuWE1MSFRUUCcpO1xuXHR9O1xuXG5cdHZhciBNU1hNTCA9
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1M
SFRUUCcpO1xuXHR9O1xuXG5cdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5c
dFx0WE1MSFRUUCgpO1xuXHRcdHJldHVybiBYTUxIVFRQO1xuXHR9LCBmdW5jdGlvbigpe1xuXHRc
dE1TWE1MMigpO1xuXHRcdHJldHVybiBNU1hNTDI7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNY
TUwoKTtcblx0XHRyZXR1cm4gTVNYTUw7XG5cdH0pO1xuXG59KSgpO1xuXG5Ccm93c2VyLkZlYXR1
cmVzLnhociA9ICEhKEJyb3dzZXIuUmVxdWVzdCk7XG5cblxuXG4vLyBTdHJpbmcgc2NyaXB0c1xu
XG5Ccm93c2VyLmV4ZWMgPSBmdW5jdGlvbih0ZXh0KXtcblx0aWYgKCF0ZXh0KSByZXR1cm4gdGV4
dDtcblx0aWYgKHdpbmRvdy5leGVjU2NyaXB0KXtcblx0XHR3aW5kb3cuZXhlY1NjcmlwdCh0ZXh0
KTtcblx0fSBlbHNlIHtcblx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
c2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3Jp
cHQnKTtcblx0XHRzY3JpcHQudGV4dCA9IHRleHQ7XG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRD
aGlsZChzY3JpcHQpO1xuXHRcdGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0
fVxuXHRyZXR1cm4gdGV4dDtcbn07XG5cblN0cmluZy5pbXBsZW1lbnQoJ3N0cmlwU2NyaXB0cycs
IGZ1bmN0aW9uKGV4ZWMpe1xuXHR2YXIgc2NyaXB0cyA9ICcnO1xuXHR2YXIgdGV4dCA9IHRoaXMu
cmVwbGFjZSgvPHNjcmlwdFtePl0qPihbXFxzXFxTXSo/KTxcXC9zY3JpcHQ+L2dpLCBmdW5jdGlv
bihhbGwsIGNvZGUpe1xuXHRcdHNjcmlwdHMgKz0gY29kZSArICdcXG4nO1xuXHRcdHJldHVybiAn
Jztcblx0fSk7XG5cdGlmIChleGVjID09PSB0cnVlKSBCcm93c2VyLmV4ZWMoc2NyaXB0cyk7XG5c
dGVsc2UgaWYgKHR5cGVPZihleGVjKSA9PSAnZnVuY3Rpb24nKSBleGVjKHNjcmlwdHMsIHRleHQp
O1xuXHRyZXR1cm4gdGV4dDtcbn0pO1xuXG4vLyBXaW5kb3csIERvY3VtZW50XG5cbkJyb3dzZXIu
ZXh0ZW5kKHtcblx0RG9jdW1lbnQ6IHRoaXMuRG9jdW1lbnQsXG5cdFdpbmRvdzogdGhpcy5XaW5k
b3csXG5cdEVsZW1lbnQ6IHRoaXMuRWxlbWVudCxcblx0RXZlbnQ6IHRoaXMuRXZlbnRcbn0pO1xu
XG50aGlzLldpbmRvdyA9IHRoaXMuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ1dpbmRvdycsIGZ1
bmN0aW9uKCl7fSk7XG5cbnRoaXMuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ3dpbmRvdycp
LmhpZGUoKTtcblxuV2luZG93Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHR3aW5k
b3dbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxudGhpcy5Eb2N1bWVudCA9IGRvY3VtZW50LiRjb25z
dHJ1Y3RvciA9IG5ldyBUeXBlKCdEb2N1bWVudCcsIGZ1bmN0aW9uKCl7fSk7XG5cbmRvY3VtZW50
LiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdkb2N1bWVudCcpLmhpZGUoKTtcblxuRG9jdW1l
bnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGRvY3VtZW50W25hbWVdID0gbWV0
aG9kO1xufSk7XG5cbmRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5p
ZiAoIWRvY3VtZW50LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnaGVhZCcpWzBdO1xuXG5pZiAoZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHRyeSB7XG5c
dGRvY3VtZW50LmV4ZWNDb21tYW5kKCdCYWNrZ3JvdW5kSW1hZ2VDYWNoZScsIGZhbHNlLCB0cnVl
KTtcbn0gY2F0Y2ggKGUpe31cblxuLyo8bHRJRTk+Ki9cbmlmICh0aGlzLmF0dGFjaEV2ZW50ICYm
ICF0aGlzLmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgdW5sb2FkRXZlbnQgPSBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuZGV0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xuXHRcdGRv
Y3VtZW50LmhlYWQgPSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQud2luZG93ID0gbnVsbDtcblx0
XHR3aW5kb3cgPSB0aGlzLldpbmRvdyA9IGRvY3VtZW50ID0gbnVsbDtcblx0fTtcblx0dGhpcy5h
dHRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG59XG5cbi8vIElFIGZhaWxzIG9u
IGNvbGxlY3Rpb25zIGFuZCA8c2VsZWN0Pi5vcHRpb25zIChyZWZlcnMgdG8gPHNlbGVjdD4pXG52
YXIgYXJyYXlGcm9tID0gQXJyYXkuY29udmVydDtcbnRyeSB7XG5cdGFycmF5RnJvbShkb2N1bWVu
dC5odG1sLmNoaWxkTm9kZXMpO1xufSBjYXRjaCAoZSl7XG5cdEFycmF5LmNvbnZlcnQgPSBmdW5j
dGlvbihpdGVtKXtcblx0XHRpZiAodHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycgJiYgVHlwZS5pc0Vu
dW1lcmFibGUoaXRlbSkgJiYgdHlwZU9mKGl0ZW0pICE9ICdhcnJheScpe1xuXHRcdFx0dmFyIGkg
PSBpdGVtLmxlbmd0aCwgYXJyYXkgPSBuZXcgQXJyYXkoaSk7XG5cdFx0XHR3aGlsZSAoaS0tKSBh
cnJheVtpXSA9IGl0ZW1baV07XG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cdFx0fVxuXHRcdHJldHVy
biBhcnJheUZyb20oaXRlbSk7XG5cdH07XG5cblx0dmFyIHByb3RvdHlwZSA9IEFycmF5LnByb3Rv
dHlwZSxcblx0XHRzbGljZSA9IHByb3RvdHlwZS5zbGljZTtcblx0Wydwb3AnLCAncHVzaCcsICdy
ZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0Jywg
J2pvaW4nLCAnc2xpY2UnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSBw
cm90b3R5cGVbbmFtZV07XG5cdFx0QXJyYXlbbmFtZV0gPSBmdW5jdGlvbihpdGVtKXtcblx0XHRc
dHJldHVybiBtZXRob2QuYXBwbHkoQXJyYXkuY29udmVydChpdGVtKSwgc2xpY2UuY2FsbChhcmd1
bWVudHMsIDEpKTtcblx0XHR9O1xuXHR9KTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtc
blxuLypcbi0tLVxuXG5uYW1lOiBDbGFzc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENs
YXNzIEZ1bmN0aW9uIGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVuZGluZywgYW5kIGltcGxlbWVu
dGluZyByZXVzYWJsZSBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxu
cmVxdWlyZXM6IFtBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyXVxuXG5wcm92aWRlczog
Q2xhc3NcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIENsYXNzID0gdGhpcy5DbGFz
cyA9IG5ldyBUeXBlKCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7XG5cdGlmIChpbnN0YW5jZU9m
KHBhcmFtcywgRnVuY3Rpb24pKSBwYXJhbXMgPSB7aW5pdGlhbGl6ZTogcGFyYW1zfTtcblxuXHR2
YXIgbmV3Q2xhc3MgPSBmdW5jdGlvbigpe1xuXHRcdHJlc2V0KHRoaXMpO1xuXHRcdGlmIChuZXdD
bGFzcy4kcHJvdG90eXBpbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IG51bGw7
XG5cdFx0dGhpcy4kZmFtaWx5ID0gbnVsbDtcblx0XHR2YXIgdmFsdWUgPSAodGhpcy5pbml0aWFs
aXplKSA/IHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcztcblx0
XHR0aGlzLiRjYWxsZXIgPSB0aGlzLmNhbGxlciA9IG51bGw7XG5cdFx0cmV0dXJuIHZhbHVlO1xu
XHR9LmV4dGVuZCh0aGlzKS5pbXBsZW1lbnQocGFyYW1zKTtcblxuXHRuZXdDbGFzcy4kY29uc3Ry
dWN0b3IgPSBDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG5ld0Ns
YXNzO1xuXHRuZXdDbGFzcy5wcm90b3R5cGUucGFyZW50ID0gcGFyZW50O1xuXG5cdHJldHVybiBu
ZXdDbGFzcztcbn0pO1xuXG52YXIgcGFyZW50ID0gZnVuY3Rpb24oKXtcblx0aWYgKCF0aGlzLiRj
YWxsZXIpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcInBhcmVudFwiIGNhbm5vdCBiZSBj
YWxsZWQuJyk7XG5cdHZhciBuYW1lID0gdGhpcy4kY2FsbGVyLiRuYW1lLFxuXHRcdHBhcmVudCA9
IHRoaXMuJGNhbGxlci4kb3duZXIucGFyZW50LFxuXHRcdHByZXZpb3VzID0gKHBhcmVudCkgPyBw
YXJlbnQucHJvdG90eXBlW25hbWVdIDogbnVsbDtcblx0aWYgKCFwcmV2aW91cykgdGhyb3cgbmV3
IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIG5hbWUgKyAnXCIgaGFzIG5vIHBhcmVudC4nKTtcblx0
cmV0dXJuIHByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG52YXIgcmVzZXQg
PSBmdW5jdGlvbihvYmplY3Qpe1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHR2YXIg
dmFsdWUgPSBvYmplY3Rba2V5XTtcblx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0
Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdFx0dmFyIEYgPSBmdW5jdGlvbigpe307XG5cdFx0XHRcdEYu
cHJvdG90eXBlID0gdmFsdWU7XG5cdFx0XHRcdG9iamVjdFtrZXldID0gcmVzZXQobmV3IEYpO1xu
XHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2FycmF5Jzogb2JqZWN0W2tleV0gPSB2YWx1ZS5j
bG9uZSgpOyBicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB3
cmFwID0gZnVuY3Rpb24oc2VsZiwga2V5LCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kLiRvcmlnaW4p
IG1ldGhvZCA9IG1ldGhvZC4kb3JpZ2luO1xuXHR2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCl7XG5c
dFx0aWYgKG1ldGhvZC4kcHJvdGVjdGVkICYmIHRoaXMuJGNhbGxlciA9PSBudWxsKSB0aHJvdyBu
ZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCInICsga2V5ICsgJ1wiIGNhbm5vdCBiZSBjYWxsZWQuJyk7
XG5cdFx0dmFyIGNhbGxlciA9IHRoaXMuY2FsbGVyLCBjdXJyZW50ID0gdGhpcy4kY2FsbGVyO1xu
XHRcdHRoaXMuY2FsbGVyID0gY3VycmVudDsgdGhpcy4kY2FsbGVyID0gd3JhcHBlcjtcblx0XHR2
YXIgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0dGhpcy4kY2Fs
bGVyID0gY3VycmVudDsgdGhpcy5jYWxsZXIgPSBjYWxsZXI7XG5cdFx0cmV0dXJuIHJlc3VsdDtc
blx0fS5leHRlbmQoeyRvd25lcjogc2VsZiwgJG9yaWdpbjogbWV0aG9kLCAkbmFtZToga2V5fSk7
XG5cdHJldHVybiB3cmFwcGVyO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwg
dmFsdWUsIHJldGFpbil7XG5cdGlmIChDbGFzcy5NdXRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkp
KXtcblx0XHR2YWx1ZSA9IENsYXNzLk11dGF0b3JzW2tleV0uY2FsbCh0aGlzLCB2YWx1ZSk7XG5c
dFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKHR5cGVPZih2
YWx1ZSkgPT0gJ2Z1bmN0aW9uJyl7XG5cdFx0aWYgKHZhbHVlLiRoaWRkZW4pIHJldHVybiB0aGlz
O1xuXHRcdHRoaXMucHJvdG90eXBlW2tleV0gPSAocmV0YWluKSA/IHZhbHVlIDogd3JhcCh0aGlz
LCBrZXksIHZhbHVlKTtcblx0fSBlbHNlIHtcblx0XHRPYmplY3QubWVyZ2UodGhpcy5wcm90b3R5
cGUsIGtleSwgdmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG52YXIgZ2V0SW5z
dGFuY2UgPSBmdW5jdGlvbihrbGFzcyl7XG5cdGtsYXNzLiRwcm90b3R5cGluZyA9IHRydWU7XG5c
dHZhciBwcm90byA9IG5ldyBrbGFzcztcblx0ZGVsZXRlIGtsYXNzLiRwcm90b3R5cGluZztcblx0
cmV0dXJuIHByb3RvO1xufTtcblxuQ2xhc3MuaW1wbGVtZW50KCdpbXBsZW1lbnQnLCBpbXBsZW1l
bnQub3ZlcmxvYWRTZXR0ZXIoKSk7XG5cbkNsYXNzLk11dGF0b3JzID0ge1xuXG5cdEV4dGVuZHM6
IGZ1bmN0aW9uKHBhcmVudCl7XG5cdFx0dGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0dGhpcy5w
cm90b3R5cGUgPSBnZXRJbnN0YW5jZShwYXJlbnQpO1xuXHR9LFxuXG5cdEltcGxlbWVudHM6IGZ1
bmN0aW9uKGl0ZW1zKXtcblx0XHRBcnJheS5jb252ZXJ0KGl0ZW1zKS5lYWNoKGZ1bmN0aW9uKGl0
ZW0pe1xuXHRcdFx0dmFyIGluc3RhbmNlID0gbmV3IGl0ZW07XG5cdFx0XHRmb3IgKHZhciBrZXkg
aW4gaW5zdGFuY2UpIGltcGxlbWVudC5jYWxsKHRoaXMsIGtleSwgaW5zdGFuY2Vba2V5XSwgdHJ1
ZSk7XG5cdFx0fSwgdGhpcyk7XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTog
Q2xhc3MuRXh0cmFzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBVdGlsaXR5IENsYXNzZXMgdGhh
dCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIGVhc2UgdGhlIGV4
ZWN1dGlvbiBvZiBtYW55IGNvbW1vbiB0YXNrcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLkV4dHJhcywgQ2hhaW4s
IEV2ZW50cywgT3B0aW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudGhpcy5DaGFp
biA9IG5ldyBDbGFzcyh7XG5cblx0JGNoYWluOiBbXSxcblxuXHRjaGFpbjogZnVuY3Rpb24oKXtc
blx0XHR0aGlzLiRjaGFpbi5hcHBlbmQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYWxsQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
ICh0aGlzLiRjaGFpbi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLCBh
cmd1bWVudHMpIDogZmFsc2U7XG5cdH0sXG5cblx0Y2xlYXJDaGFpbjogZnVuY3Rpb24oKXtcblx0
XHR0aGlzLiRjaGFpbi5lbXB0eSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52
YXIgcmVtb3ZlT24gPSBmdW5jdGlvbihzdHJpbmcpe1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2Uo
L15vbihbQS1aXSkvLCBmdW5jdGlvbihmdWxsLCBmaXJzdCl7XG5cdFx0cmV0dXJuIGZpcnN0LnRv
TG93ZXJDYXNlKCk7XG5cdH0pO1xufTtcblxudGhpcy5FdmVudHMgPSBuZXcgQ2xhc3Moe1xuXG5c
dCRldmVudHM6IHt9LFxuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbiwgaW50ZXJuYWwp
e1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblxuXHRcdFxuXG5cdFx0dGhpcy4kZXZlbnRz
W3R5cGVdID0gKHRoaXMuJGV2ZW50c1t0eXBlXSB8fCBbXSkuaW5jbHVkZShmbik7XG5cdFx0aWYg
KGludGVybmFsKSBmbi5pbnRlcm5hbCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0YWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZvciAodmFyIHR5cGUgaW4gZXZl
bnRzKSB0aGlzLmFkZEV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0
dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlw
ZV07XG5cdFx0aWYgKCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252
ZXJ0KGFyZ3MpO1xuXHRcdGV2ZW50cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxh
eSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlz
LCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1v
dmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtc
blx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmIChldmVudHMgJiYg
IWZuLmludGVybmFsKXtcblx0XHRcdHZhciBpbmRleCA9IGV2ZW50cy5pbmRleE9mKGZuKTtcblx0
XHRcdGlmIChpbmRleCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRleF07XG5cdFx0fVxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0
XHR2YXIgdHlwZTtcblx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0
Zm9yICh0eXBlIGluIGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0p
O1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmIChldmVudHMpIGV2ZW50cyA9IHJl
bW92ZU9uKGV2ZW50cyk7XG5cdFx0Zm9yICh0eXBlIGluIHRoaXMuJGV2ZW50cyl7XG5cdFx0XHRp
ZiAoZXZlbnRzICYmIGV2ZW50cyAhPSB0eXBlKSBjb250aW51ZTtcblx0XHRcdHZhciBmbnMgPSB0
aGlzLiRldmVudHNbdHlwZV07XG5cdFx0XHRmb3IgKHZhciBpID0gZm5zLmxlbmd0aDsgaS0tOykg
aWYgKGkgaW4gZm5zKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudCh0eXBlLCBmbnNbaV0pO1xu
XHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudGhpcy5PcHRp
b25zID0gbmV3IENsYXNzKHtcblxuXHRzZXRPcHRpb25zOiBmdW5jdGlvbigpe1xuXHRcdHZhciBv
cHRpb25zID0gdGhpcy5vcHRpb25zID0gT2JqZWN0Lm1lcmdlLmFwcGx5KG51bGwsIFt7fSwgdGhp
cy5vcHRpb25zXS5hcHBlbmQoYXJndW1lbnRzKSk7XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnQpIGZv
ciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKXtcblx0XHRcdGlmICh0eXBlT2Yob3B0aW9uc1tvcHRp
b25dKSAhPSAnZnVuY3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVzdChvcHRpb24pKSBjb250aW51
ZTtcblx0XHRcdHRoaXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25zW29wdGlvbl0pO1xuXHRcdFx0
ZGVsZXRlIG9wdGlvbnNbb3B0aW9uXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuVGhlbmFibGVcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIGEgVXRpbGl0eSBDbGFzcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBp
bnRvIHlvdXIgb3duIENsYXNzZXMgdG8gbWFrZSB0aGVtIFwidGhlbmFibGVcIi5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0Ns
YXNzLlRoZW5hYmxlXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgU1RBVEVfUEVO
RElORyA9IDAsXG5cdFNUQVRFX0ZVTEZJTExFRCA9IDEsXG5cdFNUQVRFX1JFSkVDVEVEID0gMjtc
blxudmFyIFRoZW5hYmxlID0gQ2xhc3MuVGhlbmFibGUgPSBuZXcgQ2xhc3Moe1xuXG5cdCR0aGVu
YWJsZVN0YXRlOiBTVEFURV9QRU5ESU5HLFxuXHQkdGhlbmFibGVSZXN1bHQ6IG51bGwsXG5cdCR0
aGVuYWJsZVJlYWN0aW9uczogW10sXG5cblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRc
dHJlc29sdmUodGhpcywgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlamVj
dDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRnZXRUaGVuYWJsZVN0YXRlOiBmdW5jdGlvbigpe1xuXHRcdHN3
aXRjaCAodGhpcy4kdGhlbmFibGVTdGF0ZSl7XG5cdFx0XHRjYXNlIFNUQVRFX1BFTkRJTkc6XG5c
dFx0XHRcdHJldHVybiAncGVuZGluZyc7XG5cblx0XHRcdGNhc2UgU1RBVEVfRlVMRklMTEVEOlxu
XHRcdFx0XHRyZXR1cm4gJ2Z1bGZpbGxlZCc7XG5cblx0XHRcdGNhc2UgU1RBVEVfUkVKRUNURUQ6
XG5cdFx0XHRcdHJldHVybiAncmVqZWN0ZWQnO1xuXHRcdH1cblx0fSxcblxuXHRyZXNldFRoZW5h
YmxlOiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJl
c2V0KHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRoZW46IGZ1bmN0aW9uKG9u
RnVsZmlsbGVkLCBvblJlamVjdGVkKXtcblx0XHRpZiAodHlwZW9mIG9uRnVsZmlsbGVkICE9PSAn
ZnVuY3Rpb24nKSBvbkZ1bGZpbGxlZCA9ICdJZGVudGl0eSc7XG5cdFx0aWYgKHR5cGVvZiBvblJl
amVjdGVkICE9PSAnZnVuY3Rpb24nKSBvblJlamVjdGVkID0gJ1Rocm93ZXInO1xuXG5cdFx0dmFy
IHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cblx0XHR0aGlzLiR0aGVuYWJsZVJlYWN0aW9u
cy5wdXNoKHtcblx0XHRcdHRoZW5hYmxlOiB0aGVuYWJsZSxcblx0XHRcdGZ1bGZpbGxIYW5kbGVy
OiBvbkZ1bGZpbGxlZCxcblx0XHRcdHJlamVjdEhhbmRsZXI6IG9uUmVqZWN0ZWRcblx0XHR9KTtc
blxuXHRcdGlmICh0aGlzLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHRc
dHJlYWN0KHRoaXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblxuXHQn
Y2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcblx0XHRyZXR1cm4gdGhpcy50aGVuKG51bGws
IG9uUmVqZWN0ZWQpO1xuXHR9XG5cbn0pO1xuXG5UaGVuYWJsZS5leHRlbmQoe1xuXHRyZXNvbHZl
OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFyIHRoZW5hYmxlO1xuXHRcdGlmICh2YWx1ZSBpbnN0
YW5jZW9mIFRoZW5hYmxlKXtcblx0XHRcdHRoZW5hYmxlID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtc
blx0XHRcdHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0XHRyZXNvbHZlKHRoZW5hYmxl
LCB2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblx0cmVqZWN0OiBm
dW5jdGlvbihyZWFzb24pe1xuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRc
dHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH1cbn0p
O1xuXG4vLyBQcml2YXRlIGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiByZXNvbHZlKHRoZW5hYmxlLCB2
YWx1ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7
XG5cdFx0aWYgKHRoZW5hYmxlID09PSB2YWx1ZSl7XG5cdFx0XHRyZWplY3QodGhlbmFibGUsIG5l
dyBUeXBlRXJyb3IoJ1RyaWVkIHRvIHJlc29sdmUgYSB0aGVuYWJsZSB3aXRoIGl0c2VsZi4nKSk7
XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0
eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKXtcblx0XHRcdHZhciB0aGVuO1xuXHRcdFx0dHJ5
IHtcblx0XHRcdFx0dGhlbiA9IHZhbHVlLnRoZW47XG5cdFx0XHR9IGNhdGNoIChleGNlcHRpb24p
e1xuXHRcdFx0XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRp
ZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHR2YXIgcmVzb2x2ZWQgPSBm
YWxzZTtcblx0XHRcdFx0ZGVmZXIoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0
XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0ZnVu
Y3Rpb24obmV4dFZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRc
dFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUo
dGhlbmFibGUsIG5leHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9
LFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihyZWFzb24pe1xuXHRcdFx0XHRcdFx0XHRcdGlmICgh
cmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRc
dFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0
XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChleGNlcHRp
b24pe1xuXHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVk
ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRc
dFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRc
dFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0
XHRcdGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24g
ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUg
PT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHZhbHVl
O1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfRlVMRklMTEVEO1xuXG5cdFx0
cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlamVjdCh0aGVuYWJsZSwgcmVh
c29uKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtc
blx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSByZWFzb247XG5cdFx0dGhlbmFibGUuJHRo
ZW5hYmxlU3RhdGUgPSBTVEFURV9SRUpFQ1RFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0
fVxufVxuXG5mdW5jdGlvbiByZXNldCh0aGVuYWJsZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFi
bGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0
ID0gbnVsbDtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1BFTkRJTkc7XG5c
dH1cbn1cblxuZnVuY3Rpb24gcmVhY3QodGhlbmFibGUpe1xuXHR2YXIgc3RhdGUgPSB0aGVuYWJs
ZS4kdGhlbmFibGVTdGF0ZSxcblx0XHRyZXN1bHQgPSB0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQs
XG5cdFx0cmVhY3Rpb25zID0gdGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zLFxuXHRcdHR5cGU7
XG5cblx0aWYgKHN0YXRlID09PSBTVEFURV9GVUxGSUxMRUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVu
YWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5cGUgPSAnZnVsZmlsbEhhbmRsZXInO1xuXHR9IGVs
c2UgaWYgKHN0YXRlID09IFNUQVRFX1JFSkVDVEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVS
ZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ3JlamVjdEhhbmRsZXInO1xuXHR9XG5cblx0aWYg
KHR5cGUpe1xuXHRcdGRlZmVyKGhhbmRsZS5wYXNzKFtyZXN1bHQsIHJlYWN0aW9ucywgdHlwZV0p
KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGUocmVzdWx0LCByZWFjdGlvbnMsIHR5cGUpe1xu
XHRmb3IgKHZhciBpID0gMCwgbCA9IHJlYWN0aW9ucy5sZW5ndGg7IGkgPCBsOyArK2kpe1xuXHRc
dHZhciByZWFjdGlvbiA9IHJlYWN0aW9uc1tpXSxcblx0XHRcdGhhbmRsZXIgPSByZWFjdGlvblt0
eXBlXTtcblxuXHRcdGlmIChoYW5kbGVyID09PSAnSWRlbnRpdHknKXtcblx0XHRcdHJlc29sdmUo
cmVhY3Rpb24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIGlmIChoYW5kbGVyID09PSAn
VGhyb3dlcicpe1xuXHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRc
dH0gZWxzZSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxl
LCBoYW5kbGVyKHJlc3VsdCkpO1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0
cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0
fVxufVxuXG52YXIgZGVmZXI7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYm
IHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKXtcblx0ZGVmZXIgPSBwcm9j
ZXNzLm5leHRUaWNrO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZp
bmVkJyl7XG5cdGRlZmVyID0gc2V0SW1tZWRpYXRlO1xufSBlbHNlIHtcblx0ZGVmZXIgPSBmdW5j
dGlvbihmbil7XG5cdFx0c2V0VGltZW91dChmbiwgMCk7XG5cdH07XG59XG5cbn0pKCk7XG5cbi8q
XG4tLS1cblxubmFtZTogT2JqZWN0XG5cbmRlc2NyaXB0aW9uOiBPYmplY3QgZ2VuZXJpYyBtZXRo
b2RzXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5w
cm92aWRlczogW09iamVjdCwgSGFzaF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuT2Jq
ZWN0LmV4dGVuZCh7XG5cblx0c3Vic2V0OiBmdW5jdGlvbihvYmplY3QsIGtleXMpe1xuXHRcdHZh
ciByZXN1bHRzID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8
IGw7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHRpZiAoayBpbiBvYmplY3Qp
IHJlc3VsdHNba10gPSBvYmplY3Rba107XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9
LFxuXG5cdG1hcDogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMg
PSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xu
XHRcdFx0cmVzdWx0c1trZXldID0gZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmpl
Y3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0
aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtl
eXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXSwgdmFsdWUgPSBvYmplY3Rba2V5
XTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBrZXksIG9iamVjdCkpIHJlc3VsdHNb
a2V5XSA9IHZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRldmVy
eTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5
cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5c
dFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmICghZm4uY2FsbChiaW5kLCBvYmplY3Rb
a2V5XSwga2V5KSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxc
blxuXHRzb21lOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9i
amVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsg
aSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSkpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7
XG5cdH0sXG5cblx0dmFsdWVzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZXMgPSBb
XTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9
IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRc
dHZhbHVlcy5wdXNoKG9iamVjdFtrXSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH0s
XG5cblx0Z2V0TGVuZ3RoOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5
cyhvYmplY3QpLmxlbmd0aDtcblx0fSxcblxuXHRrZXlPZjogZnVuY3Rpb24ob2JqZWN0LCB2YWx1
ZSl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkg
PSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0
XHRcdGlmIChvYmplY3Rba2V5XSA9PT0gdmFsdWUpIHJldHVybiBrZXk7XG5cdFx0fVxuXHRcdHJl
dHVybiBudWxsO1xuXHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtc
blx0XHRyZXR1cm4gT2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUpICE9IG51bGw7XG5cdH0sXG5c
blx0dG9RdWVyeVN0cmluZzogZnVuY3Rpb24ob2JqZWN0LCBiYXNlKXtcblx0XHR2YXIgcXVlcnlT
dHJpbmcgPSBbXTtcblxuXHRcdE9iamVjdC5lYWNoKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtl
eSl7XG5cdFx0XHRpZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyArIGtleSArICddJztcblx0XHRc
dHZhciByZXN1bHQ7XG5cdFx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0XHRjYXNl
ICdvYmplY3QnOiByZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyh2YWx1ZSwga2V5KTsgYnJl
YWs7XG5cdFx0XHRcdGNhc2UgJ2FycmF5Jzpcblx0XHRcdFx0XHR2YXIgcXMgPSB7fTtcblx0XHRc
dFx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdFx0XHRxc1tpXSA9IHZh
bDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmlu
Zyhxcywga2V5KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogcmVzdWx0ID0g
a2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRcdH1cblx0XHRcdGlm
ICh2YWx1ZSAhPSBudWxsKSBxdWVyeVN0cmluZy5wdXNoKHJlc3VsdCk7XG5cdFx0fSk7XG5cblx0
XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG5c
blxuLypcbi0tLVxubmFtZTogU2xpY2suUGFyc2VyXG5kZXNjcmlwdGlvbjogU3RhbmRhbG9uZSBD
U1MzIFNlbGVjdG9yIHBhcnNlclxucHJvdmlkZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47
KGZ1bmN0aW9uKCl7XG5cbnZhciBwYXJzZWQsXG5cdHNlcGFyYXRvckluZGV4LFxuXHRjb21iaW5h
dG9ySW5kZXgsXG5cdHJldmVyc2VkLFxuXHRjYWNoZSA9IHt9LFxuXHRyZXZlcnNlQ2FjaGUgPSB7
fSxcblx0cmVVbmVzY2FwZSA9IC9cXFxcL2c7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKGV4cHJl
c3Npb24sIGlzUmV2ZXJzZWQpe1xuXHRpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVs
bDtcblx0aWYgKGV4cHJlc3Npb24uU2xpY2sgPT09IHRydWUpIHJldHVybiBleHByZXNzaW9uO1xu
XHRleHByZXNzaW9uID0gKCcnICsgZXhwcmVzc2lvbikucmVwbGFjZSgvXlxccyt8XFxzKyQvZywg
JycpO1xuXHRyZXZlcnNlZCA9ICEhaXNSZXZlcnNlZDtcblx0dmFyIGN1cnJlbnRDYWNoZSA9IChy
ZXZlcnNlZCkgPyByZXZlcnNlQ2FjaGUgOiBjYWNoZTtcblx0aWYgKGN1cnJlbnRDYWNoZVtleHBy
ZXNzaW9uXSkgcmV0dXJuIGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXTtcblx0cGFyc2VkID0ge1xu
XHRcdFNsaWNrOiB0cnVlLFxuXHRcdGV4cHJlc3Npb25zOiBbXSxcblx0XHRyYXc6IGV4cHJlc3Np
b24sXG5cdFx0cmV2ZXJzZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBwYXJzZSh0aGlzLnJh
dywgdHJ1ZSk7XG5cdFx0fVxuXHR9O1xuXHRzZXBhcmF0b3JJbmRleCA9IC0xO1xuXHR3aGlsZSAo
ZXhwcmVzc2lvbiAhPSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZShyZWdleHAsIHBh
cnNlcikpKTtcblx0cGFyc2VkLmxlbmd0aCA9IHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGg7XG5c
dHJldHVybiBjdXJyZW50Q2FjaGVbcGFyc2VkLnJhd10gPSAocmV2ZXJzZWQpID8gcmV2ZXJzZShw
YXJzZWQpIDogcGFyc2VkO1xufTtcblxudmFyIHJldmVyc2VDb21iaW5hdG9yID0gZnVuY3Rpb24o
Y29tYmluYXRvcil7XG5cdGlmIChjb21iaW5hdG9yID09PSAnIScpIHJldHVybiAnICc7XG5cdGVs
c2UgaWYgKGNvbWJpbmF0b3IgPT09ICcgJykgcmV0dXJuICchJztcblx0ZWxzZSBpZiAoKC9eIS8p
LnRlc3QoY29tYmluYXRvcikpIHJldHVybiBjb21iaW5hdG9yLnJlcGxhY2UoL14hLywgJycpO1xu
XHRlbHNlIHJldHVybiAnIScgKyBjb21iaW5hdG9yO1xufTtcblxudmFyIHJldmVyc2UgPSBmdW5j
dGlvbihleHByZXNzaW9uKXtcblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNz
aW9ucztcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKyl7XG5c
dFx0dmFyIGV4cCA9IGV4cHJlc3Npb25zW2ldO1xuXHRcdHZhciBsYXN0ID0ge3BhcnRzOiBbXSwg
dGFnOiAnKicsIGNvbWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9yKGV4cFswXS5jb21iaW5hdG9y
KX07XG5cblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGV4cC5sZW5ndGg7IGorKyl7XG5cdFx0XHR2
YXIgY2V4cCA9IGV4cFtqXTtcblx0XHRcdGlmICghY2V4cC5yZXZlcnNlQ29tYmluYXRvcikgY2V4
cC5yZXZlcnNlQ29tYmluYXRvciA9ICcgJztcblx0XHRcdGNleHAuY29tYmluYXRvciA9IGNleHAu
cmV2ZXJzZUNvbWJpbmF0b3I7XG5cdFx0XHRkZWxldGUgY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtc
blx0XHR9XG5cblx0XHRleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7XG5cdH1cblx0cmV0dXJuIGV4
cHJlc3Npb247XG59O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyaW5nKXsvLyBD
cmVkaXQ6IFhSZWdFeHAgMC42LjEgKGMpIDIwMDctMjAwOCBTdGV2ZW4gTGV2aXRoYW4gPGh0dHA6
Ly9zdGV2ZW5sZXZpdGhhbi5jb20vcmVnZXgveHJlZ2V4cC8+IE1JVCBMaWNlbnNlXG5cdHJldHVy
biBzdHJpbmcucmVwbGFjZSgvWy1bXFxde30oKSorPy5cXFxcXiR8LCNcXHNdL2csIGZ1bmN0aW9u
KG1hdGNoKXtcblx0XHRyZXR1cm4gJ1xcXFwnICsgbWF0Y2g7XG5cdH0pO1xufTtcblxudmFyIHJl
Z2V4cCA9IG5ldyBSZWdFeHAoXG4vKlxuIyEvdXNyL2Jpbi9lbnYgcnVieVxucHV0cyBcIlxcdFxc
dFwiICsgREFUQS5yZWFkLmdzdWIoL1xcKFxcP3hcXCl8XFxzKyMuKiR8XFxzK3xcXFxcJHxcXFxc
bi8sJycpXG5fX0VORF9fXG5cdFwiKD94KV4oPzpcXFxuXHQgIFxcXFxzKiAoICwgKSBcXFxccyog
ICAgICAgICAgICAgICAjIFNlcGFyYXRvciAgICAgICAgICBcXG5cXFxuXHR8IFxcXFxzKiAoIDxj
b21iaW5hdG9yPisgKSBcXFxccyogICAjIENvbWJpbmF0b3IgICAgICAgICBcXG5cXFxuXHR8ICAg
ICAgKCBcXFxccysgKSAgICAgICAgICAgICAgICAgIyBDb21iaW5hdG9yQ2hpbGRyZW4gXFxuXFxc
blx0fCAgICAgICggPHVuaWNvZGU+KyB8IFxcXFwqICkgICAgICMgVGFnICAgICAgICAgICAgICAg
IFxcblxcXG5cdHwgXFxcXCMgICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIElEICAgICAgICAg
ICAgICAgICBcXG5cXFxuXHR8IFxcXFwuICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBDbGFz
c05hbWUgICAgICAgICAgXFxuXFxcblx0fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj
IEF0dHJpYnV0ZSAgICAgICAgICBcXG5cXFxuXHRcXFxcWyAgXFxcblx0XHRcXFxccyogKDx1bmlj
b2RlMT4rKSAgKD86ICBcXFxuXHRcdFx0XFxcXHMqIChbKl4kIX58XT89KSAgKD86ICBcXFxuXHRc
dFx0XHRcXFxccyogKD86XFxcblx0XHRcdFx0XHQoW1xcXCInXT8pKC4qPylcXFxcOSBcXFxuXHRc
dFx0XHQpXFxcblx0XHRcdCkgIFxcXG5cdFx0KT8gIFxcXFxzKiAgXFxcblx0XFxcXF0oPyFcXFxc
XSkgXFxuXFxcblx0fCAgIDorICggPHVuaWNvZGU+KyApKD86XFxcblx0XFxcXCggKD86XFxcblx0
XHQoPzooW1xcXCInXSkoW15cXFxcMTJdKilcXFxcMTIpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14o
KV0qKSspXFxcblx0KSBcXFxcKVxcXG5cdCk/XFxcblx0KVwiXG4qL1xuXHRcIl4oPzpcXFxccyoo
LClcXFxccyp8XFxcXHMqKDxjb21iaW5hdG9yPispXFxcXHMqfChcXFxccyspfCg8dW5pY29kZT4r
fFxcXFwqKXxcXFxcIyg8dW5pY29kZT4rKXxcXFxcLig8dW5pY29kZT4rKXxcXFxcW1xcXFxzKig8
dW5pY29kZTE+KykoPzpcXFxccyooWypeJCF+fF0/PSkoPzpcXFxccyooPzooW1xcXCInXT8pKC4q
PylcXFxcOSkpKT9cXFxccypcXFxcXSg/IVxcXFxdKXwoOispKDx1bmljb2RlPispKD86XFxcXCgo
PzooPzooW1xcXCInXSkoW15cXFxcMTNdKilcXFxcMTMpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14o
KV0qKSspKVxcXFwpKT8pXCJcblx0LnJlcGxhY2UoLzxjb21iaW5hdG9yPi8sICdbJyArIGVzY2Fw
ZVJlZ0V4cCgnPit+YCFAJCVeJj17fVxcXFw7PC8nKSArICddJylcblx0LnJlcGxhY2UoLzx1bmlj
b2RlPi9nLCAnKD86W1xcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAt
OWEtZl0pJylcblx0LnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/Ols6XFxcXHdcXFxcdTAwYTEt
XFxcXHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuKTtcblxuZnVuY3Rpb24gcGFy
c2VyKFxuXHRyYXdNYXRjaCxcblxuXHRzZXBhcmF0b3IsXG5cdGNvbWJpbmF0b3IsXG5cdGNvbWJp
bmF0b3JDaGlsZHJlbixcblxuXHR0YWdOYW1lLFxuXHRpZCxcblx0Y2xhc3NOYW1lLFxuXG5cdGF0
dHJpYnV0ZUtleSxcblx0YXR0cmlidXRlT3BlcmF0b3IsXG5cdGF0dHJpYnV0ZVF1b3RlLFxuXHRh
dHRyaWJ1dGVWYWx1ZSxcblxuXHRwc2V1ZG9NYXJrZXIsXG5cdHBzZXVkb0NsYXNzLFxuXHRwc2V1
ZG9RdW90ZSxcblx0cHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSxcblx0cHNldWRvQ2xhc3NWYWx1ZVxu
KXtcblx0aWYgKHNlcGFyYXRvciB8fCBzZXBhcmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdHBhcnNl
ZC5leHByZXNzaW9uc1srK3NlcGFyYXRvckluZGV4XSA9IFtdO1xuXHRcdGNvbWJpbmF0b3JJbmRl
eCA9IC0xO1xuXHRcdGlmIChzZXBhcmF0b3IpIHJldHVybiAnJztcblx0fVxuXG5cdGlmIChjb21i
aW5hdG9yIHx8IGNvbWJpbmF0b3JDaGlsZHJlbiB8fCBjb21iaW5hdG9ySW5kZXggPT09IC0xKXtc
blx0XHRjb21iaW5hdG9yID0gY29tYmluYXRvciB8fCAnICc7XG5cdFx0dmFyIGN1cnJlbnRTZXBh
cmF0b3IgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdO1xuXHRcdGlmIChyZXZl
cnNlZCAmJiBjdXJyZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0pXG5cdFx0XHRjdXJyZW50
U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0ucmV2ZXJzZUNvbWJpbmF0b3IgPSByZXZlcnNlQ29t
YmluYXRvcihjb21iaW5hdG9yKTtcblx0XHRjdXJyZW50U2VwYXJhdG9yWysrY29tYmluYXRvcklu
ZGV4XSA9IHtjb21iaW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcqJ307XG5cdH1cblxuXHR2YXIg
Y3VycmVudFBhcnNlZCA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRleF1bY29tYmlu
YXRvckluZGV4XTtcblxuXHRpZiAodGFnTmFtZSl7XG5cdFx0Y3VycmVudFBhcnNlZC50YWcgPSB0
YWdOYW1lLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoaWQpe1xuXHRc
dGN1cnJlbnRQYXJzZWQuaWQgPSBpZC5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVs
c2UgaWYgKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UocmVV
bmVzY2FwZSwgJycpO1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCkgY3VycmVu
dFBhcnNlZC5jbGFzc0xpc3QgPSBbXTtcblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3Nlcykg
Y3VycmVudFBhcnNlZC5jbGFzc2VzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFzc0xpc3Qu
cHVzaChjbGFzc05hbWUpO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xhc3Nlcy5wdXNoKHtcblx0XHRc
dHZhbHVlOiBjbGFzc05hbWUsXG5cdFx0XHRyZWdleHA6IG5ldyBSZWdFeHAoJyhefFxcXFxzKScg
KyBlc2NhcGVSZWdFeHAoY2xhc3NOYW1lKSArICcoXFxcXHN8JCknKVxuXHRcdH0pO1xuXG5cdH0g
ZWxzZSBpZiAocHNldWRvQ2xhc3Mpe1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFz
c1ZhbHVlIHx8IHBzZXVkb0NsYXNzUXVvdGVkVmFsdWU7XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9
IHBzZXVkb0NsYXNzVmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJlcGxhY2UocmVVbmVzY2FwZSwg
JycpIDogbnVsbDtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5wc2V1ZG9zKSBjdXJyZW50UGFy
c2VkLnBzZXVkb3MgPSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLnBzZXVkb3MucHVzaCh7XG5cdFx0
XHRrZXk6IHBzZXVkb0NsYXNzLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpLFxuXHRcdFx0dmFsdWU6
IHBzZXVkb0NsYXNzVmFsdWUsXG5cdFx0XHR0eXBlOiBwc2V1ZG9NYXJrZXIubGVuZ3RoID09IDEg
PyAnY2xhc3MnIDogJ2VsZW1lbnQnXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChhdHRyaWJ1dGVL
ZXkpe1xuXHRcdGF0dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5yZXBsYWNlKHJlVW5lc2NhcGUs
ICcnKTtcblx0XHRhdHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVWYWx1ZSB8fCAnJykucmVwbGFj
ZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHR2YXIgdGVzdCwgcmVnZXhwO1xuXG5cdFx0c3dpdGNo
IChhdHRyaWJ1dGVPcGVyYXRvcil7XG5cdFx0XHRjYXNlICdePScgOiByZWdleHAgPSBuZXcgUmVn
RXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgICAgICAgICAgICAp
OyBicmVhaztcblx0XHRcdGNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICAg
ICAgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAgICAgICk7IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnfj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhefFxcXFxzKScrIGVzY2FwZVJl
Z0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoXFxcXHN8JCknICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAn
fD0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmli
dXRlVmFsdWUpICsnKC18JCknICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICAnPScgOiB0ZXN0ID0g
ZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgPT0gdmFsdWU7
XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGNhc2UgJyo9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1
ZSl7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKGF0dHJpYnV0ZVZhbHVl
KSA+IC0xO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICchPScgOiB0ZXN0ID0gZnVuY3Rp
b24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgIT0gdmFsdWU7XG5cdFx0
XHR9OyBicmVhaztcblx0XHRcdGRlZmF1bHQgICA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5c
dFx0XHRcdHJldHVybiAhIXZhbHVlO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYXR0cmli
dXRlVmFsdWUgPT0gJycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0cmlidXRlT3BlcmF0b3IpKSB0
ZXN0ID0gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0aWYg
KCF0ZXN0KSB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlICYmIHJl
Z2V4cC50ZXN0KHZhbHVlKTtcblx0XHR9O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmF0dHJp
YnV0ZXMpIGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQu
YXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGtleTogYXR0cmlidXRlS2V5LFxuXHRcdFx0b3BlcmF0
b3I6IGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRcdFx0dmFsdWU6IGF0dHJpYnV0ZVZhbHVlLFxuXHRc
dFx0dGVzdDogdGVzdFxuXHRcdH0pO1xuXG5cdH1cblxuXHRyZXR1cm4gJyc7XG59O1xuXG4vLyBT
bGljayBOU1xuXG52YXIgU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnBhcnNl
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHJldHVybiBwYXJzZShleHByZXNzaW9uKTtcbn07
XG5cblNsaWNrLmVzY2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtcblxuaWYgKCF0aGlzLlNsaWNr
KSB0aGlzLlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBl
eHBvcnRzICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtc
blxuLypcbi0tLVxubmFtZTogU2xpY2suRmluZGVyXG5kZXNjcmlwdGlvbjogVGhlIG5ldywgc3Vw
ZXJmYXN0IGNzcyBzZWxlY3RvciBlbmdpbmUuXG5wcm92aWRlczogU2xpY2suRmluZGVyXG5yZXF1
aXJlczogU2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIGxvY2Fs
ID0ge30sXG5cdGZlYXR1cmVzQ2FjaGUgPSB7fSxcblx0dG9TdHJpbmcgPSBPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nO1xuXG4vLyBGZWF0dXJlIC8gQnVnIGRldGVjdGlvblxuXG5sb2NhbC5pc05h
dGl2ZUNvZGUgPSBmdW5jdGlvbihmbil7XG5cdHJldHVybiAoL1xce1xccypcXFtuYXRpdmUgY29k
ZVxcXVxccypcXH0vKS50ZXN0KCcnICsgZm4pO1xufTtcblxubG9jYWwuaXNYTUwgPSBmdW5jdGlv
bihkb2N1bWVudCl7XG5cdHJldHVybiAoISFkb2N1bWVudC54bWxWZXJzaW9uKSB8fCAoISFkb2N1
bWVudC54bWwpIHx8ICh0b1N0cmluZy5jYWxsKGRvY3VtZW50KSA9PSAnW29iamVjdCBYTUxEb2N1
bWVudF0nKSB8fFxuXHQoZG9jdW1lbnQubm9kZVR5cGUgPT0gOSAmJiBkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQubm9kZU5hbWUgIT0gJ0hUTUwnKTtcbn07XG5cbmxvY2FsLnNldERvY3VtZW50ID0g
ZnVuY3Rpb24oZG9jdW1lbnQpe1xuXG5cdC8vIGNvbnZlcnQgZWxlbWVudHMgLyB3aW5kb3cgYXJn
dW1lbnRzIHRvIGRvY3VtZW50LiBpZiBkb2N1bWVudCBjYW5ub3QgYmUgZXh0cmFwb2xhdGVkLCB0
aGUgZnVuY3Rpb24gcmV0dXJucy5cblx0dmFyIG5vZGVUeXBlID0gZG9jdW1lbnQubm9kZVR5cGU7
XG5cdGlmIChub2RlVHlwZSA9PSA5KTsgLy8gZG9jdW1lbnRcblx0ZWxzZSBpZiAobm9kZVR5cGUp
IGRvY3VtZW50ID0gZG9jdW1lbnQub3duZXJEb2N1bWVudDsgLy8gbm9kZVxuXHRlbHNlIGlmIChk
b2N1bWVudC5uYXZpZ2F0b3IpIGRvY3VtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnQ7IC8vIHdpbmRv
d1xuXHRlbHNlIHJldHVybjtcblxuXHQvLyBjaGVjayBpZiBpdCdzIHRoZSBvbGQgZG9jdW1lbnRc
blxuXHRpZiAodGhpcy5kb2N1bWVudCA9PT0gZG9jdW1lbnQpIHJldHVybjtcblx0dGhpcy5kb2N1
bWVudCA9IGRvY3VtZW50O1xuXG5cdC8vIGNoZWNrIGlmIHdlIGhhdmUgZG9uZSBmZWF0dXJlIGRl
dGVjdGlvbiBvbiB0aGlzIGRvY3VtZW50IGJlZm9yZVxuXG5cdHZhciByb290ID0gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50LFxuXHRcdHJvb3RVaWQgPSB0aGlzLmdldFVJRFhNTChyb290KSxcblx0
XHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0sXG5cdFx0ZmVhdHVyZTtcblxuXHRp
ZiAoZmVhdHVyZXMpe1xuXHRcdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0XHR0aGlz
W2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxu
XG5cdGZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSA9IHt9O1xuXG5cdGZlYXR1cmVz
LnJvb3QgPSByb290O1xuXHRmZWF0dXJlcy5pc1hNTERvY3VtZW50ID0gdGhpcy5pc1hNTChkb2N1
bWVudCk7XG5cblx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROXG5cdD0gZmVhdHVyZXMuc3RhclNl
bGVjdHNDbG9zZWRRU0Fcblx0PSBmZWF0dXJlcy5pZEdldHNOYW1lXG5cdD0gZmVhdHVyZXMuYnJv
a2VuTWl4ZWRDYXNlUVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuR0VCQ05cblx0PSBmZWF0dXJlcy5i
cm9rZW5DaGVja2VkUVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0Fcblx0
PSBmZWF0dXJlcy5pc0hUTUxEb2N1bWVudFxuXHQ9IGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxl
Y3RvclxuXHQ9IGZhbHNlO1xuXG5cdHZhciBzdGFyU2VsZWN0c0Nsb3NlZCwgc3RhclNlbGVjdHND
b21tZW50cyxcblx0XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiwgY2FjaGVkR2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSxcblx0XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyO1xuXG5cdHZhciBz
ZWxlY3RlZCwgaWQgPSAnc2xpY2tfdW5pcXVlaWQnO1xuXHR2YXIgdGVzdE5vZGUgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuXHR2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5ib2R5
IHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0gfHwgcm9vdDtcblx0
dGVzdFJvb3QuYXBwZW5kQ2hpbGQodGVzdE5vZGUpO1xuXG5cdC8vIG9uIG5vbi1IVE1MIGRvY3Vt
ZW50cyBpbm5lckhUTUwgYW5kIGdldEVsZW1lbnRzQnlJZCBkb2VzbnQgd29yayBwcm9wZXJseVxu
XHR0cnkge1xuXHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBpZD1cIicraWQrJ1wiPjwvYT4n
O1xuXHRcdGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChpZCk7XG5cdH0gY2F0Y2ggKGUpe31cblxuXHRpZiAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQp
e1xuXG5cdFx0dGVzdE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuXHRcdC8vIElFIHJl
dHVybnMgY29tbWVudCBub2RlcyBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29t
ZSBkb2N1bWVudHNcblx0XHR0ZXN0Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21t
ZW50KCcnKSk7XG5cdFx0c3RhclNlbGVjdHNDb21tZW50cyA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnKicpLmxlbmd0aCA+IDEpO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjbG9zZWQg
bm9kZXMgKEVHOlwiPC9mb28+XCIpIGZvciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBz
b21lIGRvY3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9v
PC9mb28+Jztcblx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
JyonKTtcblx0XHRcdHN0YXJTZWxlY3RzQ2xvc2VkID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQu
bGVuZ3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdH0g
Y2F0Y2ggKGUpe307XG5cblx0XHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE4gPSBzdGFyU2VsZWN0
c0NvbW1lbnRzIHx8IHN0YXJTZWxlY3RzQ2xvc2VkO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBlbGVt
ZW50cyB3aXRoIHRoZSBuYW1lIGluc3RlYWQgb2YganVzdCBpZCBmb3IgZ2V0RWxlbWVudHNCeUlk
IGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwg
PSAnPGEgbmFtZT1cIicrIGlkICsnXCI+PC9hPjxiIGlkPVwiJysgaWQgKydcIj48L2I+Jztcblx0
XHRcdGZlYXR1cmVzLmlkR2V0c05hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgPT09
IHRlc3ROb2RlLmZpcnN0Q2hpbGQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0aWYgKHRlc3RO
b2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpe1xuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIGdldEVs
ZW1lbnRzQnlDbGFzc05hbWUgY2FjaGVzIHJlc3VsdHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRl
c3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cImZcIj48L2E+PGEgY2xhc3M9XCJiXCI+PC9h
Pic7XG5cdFx0XHRcdHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGg7
XG5cdFx0XHRcdHRlc3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gJ2InO1xuXHRcdFx0XHRj
YWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoJ2InKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQv
LyBPcGVyYSA5LjYgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBkb2VzbnQgZGV0ZWN0cyB0aGUgY2xh
c3MgaWYgaXRzIG5vdCB0aGUgZmlyc3Qgb25lXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9k
ZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJhXCI+PC9hPjxhIGNsYXNzPVwiZiBiIGFcIj48L2E+
Jztcblx0XHRcdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04gPSAodGVzdE5vZGUuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSgnYScpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31c
blxuXHRcdFx0ZmVhdHVyZXMuYnJva2VuR0VCQ04gPSBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NO
YW1lIHx8IGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOO1xuXHRcdH1cblxuXHRcdGlmICh0ZXN0
Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKXtcblx0XHRcdC8vIElFIDggcmV0dXJucyBjbG9zZWQgbm9k
ZXMgKEVHOlwiPC9mb28+XCIpIGZvciBxdWVyeVNlbGVjdG9yQWxsKCcqJykgZm9yIHNvbWUgZG9j
dW1lbnRzXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9m
b28+Jztcblx0XHRcdFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7
XG5cdFx0XHRcdGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBID0gKHNlbGVjdGVkICYmICEh
c2VsZWN0ZWQubGVuZ3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycp
O1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIHF1ZXJ5U2VsZWN0
b3JBbGwgZG9lc250IHdvcmsgd2l0aCBtaXhlZGNhc2Ugb24gcXVpcmtzbW9kZVxuXHRcdFx0dHJ5
IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiTWlYXCI+PC9hPic7
XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQSA9ICF0ZXN0Tm9kZS5xdWVyeVNl
bGVjdG9yQWxsKCcuTWlYJykubGVuZ3RoO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQv
LyBXZWJraXQgYW5kIE9wZXJhIGRvbnQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbnMgb24gcXVlcnlT
ZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxz
ZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD1cInNlbGVjdGVkXCI+YTwvb3B0aW9uPjwvc2VsZWN0Pic7
XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0EgPSAodGVzdE5vZGUucXVlcnlTZWxl
Y3RvckFsbCgnOmNoZWNrZWQnKS5sZW5ndGggPT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xu
XG5cdFx0XHQvLyBJRSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGZvciBhdHRyWypeJF09XCJc
IiBzZWxlY3RvcnMgb24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVz
dE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVz
LmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tj
bGFzcyo9XCJcIl0nKS5sZW5ndGggIT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHR9
XG5cblx0XHQvLyBJRTYtNywgaWYgYSBmb3JtIGhhcyBhbiBpbnB1dCBvZiBpZCB4LCBmb3JtLmdl
dEF0dHJpYnV0ZSh4KSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dFxuXHRcdHRyeSB7
XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGZvcm0gYWN0aW9uPVwic1wiPjxpbnB1dCBp
ZD1cImFjdGlvblwiLz48L2Zvcm0+Jztcblx0XHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIg
PSAodGVzdE5vZGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpICE9ICdzJyk7XG5c
dFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0Ly8gbmF0aXZlIG1hdGNoZXNTZWxlY3RvciBmdW5jdGlv
blxuXG5cdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gcm9vdC5tYXRjaGVzIHx8
IC8qcm9vdC5tc01hdGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96TWF0Y2hlc1NlbGVjdG9yIHx8
IHJvb3Qud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXHRcdGlmIChmZWF0dXJlcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3IpIHRyeSB7XG5cdFx0XHQvLyBpZiBtYXRjaGVzU2VsZWN0b3IgdHJvd3MgZXJy
b3JzIG9uIGluY29ycmVjdCBzaW50YXhlcyB3ZSBjYW4gdXNlIGl0XG5cdFx0XHRmZWF0dXJlcy5u
YXRpdmVNYXRjaGVzU2VsZWN0b3IuY2FsbChyb290LCAnOnNsaWNrJyk7XG5cdFx0XHRmZWF0dXJl
cy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IgPSBudWxsO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHR9
XG5cblx0dHJ5IHtcblx0XHRyb290LnNsaWNrX2V4cGFuZG8gPSAxO1xuXHRcdGRlbGV0ZSByb290
LnNsaWNrX2V4cGFuZG87XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURIVE1MO1xu
XHR9IGNhdGNoIChlKXtcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJRFhNTDtcblx0
fVxuXG5cdHRlc3RSb290LnJlbW92ZUNoaWxkKHRlc3ROb2RlKTtcblx0dGVzdE5vZGUgPSBzZWxl
Y3RlZCA9IHRlc3RSb290ID0gbnVsbDtcblxuXHQvLyBnZXRBdHRyaWJ1dGVcblxuXHRmZWF0dXJl
cy5nZXRBdHRyaWJ1dGUgPSAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgJiYgYnJva2VuRm9ybUF0
dHJpYnV0ZUdldHRlcikgPyBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0g
dGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xuXHRcdGlmIChtZXRob2QpIHJldHVybiBtZXRo
b2QuY2FsbChub2RlKTtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRl
Tm9kZShuYW1lKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUpID8gYXR0cmlidXRlTm9kZS5u
b2RlVmFsdWUgOiBudWxsO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1l
dGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRyZXR1cm4gKG1ldGhvZCkg
PyBtZXRob2QuY2FsbChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9O1xuXG5c
dC8vIGhhc0F0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmhhc0F0dHJpYnV0ZSA9IChyb290ICYmIHRo
aXMuaXNOYXRpdmVDb2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBmdW5jdGlvbihub2RlLCBhdHRy
aWJ1dGUpe1xuXHRcdHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuXHR9IDog
ZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVO
b2RlKGF0dHJpYnV0ZSk7XG5cdFx0cmV0dXJuICEhKG5vZGUgJiYgKG5vZGUuc3BlY2lmaWVkIHx8
IG5vZGUubm9kZVZhbHVlKSk7XG5cdH07XG5cblx0Ly8gY29udGFpbnNcblx0Ly8gRklYTUU6IEFk
ZCBzcGVjczogbG9jYWwuY29udGFpbnMgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3IgeG1sIGFuZCBo
dG1sIGRvY3VtZW50cz9cblx0dmFyIG5hdGl2ZVJvb3RDb250YWlucyA9IHJvb3QgJiYgdGhpcy5p
c05hdGl2ZUNvZGUocm9vdC5jb250YWlucyksXG5cdFx0bmF0aXZlRG9jdW1lbnRDb250YWlucyA9
IGRvY3VtZW50ICYmIHRoaXMuaXNOYXRpdmVDb2RlKGRvY3VtZW50LmNvbnRhaW5zKTtcblxuXHRm
ZWF0dXJlcy5jb250YWlucyA9IChuYXRpdmVSb290Q29udGFpbnMgJiYgbmF0aXZlRG9jdW1lbnRD
b250YWlucykgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dC5j
b250YWlucyhub2RlKTtcblx0fSA6IChuYXRpdmVSb290Q29udGFpbnMgJiYgIW5hdGl2ZURvY3Vt
ZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0Ly8gSUU4IGRvZXMg
bm90IGhhdmUgLmNvbnRhaW5zIG9uIGRvY3VtZW50LlxuXHRcdHJldHVybiBjb250ZXh0ID09PSBu
b2RlIHx8ICgoY29udGV4dCA9PT0gZG9jdW1lbnQpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
IDogY29udGV4dCkuY29udGFpbnMobm9kZSk7XG5cdH0gOiAocm9vdCAmJiByb290LmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBj
b250ZXh0ID09PSBub2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9k
ZSkgJiAxNik7XG5cdH0gOiBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRpZiAobm9kZSkg
ZG8ge1xuXHRcdFx0aWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVybiB0cnVlO1xuXHRcdH0gd2hp
bGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlKSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xu
XG5cdC8vIGRvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0Ly8gY3JlZGl0cyB0byBTaXp6bGUgKGh0
dHA6Ly9zaXp6bGVqcy5jb20vKVxuXG5cdGZlYXR1cmVzLmRvY3VtZW50U29ydGVyID0gKHJvb3Qu
Y29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSByZXR1
cm4gMDtcblx0XHRyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6
IGEgPT09IGIgPyAwIDogMTtcblx0fSA6ICgnc291cmNlSW5kZXgnIGluIHJvb3QpID8gZnVuY3Rp
b24oYSwgYil7XG5cdFx0aWYgKCFhLnNvdXJjZUluZGV4IHx8ICFiLnNvdXJjZUluZGV4KSByZXR1
cm4gMDtcblx0XHRyZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cdH0gOiAo
ZG9jdW1lbnQuY3JlYXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLm93bmVy
RG9jdW1lbnQgfHwgIWIub3duZXJEb2N1bWVudCkgcmV0dXJuIDA7XG5cdFx0dmFyIGFSYW5nZSA9
IGEub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpLCBiUmFuZ2UgPSBiLm93bmVyRG9jdW1lbnQu
Y3JlYXRlUmFuZ2UoKTtcblx0XHRhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7XG5cdFx0YVJhbmdlLnNl
dEVuZChhLCAwKTtcblx0XHRiUmFuZ2Uuc2V0U3RhcnQoYiwgMCk7XG5cdFx0YlJhbmdlLnNldEVu
ZChiLCAwKTtcblx0XHRyZXR1cm4gYVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5T
VEFSVF9UT19FTkQsIGJSYW5nZSk7XG5cdH0gOiBudWxsO1xuXG5cdHJvb3QgPSBudWxsO1xuXG5c
dGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVz
W2ZlYXR1cmVdO1xuXHR9XG59O1xuXG4vLyBNYWluIE1ldGhvZFxuXG52YXIgcmVTaW1wbGVTZWxl
Y3RvciA9IC9eKFsjLl0/KSgoPzpbXFx3LV0rfFxcKikpJC8sXG5cdHJlRW1wdHlBdHRyaWJ1dGUg
PSAvXFxbLitbKiReXT0oPzpcIlwifCcnKT9cXF0vLFxuXHRxc2FGYWlsRXhwQ2FjaGUgPSB7fTtc
blxubG9jYWwuc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kLCBm
aXJzdCl7XG5cblx0dmFyIGZvdW5kID0gdGhpcy5mb3VuZCA9IChmaXJzdCkgPyBudWxsIDogKGFw
cGVuZCB8fCBbXSk7XG5cblx0aWYgKCFjb250ZXh0KSByZXR1cm4gZm91bmQ7XG5cdGVsc2UgaWYg
KGNvbnRleHQubmF2aWdhdG9yKSBjb250ZXh0ID0gY29udGV4dC5kb2N1bWVudDsgLy8gQ29udmVy
dCB0aGUgbm9kZSBmcm9tIGEgd2luZG93IHRvIGEgZG9jdW1lbnRcblx0ZWxzZSBpZiAoIWNvbnRl
eHQubm9kZVR5cGUpIHJldHVybiBmb3VuZDtcblxuXHQvLyBzZXR1cFxuXG5cdHZhciBwYXJzZWQs
IGksIG5vZGUsIG5vZGVzLFxuXHRcdHVuaXF1ZXMgPSB0aGlzLnVuaXF1ZXMgPSB7fSxcblx0XHRo
YXNPdGhlcnMgPSAhIShhcHBlbmQgJiYgYXBwZW5kLmxlbmd0aCksXG5cdFx0Y29udGV4dElzRG9j
dW1lbnQgPSAoY29udGV4dC5ub2RlVHlwZSA9PSA5KTtcblxuXHRpZiAodGhpcy5kb2N1bWVudCAh
PT0gKGNvbnRleHRJc0RvY3VtZW50ID8gY29udGV4dCA6IGNvbnRleHQub3duZXJEb2N1bWVudCkp
IHRoaXMuc2V0RG9jdW1lbnQoY29udGV4dCk7XG5cblx0Ly8gYXZvaWQgZHVwbGljYXRpbmcgaXRl
bXMgYWxyZWFkeSBpbiB0aGUgYXBwZW5kIGFycmF5XG5cdGlmIChoYXNPdGhlcnMpIGZvciAoaSA9
IGZvdW5kLmxlbmd0aDsgaS0tOykgdW5pcXVlc1t0aGlzLmdldFVJRChmb3VuZFtpXSldID0gdHJ1
ZTtcblxuXHQvLyBleHByZXNzaW9uIGNoZWNrc1xuXG5cdGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9
PSAnc3RyaW5nJyl7IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmdcblxuXHRcdC8qPHNpbXBsZS1z
ZWxlY3RvcnMtb3ZlcnJpZGU+Ki9cblx0XHR2YXIgc2ltcGxlU2VsZWN0b3IgPSBleHByZXNzaW9u
Lm1hdGNoKHJlU2ltcGxlU2VsZWN0b3IpO1xuXHRcdHNpbXBsZVNlbGVjdG9yczogaWYgKHNpbXBs
ZVNlbGVjdG9yKXtcblxuXHRcdFx0dmFyIHN5bWJvbCA9IHNpbXBsZVNlbGVjdG9yWzFdLFxuXHRc
dFx0XHRuYW1lID0gc2ltcGxlU2VsZWN0b3JbMl07XG5cblx0XHRcdGlmICghc3ltYm9sKXtcblxu
XHRcdFx0XHRpZiAobmFtZSA9PSAnKicgJiYgdGhpcy5icm9rZW5TdGFyR0VCVE4pIGJyZWFrIHNp
bXBsZVNlbGVjdG9ycztcblx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdO
YW1lKG5hbWUpO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xu
XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdGlmICgh
KGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9k
ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJyMnKXtcblxuXHRc
dFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwgIWNvbnRleHRJc0RvY3VtZW50KSBicmVh
ayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGUgPSBjb250ZXh0LmdldEVsZW1lbnRCeUlk
KG5hbWUpO1xuXHRcdFx0XHRpZiAoIW5vZGUpIHJldHVybiBmb3VuZDtcblx0XHRcdFx0aWYgKHRo
aXMuaWRHZXRzTmFtZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9
IG5hbWUpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4g
bm9kZSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdl
dFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJv
bCA9PSAnLicpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAoKCFjb250
ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgdGhpcy5icm9rZW5HRUJDTikgJiYgY29udGV4
dC5xdWVyeVNlbGVjdG9yQWxsKSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRpZiAo
Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0
XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuYW1lKTtcblx0
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRcdGZv
ciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhl
cnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRc
dFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2hDbGFzcyA9IG5l
dyBSZWdFeHAoJyhefFxcXFxzKScrIFNsaWNrLmVzY2FwZVJlZ0V4cChuYW1lKSArJyhcXFxcc3wk
KScpO1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicp
O1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0
XHRjbGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZTtcblx0XHRcdFx0XHRcdGlmICghKGNsYXNzTmFt
ZSAmJiBtYXRjaENsYXNzLnRlc3QoY2xhc3NOYW1lKSkpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0
aWYgKGZpcnN0KSByZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1
bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0
fVxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0
KGZvdW5kKTtcblx0XHRcdHJldHVybiAoZmlyc3QpID8gbnVsbCA6IGZvdW5kO1xuXG5cdFx0fVxu
XHRcdC8qPC9zaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cblx0XHQvKjxxdWVyeS1zZWxl
Y3Rvci1vdmVycmlkZT4qL1xuXHRcdHF1ZXJ5U2VsZWN0b3I6IGlmIChjb250ZXh0LnF1ZXJ5U2Vs
ZWN0b3JBbGwpe1xuXG5cdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnRcblx0XHRcdFx0fHwg
cXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dXG5cdFx0XHRcdC8vVE9ETzogb25seSBza2lwIHdo
ZW4gZXhwcmVzc2lvbiBpcyBhY3R1YWxseSBtaXhlZCBjYXNlXG5cdFx0XHRcdHx8IHRoaXMuYnJv
a2VuTWl4ZWRDYXNlUVNBXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkNoZWNrZWRRU0EgJiYgZXhw
cmVzc2lvbi5pbmRleE9mKCc6Y2hlY2tlZCcpID4gLTEpXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tl
bkVtcHR5QXR0cmlidXRlUVNBICYmIHJlRW1wdHlBdHRyaWJ1dGUudGVzdChleHByZXNzaW9uKSlc
blx0XHRcdFx0fHwgKCFjb250ZXh0SXNEb2N1bWVudCAvL0Fib3J0IHdoZW4gIWNvbnRleHRJc0Rv
Y3VtZW50IGFuZC4uLlxuXHRcdFx0XHRcdC8vICB0aGVyZSBhcmUgbXVsdGlwbGUgZXhwcmVzc2lv
bnMgaW4gdGhlIHNlbGVjdG9yXG5cdFx0XHRcdFx0Ly8gIHNpbmNlIHdlIGN1cnJlbnRseSBvbmx5
IGZpeCBub24tZG9jdW1lbnQgcm9vdGVkIFFTQSBmb3Igc2luZ2xlIGV4cHJlc3Npb24gc2VsZWN0
b3JzXG5cdFx0XHRcdFx0JiYgZXhwcmVzc2lvbi5pbmRleE9mKCcsJykgPiAtMVxuXHRcdFx0XHQp
XG5cdFx0XHRcdHx8IFNsaWNrLmRpc2FibGVRU0Fcblx0XHRcdCkgYnJlYWsgcXVlcnlTZWxlY3Rv
cjtcblxuXHRcdFx0dmFyIF9leHByZXNzaW9uID0gZXhwcmVzc2lvbiwgX2NvbnRleHQgPSBjb250
ZXh0LCBjdXJyZW50SWQ7XG5cdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0
Ly8gbm9uLWRvY3VtZW50IHJvb3RlZCBRU0Fcblx0XHRcdFx0Ly8gY3JlZGl0cyB0byBBbmRyZXcg
RHVwb250XG5cdFx0XHRcdGN1cnJlbnRJZCA9IF9jb250ZXh0LmdldEF0dHJpYnV0ZSgnaWQnKSwg
c2xpY2tpZCA9ICdzbGlja2lkX18nO1xuXHRcdFx0XHRfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lk
Jywgc2xpY2tpZCk7XG5cdFx0XHRcdF9leHByZXNzaW9uID0gJyMnICsgc2xpY2tpZCArICcgJyAr
IF9leHByZXNzaW9uO1xuXHRcdFx0XHRjb250ZXh0ID0gX2NvbnRleHQucGFyZW50Tm9kZTtcblx0
XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gY29udGV4dC5x
dWVyeVNlbGVjdG9yKF9leHByZXNzaW9uKSB8fCBudWxsO1xuXHRcdFx0XHRlbHNlIG5vZGVzID0g
Y29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKF9leHByZXNzaW9uKTtcblx0XHRcdH0gY2F0Y2ggKGUp
e1xuXHRcdFx0XHRxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0gPSAxO1xuXHRcdFx0XHRicmVh
ayBxdWVyeVNlbGVjdG9yO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKCFjb250ZXh0
SXNEb2N1bWVudCl7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRJZCkgX2NvbnRleHQuc2V0QXR0cmli
dXRlKCdpZCcsIGN1cnJlbnRJZCk7XG5cdFx0XHRcdFx0ZWxzZSBfY29udGV4dC5yZW1vdmVBdHRy
aWJ1dGUoJ2lkJyk7XG5cdFx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0O1xuXHRcdFx0XHR9XG5c
dFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBKSBmb3IgKGkgPSAw
OyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA+ICdAJyAm
JiAhKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2go
bm9kZSk7XG5cdFx0XHR9IGVsc2UgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0
XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91
bmQucHVzaChub2RlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0
KGZvdW5kKTtcblx0XHRcdHJldHVybiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvcXVlcnktc2Vs
ZWN0b3Itb3ZlcnJpZGU+Ki9cblxuXHRcdHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2UoZXhwcmVz
c2lvbik7XG5cdFx0aWYgKCFwYXJzZWQubGVuZ3RoKSByZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBp
ZiAoZXhwcmVzc2lvbiA9PSBudWxsKXsgLy8gdGhlcmUgaXMgbm8gZXhwcmVzc2lvblxuXHRcdHJl
dHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uLlNsaWNrKXsgLy8gZXhwcmVzc2lv
biBpcyBhIHBhcnNlZCBTbGljayBvYmplY3Rcblx0XHRwYXJzZWQgPSBleHByZXNzaW9uO1xuXHR9
IGVsc2UgaWYgKHRoaXMuY29udGFpbnMoY29udGV4dC5kb2N1bWVudEVsZW1lbnQgfHwgY29udGV4
dCwgZXhwcmVzc2lvbikpeyAvLyBleHByZXNzaW9uIGlzIGEgbm9kZVxuXHRcdChmb3VuZCkgPyBm
b3VuZC5wdXNoKGV4cHJlc3Npb24pIDogZm91bmQgPSBleHByZXNzaW9uO1xuXHRcdHJldHVybiBm
b3VuZDtcblx0fSBlbHNlIHsgLy8gb3RoZXIganVua1xuXHRcdHJldHVybiBmb3VuZDtcblx0fVxu
XG5cdC8qPHBzZXVkby1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5c
dC8vIGNhY2hlIGVsZW1lbnRzIGZvciB0aGUgbnRoIHNlbGVjdG9yc1xuXG5cdHRoaXMucG9zTlRI
ID0ge307XG5cdHRoaXMucG9zTlRITGFzdCA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGUgPSB7fTtc
blx0dGhpcy5wb3NOVEhUeXBlTGFzdCA9IHt9O1xuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9y
cz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gaWYgYXBwZW5kIGlzIG51bGwgYW5k
IHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUgZXhwcmVzc2lvbiB1c2Ug
cHVzaEFycmF5LCBlbHNlIHVzZSBwdXNoVUlEXG5cdHRoaXMucHVzaCA9ICghaGFzT3RoZXJzICYm
IChmaXJzdCB8fCAocGFyc2VkLmxlbmd0aCA9PSAxICYmIHBhcnNlZC5leHByZXNzaW9uc1swXS5s
ZW5ndGggPT0gMSkpKSA/IHRoaXMucHVzaEFycmF5IDogdGhpcy5wdXNoVUlEO1xuXG5cdGlmIChm
b3VuZCA9PSBudWxsKSBmb3VuZCA9IFtdO1xuXG5cdC8vIGRlZmF1bHQgZW5naW5lXG5cblx0dmFy
IGosIG0sIG47XG5cdHZhciBjb21iaW5hdG9yLCB0YWcsIGlkLCBjbGFzc0xpc3QsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3M7XG5cdHZhciBjdXJyZW50SXRlbXMsIGN1cnJlbnRFeHByZXNz
aW9uLCBjdXJyZW50Qml0LCBsYXN0Qml0LCBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9u
cztcblxuXHRzZWFyY2g6IGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Np
b25zW2ldKTsgaSsrKSBmb3IgKGogPSAwOyAoY3VycmVudEJpdCA9IGN1cnJlbnRFeHByZXNzaW9u
W2pdKTsgaisrKXtcblxuXHRcdGNvbWJpbmF0b3IgPSAnY29tYmluYXRvcjonICsgY3VycmVudEJp
dC5jb21iaW5hdG9yO1xuXHRcdGlmICghdGhpc1tjb21iaW5hdG9yXSkgY29udGludWUgc2VhcmNo
O1xuXG5cdFx0dGFnICAgICAgICA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gY3VycmVudEJpdC50
YWcgOiBjdXJyZW50Qml0LnRhZy50b1VwcGVyQ2FzZSgpO1xuXHRcdGlkICAgICAgICAgPSBjdXJy
ZW50Qml0LmlkO1xuXHRcdGNsYXNzTGlzdCAgPSBjdXJyZW50Qml0LmNsYXNzTGlzdDtcblx0XHRj
bGFzc2VzICAgID0gY3VycmVudEJpdC5jbGFzc2VzO1xuXHRcdGF0dHJpYnV0ZXMgPSBjdXJyZW50
Qml0LmF0dHJpYnV0ZXM7XG5cdFx0cHNldWRvcyAgICA9IGN1cnJlbnRCaXQucHNldWRvcztcblx0
XHRsYXN0Qml0ICAgID0gKGogPT09IChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggLSAxKSk7XG5c
blx0XHR0aGlzLmJpdFVuaXF1ZXMgPSB7fTtcblxuXHRcdGlmIChsYXN0Qml0KXtcblx0XHRcdHRo
aXMudW5pcXVlcyA9IHVuaXF1ZXM7XG5cdFx0XHR0aGlzLmZvdW5kID0gZm91bmQ7XG5cdFx0fSBl
bHNlIHtcblx0XHRcdHRoaXMudW5pcXVlcyA9IHt9O1xuXHRcdFx0dGhpcy5mb3VuZCA9IFtdO1xu
XHRcdH1cblxuXHRcdGlmIChqID09PSAwKXtcblx0XHRcdHRoaXNbY29tYmluYXRvcl0oY29udGV4
dCwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0
XHRcdGlmIChmaXJzdCAmJiBsYXN0Qml0ICYmIGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCkgZm9yIChtID0gMCwgbiA9
IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspe1xuXHRcdFx0XHR0aGlzW2NvbWJpbmF0
b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cywgY2xhc3NMaXN0KTtcblx0XHRcdFx0aWYgKGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xu
XHRcdFx0fSBlbHNlIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsg
bSsrKSB0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHR9XG5cblx0XHRjdXJyZW50SXRl
bXMgPSB0aGlzLmZvdW5kO1xuXHR9XG5cblx0Ly8gc2hvdWxkIHNvcnQgaWYgdGhlcmUgYXJlIG5v
ZGVzIGluIGFwcGVuZCBhbmQgaWYgeW91IHBhc3MgbXVsdGlwbGUgZXhwcmVzc2lvbnMuXG5cdGlm
IChoYXNPdGhlcnMgfHwgKHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGggPiAxKSkgdGhpcy5zb3J0
KGZvdW5kKTtcblxuXHRyZXR1cm4gKGZpcnN0KSA/IChmb3VuZFswXSB8fCBudWxsKSA6IGZvdW5k
O1xufTtcblxuLy8gVXRpbHNcblxubG9jYWwudWlkeCA9IDE7XG5sb2NhbC51aWRrID0gJ3NsaWNr
LXVuaXF1ZWlkJztcblxubG9jYWwuZ2V0VUlEWE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHZhciB1
aWQgPSBub2RlLmdldEF0dHJpYnV0ZSh0aGlzLnVpZGspO1xuXHRpZiAoIXVpZCl7XG5cdFx0dWlk
ID0gdGhpcy51aWR4Kys7XG5cdFx0bm9kZS5zZXRBdHRyaWJ1dGUodGhpcy51aWRrLCB1aWQpO1xu
XHR9XG5cdHJldHVybiB1aWQ7XG59O1xuXG5sb2NhbC5nZXRVSURIVE1MID0gZnVuY3Rpb24obm9k
ZSl7XG5cdHJldHVybiBub2RlLnVuaXF1ZU51bWJlciB8fCAobm9kZS51bmlxdWVOdW1iZXIgPSB0
aGlzLnVpZHgrKyk7XG59O1xuXG4vLyBzb3J0IGJhc2VkIG9uIHRoZSBzZXREb2N1bWVudCBkb2N1
bWVudFNvcnRlciBtZXRob2QuXG5cbmxvY2FsLnNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKXtcblx0
aWYgKCF0aGlzLmRvY3VtZW50U29ydGVyKSByZXR1cm4gcmVzdWx0cztcblx0cmVzdWx0cy5zb3J0
KHRoaXMuZG9jdW1lbnRTb3J0ZXIpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qPHBzZXVk
by1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5jYWNoZU5U
SCA9IHt9O1xuXG5sb2NhbC5tYXRjaE5USCA9IC9eKFsrLV0/XFxkKik/KFthLXpdKyk/KFsrLV1c
XGQrKT8kLztcblxubG9jYWwucGFyc2VOVEhBcmd1bWVudCA9IGZ1bmN0aW9uKGFyZ3VtZW50KXtc
blx0dmFyIHBhcnNlZCA9IGFyZ3VtZW50Lm1hdGNoKHRoaXMubWF0Y2hOVEgpO1xuXHRpZiAoIXBh
cnNlZCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgc3BlY2lhbCA9IHBhcnNlZFsyXSB8fCBmYWxzZTtc
blx0dmFyIGEgPSBwYXJzZWRbMV0gfHwgMTtcblx0aWYgKGEgPT0gJy0nKSBhID0gLTE7XG5cdHZh
ciBiID0gK3BhcnNlZFszXSB8fCAwO1xuXHRwYXJzZWQgPVxuXHRcdChzcGVjaWFsID09ICduJylc
dD8ge2E6IGEsIGI6IGJ9IDpcblx0XHQoc3BlY2lhbCA9PSAnb2RkJylcdD8ge2E6IDIsIGI6IDF9
IDpcblx0XHQoc3BlY2lhbCA9PSAnZXZlbicpXHQ/IHthOiAyLCBiOiAwfSA6IHthOiAwLCBiOiBh
fTtcblxuXHRyZXR1cm4gKHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdID0gcGFyc2VkKTtcbn07XG5c
bmxvY2FsLmNyZWF0ZU5USFBzZXVkbyA9IGZ1bmN0aW9uKGNoaWxkLCBzaWJsaW5nLCBwb3NpdGlv
bnMsIG9mVHlwZSl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0dmFy
IHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdGlmICghdGhpc1twb3NpdGlvbnNdW3VpZF0p
e1xuXHRcdFx0dmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdGlmICghcGFyZW50
KSByZXR1cm4gZmFsc2U7XG5cdFx0XHR2YXIgZWwgPSBwYXJlbnRbY2hpbGRdLCBjb3VudCA9IDE7
XG5cdFx0XHRpZiAob2ZUeXBlKXtcblx0XHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFt
ZTtcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlTmFtZSAhPSBub2RlTmFtZSkg
Y29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBj
b3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0fSBl
bHNlIHtcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlVHlwZSAhPSAxKSBjb250
aW51ZTtcblx0XHRcdFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50
Kys7XG5cdFx0XHRcdH0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9XG5cdFx0
fVxuXHRcdGFyZ3VtZW50ID0gYXJndW1lbnQgfHwgJ24nO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlz
LmNhY2hlTlRIW2FyZ3VtZW50XSB8fCB0aGlzLnBhcnNlTlRIQXJndW1lbnQoYXJndW1lbnQpO1xu
XHRcdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIGEgPSBwYXJzZWQuYSwgYiA9
IHBhcnNlZC5iLCBwb3MgPSB0aGlzW3Bvc2l0aW9uc11bdWlkXTtcblx0XHRpZiAoYSA9PSAwKSBy
ZXR1cm4gYiA9PSBwb3M7XG5cdFx0aWYgKGEgPiAwKXtcblx0XHRcdGlmIChwb3MgPCBiKSByZXR1
cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChiIDwgcG9zKSByZXR1cm4gZmFsc2U7
XG5cdFx0fVxuXHRcdHJldHVybiAoKHBvcyAtIGIpICUgYSkgPT0gMDtcblx0fTtcbn07XG5cbi8q
PC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2Fs
LnB1c2hBcnJheSA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3Mpe1xuXHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKSB0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG59O1xuXG5s
b2NhbC5wdXNoVUlEID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyl7XG5cdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0aWYgKCF0aGlz
LnVuaXF1ZXNbdWlkXSAmJiB0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcykpe1xuXHRcdHRoaXMudW5pcXVlc1t1aWRdID0gdHJ1ZTtc
blx0XHR0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG5cdH1cbn07XG5cbmxvY2FsLm1hdGNoTm9kZSA9
IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9yKXtcblx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYg
dGhpcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ipe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhp
cy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvci5yZXBsYWNlKC9cXFso
W149XSspPVxccyooW14nXCJcXF1dKz8pXFxzKlxcXS9nLCAnWyQxPVwiJDJcIl0nKSk7XG5cdFx0
fSBjYXRjaCAobWF0Y2hFcnJvcil7fVxuXHR9XG5cblx0dmFyIHBhcnNlZCA9IHRoaXMuU2xpY2su
cGFyc2Uoc2VsZWN0b3IpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIHRydWU7XG5cblx0Ly8gc2lt
cGxlIChzaW5nbGUpIHNlbGVjdG9yc1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVz
c2lvbnMsIHNpbXBsZUV4cENvdW50ZXIgPSAwLCBpLCBjdXJyZW50RXhwcmVzc2lvbjtcblx0Zm9y
IChpID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspe1xuXHRc
dGlmIChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggPT0gMSl7XG5cdFx0XHR2YXIgZXhwID0gY3Vy
cmVudEV4cHJlc3Npb25bMF07XG5cdFx0XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsICh0
aGlzLmlzWE1MRG9jdW1lbnQpID8gZXhwLnRhZyA6IGV4cC50YWcudG9VcHBlckNhc2UoKSwgZXhw
LmlkLCBleHAuY2xhc3NlcywgZXhwLmF0dHJpYnV0ZXMsIGV4cC5wc2V1ZG9zKSkgcmV0dXJuIHRy
dWU7XG5cdFx0XHRzaW1wbGVFeHBDb3VudGVyKys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHNpbXBs
ZUV4cENvdW50ZXIgPT0gcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBub2Rl
cyA9IHRoaXMuc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHBhcnNlZCksIGl0ZW07XG5cdGZvciAoaSA9
IDA7IGl0ZW0gPSBub2Rlc1tpKytdOyl7XG5cdFx0aWYgKGl0ZW0gPT09IG5vZGUpIHJldHVybiB0
cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbmxvY2FsLm1hdGNoUHNldWRvID0gZnVu
Y3Rpb24obm9kZSwgbmFtZSwgYXJndW1lbnQpe1xuXHR2YXIgcHNldWRvTmFtZSA9ICdwc2V1ZG86
JyArIG5hbWU7XG5cdGlmICh0aGlzW3BzZXVkb05hbWVdKSByZXR1cm4gdGhpc1twc2V1ZG9OYW1l
XShub2RlLCBhcmd1bWVudCk7XG5cdHZhciBhdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZShu
b2RlLCBuYW1lKTtcblx0cmV0dXJuIChhcmd1bWVudCkgPyBhcmd1bWVudCA9PSBhdHRyaWJ1dGUg
OiAhIWF0dHJpYnV0ZTtcbn07XG5cbmxvY2FsLm1hdGNoU2VsZWN0b3IgPSBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRhZyl7XG5c
dFx0dmFyIG5vZGVOYW1lID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBub2RlLm5vZGVOYW1lIDog
bm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdGlmICh0YWcgPT0gJyonKXtcblx0XHRc
dGlmIChub2RlTmFtZSA8ICdAJykgcmV0dXJuIGZhbHNlOyAvLyBGaXggZm9yIGNvbW1lbnQgbm9k
ZXMgYW5kIGNsb3NlZCBub2Rlc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAobm9kZU5hbWUgIT0g
dGFnKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlkICYmIG5vZGUuZ2V0QXR0
cmlidXRlKCdpZCcpICE9IGlkKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIGksIHBhcnQsIGNscztc
blx0aWYgKGNsYXNzZXMpIGZvciAoaSA9IGNsYXNzZXMubGVuZ3RoOyBpLS07KXtcblx0XHRjbHMg
PSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCAnY2xhc3MnKTtcblx0XHRpZiAoIShjbHMgJiYgY2xh
c3Nlc1tpXS5yZWdleHAudGVzdChjbHMpKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChhdHRy
aWJ1dGVzKSBmb3IgKGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IGF0
dHJpYnV0ZXNbaV07XG5cdFx0aWYgKHBhcnQub3BlcmF0b3IgPyAhcGFydC50ZXN0KHRoaXMuZ2V0
QXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgOiAhdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgcGFy
dC5rZXkpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHBzZXVkb3MpIGZvciAoaSA9IHBzZXVk
b3MubGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gcHNldWRvc1tpXTtcblx0XHRpZiAoIXRoaXMu
bWF0Y2hQc2V1ZG8obm9kZSwgcGFydC5rZXksIHBhcnQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5c
dH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG52YXIgY29tYmluYXRvcnMgPSB7XG5cblx0JyAnOiBm
dW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFz
c0xpc3QpeyAvLyBhbGwgY2hpbGQgbm9kZXMsIGFueSBsZXZlbFxuXG5cdFx0dmFyIGksIGl0ZW0s
IGNoaWxkcmVuO1xuXG5cdFx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQpe1xuXHRcdFx0Z2V0QnlJ
ZDogaWYgKGlkKXtcblx0XHRcdFx0aXRlbSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpO1xuXHRcdFx0XHRpZiAoKCFpdGVtICYmIG5vZGUuYWxsKSB8fCAodGhpcy5pZEdldHNOYW1l
ICYmIGl0ZW0gJiYgaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBpZCkp
e1xuXHRcdFx0XHRcdC8vIGFsbFtpZF0gcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIHdpdGggdGhh
dCBuYW1lIG9yIGlkIGluc2lkZSBub2RlXG5cdFx0XHRcdFx0Ly8gaWYgdGhlcmVzIGp1c3Qgb25l
IGl0IHdpbGwgcmV0dXJuIHRoZSBlbGVtZW50LCBlbHNlIGl0IHdpbGwgYmUgYSBjb2xsZWN0aW9u
XG5cdFx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmFsbFtpZF07XG5cdFx0XHRcdFx0aWYgKCFjaGls
ZHJlbikgcmV0dXJuO1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW5bMF0pIGNoaWxkcmVuID0gW2No
aWxkcmVuXTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspe1xu
XHRcdFx0XHRcdFx0dmFyIGlkTm9kZSA9IGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKTtcblx0
XHRcdFx0XHRcdGlmIChpZE5vZGUgJiYgaWROb2RlLm5vZGVWYWx1ZSA9PSBpZCl7XG5cdFx0XHRc
dFx0XHRcdHRoaXMucHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBz
ZXVkb3MpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9
XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXRlbSl7XG5cdFx0
XHRcdFx0Ly8gaWYgdGhlIGNvbnRleHQgaXMgaW4gdGhlIGRvbSB3ZSByZXR1cm4sIGVsc2Ugd2Ug
d2lsbCB0cnkgR0VCVE4sIGJyZWFraW5nIHRoZSBnZXRCeUlkIGxhYmVsXG5cdFx0XHRcdFx0aWYg
KHRoaXMuY29udGFpbnModGhpcy5yb290LCBub2RlKSkgcmV0dXJuO1xuXHRcdFx0XHRcdGVsc2Ug
YnJlYWsgZ2V0QnlJZDtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmRvY3VtZW50ICE9PSBub2Rl
ICYmICF0aGlzLmNvbnRhaW5zKG5vZGUsIGl0ZW0pKSByZXR1cm47XG5cdFx0XHRcdHRoaXMucHVz
aChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0
XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRnZXRCeUNsYXNzOiBpZiAoY2xhc3NlcyAmJiBub2Rl
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRj
aGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc0xpc3Quam9pbignICcp
KTtcblx0XHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0
QnlDbGFzcztcblx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlz
LnB1c2goaXRlbSwgdGFnLCBpZCwgbnVsbCwgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRc
dHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Z2V0QnlUYWc6IHtcblx0XHRcdGNoaWxkcmVu
ID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuXHRcdFx0aWYgKCEoY2hpbGRyZW4g
JiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlUYWc7XG5cdFx0XHRpZiAoIXRoaXMuYnJv
a2VuU3RhckdFQlROKSB0YWcgPSBudWxsO1xuXHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxk
cmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCc+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBjaGlsZHJlblxuXHRcdGlm
ICgobm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkpIGRvIHtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBl
ID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKTtcblx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKTtcblx0fSxcblxu
XHQnKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpeyAvLyBuZXh0IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5n
KSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBp
ZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5c
dH0sXG5cblx0J14nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gZmlyc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5maXJzdENoaWxkO1xu
XHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2Ug
dGhpc1snY29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCd+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3Ncblx0XHR3aGls
ZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAh
PSAxKSBjb250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRc
dGlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNb
dWlkXSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCcrKyc6IGZ1bmN0aW9uKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmcg
YW5kIHByZXZpb3VzIHNpYmxpbmdcblx0XHR0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9y
OiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0s
XG5cblx0J35+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyl7IC8vIG5leHQgc2libGluZ3MgYW5kIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0dGhp
c1snY29tYmluYXRvcjp+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0dGhpc1snY29tYmluYXRvcjohfiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchJzogZnVuY3Rpb24obm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGFsbCBwYXJlbnQgbm9kZXMg
dXAgdG8gZG9jdW1lbnRcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSBpZiAo
bm9kZSAhPT0gdGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchPic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgcGFyZW50IChv
bmUgbGV2ZWwpXG5cdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRpZiAobm9kZSAhPT0g
dGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nXG5cdFx0d2hp
bGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAx
KXtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnIV4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbGFzdCBjaGls
ZFxuXHRcdG5vZGUgPSBub2RlLmxhc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAo
bm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5c
blx0JyF+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2
aW91c1NpYmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xu
XHRcdFx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5p
cXVlc1t1aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0
XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KTtcblx0XHR9XG5cdH1cblxufTtcblxuZm9yICh2YXIgYyBpbiBjb21iaW5hdG9ycykgbG9jYWxb
J2NvbWJpbmF0b3I6JyArIGNdID0gY29tYmluYXRvcnNbY107XG5cbnZhciBwc2V1ZG9zID0ge1xu
XG5cdC8qPHBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZW1wdHknOiBmdW5jdGlvbihub2RlKXtc
blx0XHR2YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0cmV0dXJuICEoY2hpbGQgJiYg
Y2hpbGQubm9kZVR5cGUgPT0gMSkgJiYgIShub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250
ZW50IHx8ICcnKS5sZW5ndGg7XG5cdH0sXG5cblx0J25vdCc6IGZ1bmN0aW9uKG5vZGUsIGV4cHJl
c3Npb24pe1xuXHRcdHJldHVybiAhdGhpcy5tYXRjaE5vZGUobm9kZSwgZXhwcmVzc2lvbik7XG5c
dH0sXG5cblx0J2NvbnRhaW5zJzogZnVuY3Rpb24obm9kZSwgdGV4dCl7XG5cdFx0cmV0dXJuIChu
b2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5pbmRleE9mKHRleHQpID4g
LTE7XG5cdH0sXG5cblx0J2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUg
KChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSBy
ZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3QtY2hpbGQnOiBm
dW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYg
KG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9
LFxuXG5cdCdvbmx5LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2Rl
O1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9k
ZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGls
ZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZVR5cGUgPT0gMSkgcmV0
dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPG50aC1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0J250aC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RD
aGlsZCcsICduZXh0U2libGluZycsICdwb3NOVEgnKSxcblxuXHQnbnRoLWxhc3QtY2hpbGQnOiBs
b2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9z
TlRITGFzdCcpLFxuXG5cdCdudGgtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmly
c3RDaGlsZCcsICduZXh0U2libGluZycsICdwb3NOVEhUeXBlJywgdHJ1ZSksXG5cblx0J250aC1s
YXN0LW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91
c1NpYmxpbmcnLCAncG9zTlRIVHlwZUxhc3QnLCB0cnVlKSxcblxuXHQnaW5kZXgnOiBmdW5jdGlv
bihub2RlLCBpbmRleCl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2Rl
LCAnJyArIChpbmRleCArIDEpKTtcblx0fSxcblxuXHQnZXZlbic6IGZ1bmN0aW9uKG5vZGUpe1xu
XHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuJyk7XG5cdH0sXG5c
blx0J29kZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNo
aWxkJ10obm9kZSwgJzJuKzEnKTtcblx0fSxcblxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+
Ki9cblxuXHQvKjxvZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZmlyc3Qtb2YtdHlw
ZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5c
dFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFt
ZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5c
dCdsYXN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2Rl
Lm5vZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9k
ZS5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xu
XHR9LFxuXG5cdCdvbmx5LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9
IG5vZGUsIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2
LnByZXZpb3VzU2libGluZykpIGlmIChwcmV2Lm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4g
ZmFsc2U7XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4
dFNpYmxpbmcpKSBpZiAobmV4dC5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xu
XHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPC9vZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+
Ki9cblxuXHQvLyBjdXN0b20gcHNldWRvc1xuXG5cdCdlbmFibGVkJzogZnVuY3Rpb24obm9kZSl7
XG5cdFx0cmV0dXJuICFub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdkaXNhYmxlZCc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdjaGVja2Vk
JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuY2hlY2tlZCB8fCBub2RlLnNlbGVj
dGVkO1xuXHR9LFxuXG5cdCdmb2N1cyc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlz
LmlzSFRNTERvY3VtZW50ICYmIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbm9kZSAm
JiAobm9kZS5ocmVmIHx8IG5vZGUudHlwZSB8fCB0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCAndGFi
aW5kZXgnKSk7XG5cdH0sXG5cblx0J3Jvb3QnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4g
KG5vZGUgPT09IHRoaXMucm9vdCk7XG5cdH0sXG5cblx0J3NlbGVjdGVkJzogZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuIG5vZGUuc2VsZWN0ZWQ7XG5cdH1cblxuXHQvKjwvcHNldWRvLXNlbGVj
dG9ycz4qL1xufTtcblxuZm9yICh2YXIgcCBpbiBwc2V1ZG9zKSBsb2NhbFsncHNldWRvOicgKyBw
XSA9IHBzZXVkb3NbcF07XG5cbi8vIGF0dHJpYnV0ZXMgbWV0aG9kc1xuXG52YXIgYXR0cmlidXRl
R2V0dGVycyA9IGxvY2FsLmF0dHJpYnV0ZUdldHRlcnMgPSB7XG5cblx0J2Zvcic6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuICgnaHRtbEZvcicgaW4gdGhpcykgPyB0aGlzLmh0bWxGb3IgOiB0aGlz
LmdldEF0dHJpYnV0ZSgnZm9yJyk7XG5cdH0sXG5cblx0J2hyZWYnOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAoJ2hyZWYnIGluIHRoaXMpID8gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnLCAyKSA6
IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gKHRoaXMuc3R5bGUpID8gdGhpcy5zdHlsZS5jc3NUZXh0IDogdGhpcy5n
ZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cdH0sXG5cblx0J3RhYmluZGV4JzogZnVuY3Rpb24oKXtc
blx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgndGFiaW5kZXgn
KTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQp
ID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9LFxuXG5cdCd0eXBlJzogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcblx0fSxcblxu
XHQnbWF4bGVuZ3RoJzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMu
Z2V0QXR0cmlidXRlTm9kZSgnbWF4TGVuZ3RoJyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2Rl
ICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDog
bnVsbDtcblx0fVxuXG59O1xuXG5hdHRyaWJ1dGVHZXR0ZXJzLk1BWExFTkdUSCA9IGF0dHJpYnV0
ZUdldHRlcnMubWF4TGVuZ3RoID0gYXR0cmlidXRlR2V0dGVycy5tYXhsZW5ndGg7XG5cbi8vIFNs
aWNrXG5cbnZhciBTbGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5T
bGljay52ZXJzaW9uID0gJzEuMS43JztcblxuLy8gU2xpY2sgZmluZGVyXG5cblNsaWNrLnNlYXJj
aCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCl7XG5cdHJldHVybiBsb2Nh
bC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kKTtcbn07XG5cblNsaWNrLmZpbmQg
PSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChj
b250ZXh0LCBleHByZXNzaW9uLCBudWxsLCB0cnVlKTtcbn07XG5cbi8vIFNsaWNrIGNvbnRhaW5t
ZW50IGNoZWNrZXJcblxuU2xpY2suY29udGFpbnMgPSBmdW5jdGlvbihjb250YWluZXIsIG5vZGUp
e1xuXHRsb2NhbC5zZXREb2N1bWVudChjb250YWluZXIpO1xuXHRyZXR1cm4gbG9jYWwuY29udGFp
bnMoY29udGFpbmVyLCBub2RlKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBnZXR0ZXJcblxu
U2xpY2suZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERv
Y3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xu
fTtcblxuU2xpY2suaGFzQXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2Fs
LnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuaGFzQXR0cmlidXRlKG5vZGUsIG5h
bWUpO1xufTtcblxuLy8gU2xpY2sgbWF0Y2hlclxuXG5TbGljay5tYXRjaCA9IGZ1bmN0aW9uKG5v
ZGUsIHNlbGVjdG9yKXtcblx0aWYgKCEobm9kZSAmJiBzZWxlY3RvcikpIHJldHVybiBmYWxzZTtc
blx0aWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdGxv
Y2FsLnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwubWF0Y2hOb2RlKG5vZGUsIHNl
bGVjdG9yKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBhY2Nlc3NvclxuXG5TbGljay5kZWZp
bmVBdHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxvY2FsLmF0dHJpYnV0
ZUdldHRlcnNbbmFtZV0gPSBmbjtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBB
dHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lKXtcblx0cmV0dXJuIGxvY2FsLmF0dHJpYnV0
ZUdldHRlcnNbbmFtZV07XG59O1xuXG4vLyBTbGljayBwc2V1ZG8gYWNjZXNzb3JcblxuU2xpY2su
ZGVmaW5lUHNldWRvID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbFsncHNldWRvOicgKyBu
YW1lXSA9IGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gZm4uY2FsbChub2Rl
LCBhcmd1bWVudCk7XG5cdH07XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2subG9va3VwUHNl
dWRvID0gZnVuY3Rpb24obmFtZSl7XG5cdHZhciBwc2V1ZG8gPSBsb2NhbFsncHNldWRvOicgKyBu
YW1lXTtcblx0aWYgKHBzZXVkbykgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0XHRyZXR1
cm4gcHNldWRvLmNhbGwodGhpcywgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gbnVsbDtcbn07
XG5cbi8vIFNsaWNrIG92ZXJyaWRlcyBhY2Nlc3NvclxuXG5TbGljay5vdmVycmlkZSA9IGZ1bmN0
aW9uKHJlZ2V4cCwgZm4pe1xuXHRsb2NhbC5vdmVycmlkZShyZWdleHAsIGZuKTtcblx0cmV0dXJu
IHRoaXM7XG59O1xuXG5TbGljay5pc1hNTCA9IGxvY2FsLmlzWE1MO1xuXG5TbGljay51aWRPZiA9
IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbG9jYWwuZ2V0VUlESFRNTChub2RlKTtcbn07XG5c
bmlmICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21t
b25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0Nv
bW1vbkpTPiovdGhpcyk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudFxuXG5kZXNjcmlwdGlv
bjogT25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBpdGVtcyBpbiBNb29Ub29scy4gQ29udGFpbnMg
dGhlIGRvbGxhciBmdW5jdGlvbiwgdGhlIGRvbGxhcnMgZnVuY3Rpb24sIGFuZCBhbiBoYW5kZnVs
IG9mIGNyb3NzLWJyb3dzZXIsIHRpbWUtc2F2ZXIgbWV0aG9kcyB0byBsZXQgeW91IGVhc2lseSB3
b3JrIHdpdGggSFRNTCBFbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5c
bnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwgQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE9i
amVjdCwgTnVtYmVyLCBTbGljay5QYXJzZXIsIFNsaWNrLkZpbmRlcl1cblxucHJvdmlkZXM6IFtF
bGVtZW50LCBFbGVtZW50cywgJCwgJCQsIElGcmFtZSwgU2VsZWN0b3JzXVxuXG4uLi5cbiovXG5c
bnZhciBFbGVtZW50ID0gdGhpcy5FbGVtZW50ID0gZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdHZh
ciBrb25zdHJ1Y3RvciA9IEVsZW1lbnQuQ29uc3RydWN0b3JzW3RhZ107XG5cdGlmIChrb25zdHJ1
Y3RvcikgcmV0dXJuIGtvbnN0cnVjdG9yKHByb3BzKTtcblx0aWYgKHR5cGVvZiB0YWcgIT0gJ3N0
cmluZycpIHJldHVybiBkb2N1bWVudC5pZCh0YWcpLnNldChwcm9wcyk7XG5cblx0aWYgKCFwcm9w
cykgcHJvcHMgPSB7fTtcblxuXHRpZiAoISgvXltcXHctXSskLykudGVzdCh0YWcpKXtcblx0XHR2
YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodGFnKS5leHByZXNzaW9uc1swXVswXTtcblx0XHR0YWcg
PSAocGFyc2VkLnRhZyA9PSAnKicpID8gJ2RpdicgOiBwYXJzZWQudGFnO1xuXHRcdGlmIChwYXJz
ZWQuaWQgJiYgcHJvcHMuaWQgPT0gbnVsbCkgcHJvcHMuaWQgPSBwYXJzZWQuaWQ7XG5cblx0XHR2
YXIgYXR0cmlidXRlcyA9IHBhcnNlZC5hdHRyaWJ1dGVzO1xuXHRcdGlmIChhdHRyaWJ1dGVzKSBm
b3IgKHZhciBhdHRyLCBpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtc
blx0XHRcdGF0dHIgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdFx0aWYgKHByb3BzW2F0dHIua2V5XSAh
PSBudWxsKSBjb250aW51ZTtcblxuXHRcdFx0aWYgKGF0dHIudmFsdWUgIT0gbnVsbCAmJiBhdHRy
Lm9wZXJhdG9yID09ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0ci52YWx1ZTtcblx0XHRcdGVs
c2UgaWYgKCFhdHRyLnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBwcm9wc1thdHRyLmtleV0gPSB0
cnVlO1xuXHRcdH1cblxuXHRcdGlmIChwYXJzZWQuY2xhc3NMaXN0ICYmIHByb3BzWydjbGFzcydd
ID09IG51bGwpIHByb3BzWydjbGFzcyddID0gcGFyc2VkLmNsYXNzTGlzdC5qb2luKCcgJyk7XG5c
dH1cblxuXHRyZXR1cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcsIHByb3BzKTtcbn07XG5cblxu
aWYgKEJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucHJvdG90eXBlID0gQnJvd3Nlci5FbGVt
ZW50LnByb3RvdHlwZTtcblx0Ly8gSUU4IGFuZCBJRTkgcmVxdWlyZSB0aGUgd3JhcHBpbmcuXG5c
dEVsZW1lbnQucHJvdG90eXBlLl9maXJlRXZlbnQgPSAoZnVuY3Rpb24oZmlyZUV2ZW50KXtcblx0
XHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGZpcmVFdmVudC5j
YWxsKHRoaXMsIHR5cGUsIGV2ZW50KTtcblx0XHR9O1xuXHR9KShFbGVtZW50LnByb3RvdHlwZS5m
aXJlRXZlbnQpO1xufVxuXG5uZXcgVHlwZSgnRWxlbWVudCcsIEVsZW1lbnQpLm1pcnJvcihmdW5j
dGlvbihuYW1lKXtcblx0aWYgKEFycmF5LnByb3RvdHlwZVtuYW1lXSkgcmV0dXJuO1xuXG5cdHZh
ciBvYmogPSB7fTtcblx0b2JqW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0cyA9
IFtdLCBhcmdzID0gYXJndW1lbnRzLCBlbGVtZW50cyA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRo
aXNbaV0sIHJlc3VsdCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQs
IGFyZ3MpO1xuXHRcdFx0ZWxlbWVudHMgPSAoZWxlbWVudHMgJiYgdHlwZU9mKHJlc3VsdCkgPT0g
J2VsZW1lbnQnKTtcblx0XHR9XG5cdFx0cmV0dXJuIChlbGVtZW50cykgPyBuZXcgRWxlbWVudHMo
cmVzdWx0cykgOiByZXN1bHRzO1xuXHR9O1xuXG5cdEVsZW1lbnRzLmltcGxlbWVudChvYmopO1xu
fSk7XG5cbmlmICghQnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wYXJlbnQgPSBPYmplY3Q7
XG5cblx0RWxlbWVudC5Qcm90b3R5cGUgPSB7XG5cdFx0JyRjb25zdHJ1Y3Rvcic6IEVsZW1lbnQs
XG5cdFx0JyRmYW1pbHknOiBGdW5jdGlvbi5jb252ZXJ0KCdlbGVtZW50JykuaGlkZSgpXG5cdH07
XG5cblx0RWxlbWVudC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0XHRFbGVtZW50
LlByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblx0fSk7XG59XG5cbkVsZW1lbnQuQ29uc3RydWN0
b3JzID0ge307XG5cblxuXG52YXIgSUZyYW1lID0gbmV3IFR5cGUoJ0lGcmFtZScsIGZ1bmN0aW9u
KCl7XG5cdHZhciBwYXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge1xuXHRcdHByb3BlcnRp
ZXM6IFR5cGUuaXNPYmplY3QsXG5cdFx0aWZyYW1lOiBmdW5jdGlvbihvYmope1xuXHRcdFx0cmV0
dXJuIChvYmogIT0gbnVsbCk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgcHJvcHMgPSBwYXJhbXMu
cHJvcGVydGllcyB8fCB7fSwgaWZyYW1lO1xuXHRpZiAocGFyYW1zLmlmcmFtZSkgaWZyYW1lID0g
ZG9jdW1lbnQuaWQocGFyYW1zLmlmcmFtZSk7XG5cdHZhciBvbmxvYWQgPSBwcm9wcy5vbmxvYWQg
fHwgZnVuY3Rpb24oKXt9O1xuXHRkZWxldGUgcHJvcHMub25sb2FkO1xuXHRwcm9wcy5pZCA9IHBy
b3BzLm5hbWUgPSBbcHJvcHMuaWQsIHByb3BzLm5hbWUsIGlmcmFtZSA/IChpZnJhbWUuaWQgfHwg
aWZyYW1lLm5hbWUpIDogJ0lGcmFtZV8nICsgU3RyaW5nLnVuaXF1ZUlEKCldLnBpY2soKTtcblx0
aWZyYW1lID0gbmV3IEVsZW1lbnQoaWZyYW1lIHx8ICdpZnJhbWUnLCBwcm9wcyk7XG5cblx0dmFy
IG9uTG9hZCA9IGZ1bmN0aW9uKCl7XG5cdFx0b25sb2FkLmNhbGwoaWZyYW1lLmNvbnRlbnRXaW5k
b3cpO1xuXHR9O1xuXG5cdGlmICh3aW5kb3cuZnJhbWVzW3Byb3BzLmlkXSkgb25Mb2FkKCk7XG5c
dGVsc2UgaWZyYW1lLmFkZExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcblx0cmV0dXJuIGlmcmFt
ZTtcbn0pO1xuXG52YXIgRWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzID0gZnVuY3Rpb24obm9kZXMp
e1xuXHRpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoKXtcblx0XHR2YXIgdW5pcXVlcyA9IHt9LCBu
b2RlO1xuXHRcdGZvciAodmFyIGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0dmFy
IHVpZCA9IFNsaWNrLnVpZE9mKG5vZGUpO1xuXHRcdFx0aWYgKCF1bmlxdWVzW3VpZF0pe1xuXHRc
dFx0XHR1bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnB1c2gobm9kZSk7XG5cdFx0
XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5FbGVtZW50cy5wcm90b3R5cGUgPSB7bGVuZ3RoOiAwfTtc
bkVsZW1lbnRzLnBhcmVudCA9IEFycmF5O1xuXG5uZXcgVHlwZSgnRWxlbWVudHMnLCBFbGVtZW50
cykuaW1wbGVtZW50KHtcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlciwgYmluZCl7XG5cdFx0
aWYgKCFmaWx0ZXIpIHJldHVybiB0aGlzO1xuXHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXku
ZmlsdGVyKHRoaXMsICh0eXBlT2YoZmlsdGVyKSA9PSAnc3RyaW5nJykgPyBmdW5jdGlvbihpdGVt
KXtcblx0XHRcdHJldHVybiBpdGVtLm1hdGNoKGZpbHRlcik7XG5cdFx0fSA6IGZpbHRlciwgYmlu
ZCkpO1xuXHR9LnByb3RlY3QoKSxcblxuXHRwdXNoOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsZW5n
dGggPSB0aGlzLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNb
aV0pO1xuXHRcdFx0aWYgKGl0ZW0pIHRoaXNbbGVuZ3RoKytdID0gaXRlbTtcblx0XHR9XG5cdFx0
cmV0dXJuICh0aGlzLmxlbmd0aCA9IGxlbmd0aCk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHVuc2hp
ZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGl0ZW1zID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAs
IGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9j
dW1lbnQuaWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSBpdGVtcy5wdXNoKGl0ZW0p
O1xuXHRcdH1cblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkodGhpcywg
aXRlbXMpO1xuXHR9LnByb3RlY3QoKSxcblxuXHRjb25jYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IG5ld0VsZW1lbnRzID0gbmV3IEVsZW1lbnRzKHRoaXMpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGFyZ3Vt
ZW50c1tpXTtcblx0XHRcdGlmIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSkgbmV3RWxlbWVudHMu
YXBwZW5kKGl0ZW0pO1xuXHRcdFx0ZWxzZSBuZXdFbGVtZW50cy5wdXNoKGl0ZW0pO1xuXHRcdH1c
blx0XHRyZXR1cm4gbmV3RWxlbWVudHM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGFwcGVuZDogZnVu
Y3Rpb24oY29sbGVjdGlvbil7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxl
bmd0aDsgaSA8IGw7IGkrKykgdGhpcy5wdXNoKGNvbGxlY3Rpb25baV0pO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR3aGlsZSAo
dGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhdO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LnByb3RlY3QoKVxuXG59KTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG4vLyBGRiwgSUVc
bnZhciBzcGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBvYmplY3QgPSB7JzAnOiAwLCAn
MSc6IDEsIGxlbmd0aDogMn07XG5cbnNwbGljZS5jYWxsKG9iamVjdCwgMSwgMSk7XG5pZiAob2Jq
ZWN0WzFdID09IDEpIEVsZW1lbnRzLmltcGxlbWVudCgnc3BsaWNlJywgZnVuY3Rpb24oKXtcblx0
dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHR2YXIgcmVzdWx0ID0gc3BsaWNlLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7XG5cdHdoaWxlIChsZW5ndGggPj0gdGhpcy5sZW5ndGgpIGRlbGV0ZSB0
aGlzW2xlbmd0aC0tXTtcblx0cmV0dXJuIHJlc3VsdDtcbn0ucHJvdGVjdCgpKTtcblxuQXJyYXku
Zm9yRWFjaE1ldGhvZChmdW5jdGlvbihtZXRob2QsIG5hbWUpe1xuXHRFbGVtZW50cy5pbXBsZW1l
bnQobmFtZSwgbWV0aG9kKTtcbn0pO1xuXG5BcnJheS5taXJyb3IoRWxlbWVudHMpO1xuXG4vKjxs
dElFOD4qL1xudmFyIGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTDtcbnRyeSB7XG5cdGNyZWF0ZUVs
ZW1lbnRBY2NlcHRzSFRNTCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aW5wdXQgbmFtZT14
PicpLm5hbWUgPT0gJ3gnKTtcbn0gY2F0Y2ggKGUpe31cblxudmFyIGVzY2FwZVF1b3RlcyA9IGZ1
bmN0aW9uKGh0bWwpe1xuXHRyZXR1cm4gKCcnICsgaHRtbCkucmVwbGFjZSgvJi9nLCAnJmFtcDsn
KS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59O1xuLyo8L2x0SUU4PiovXG5cbi8qPGx0SUU5
PiovXG4vLyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFy
IGNhbkNoYW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0
ZGl2LmlubmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0g
ISFkaXYuaW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtc
bi8qPC9sdElFOT4qL1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld0VsZW1lbnQ6IGZ1
bmN0aW9uKHRhZywgcHJvcHMpe1xuXHRcdGlmIChwcm9wcyl7XG5cdFx0XHRpZiAocHJvcHMuY2hl
Y2tlZCAhPSBudWxsKSBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cdFx0
XHRpZiAoKHByb3BzLnR5cGUgPT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09ICdyYWRpbycp
ICYmIHByb3BzLnZhbHVlID09IG51bGwpIHByb3BzLnZhbHVlID0gJ29uJztcblx0XHRcdC8qPGx0
SUU5PiovIC8vIElFIG5lZWRzIHRoZSB0eXBlIHRvIGJlIHNldCBiZWZvcmUgY2hhbmdpbmcgY29u
dGVudCBvZiBzdHlsZSBlbGVtZW50XG5cdFx0XHRpZiAoIWNhbkNoYW5nZVN0eWxlSFRNTCAmJiB0
YWcgPT0gJ3N0eWxlJyl7XG5cdFx0XHRcdHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzdHlsZScpO1xuXHRcdFx0XHRzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0
eXBlJywgJ3RleHQvY3NzJyk7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSBkZWxldGUgcHJvcHMu
dHlwZTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaWQoc3R5bGVFbGVtZW50KS5zZXQocHJvcHMpO1xu
XHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHQvKjxsdElFOD4qLy8vIEZpeCBmb3Ig
cmVhZG9ubHkgbmFtZSBhbmQgdHlwZSBwcm9wZXJ0aWVzIGluIElFIDwgOFxuXHRcdFx0aWYgKGNy
ZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTCl7XG5cdFx0XHRcdHRhZyA9ICc8JyArIHRhZztcblx0XHRc
dFx0aWYgKHByb3BzLm5hbWUpIHRhZyArPSAnIG5hbWU9XCInICsgZXNjYXBlUXVvdGVzKHByb3Bz
Lm5hbWUpICsgJ1wiJztcblx0XHRcdFx0aWYgKHByb3BzLnR5cGUpIHRhZyArPSAnIHR5cGU9XCIn
ICsgZXNjYXBlUXVvdGVzKHByb3BzLnR5cGUpICsgJ1wiJztcblx0XHRcdFx0dGFnICs9ICc+Jztc
blx0XHRcdFx0ZGVsZXRlIHByb3BzLm5hbWU7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy50eXBlO1xu
XHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU4PiovXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlkKHRo
aXMuY3JlYXRlRWxlbWVudCh0YWcpKS5zZXQocHJvcHMpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xu
XG4oZnVuY3Rpb24oKXtcblxuU2xpY2sudWlkT2Yod2luZG93KTtcblNsaWNrLnVpZE9mKGRvY3Vt
ZW50KTtcblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdUZXh0Tm9kZTogZnVuY3Rpb24o
dGV4dCl7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdH0sXG5cblx0
Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLndpbmRvdztcblx0fSxcblxuXHRp
ZDogKGZ1bmN0aW9uKCl7XG5cblx0XHR2YXIgdHlwZXMgPSB7XG5cblx0XHRcdHN0cmluZzogZnVu
Y3Rpb24oaWQsIG5vY2FzaCwgZG9jKXtcblx0XHRcdFx0aWQgPSBTbGljay5maW5kKGRvYywgJyMn
ICsgaWQucmVwbGFjZSgvKFxcVykvZywgJ1xcXFwkMScpKTtcblx0XHRcdFx0cmV0dXJuIChpZCkg
PyB0eXBlcy5lbGVtZW50KGlkLCBub2Nhc2gpIDogbnVsbDtcblx0XHRcdH0sXG5cblx0XHRcdGVs
ZW1lbnQ6IGZ1bmN0aW9uKGVsLCBub2Nhc2gpe1xuXHRcdFx0XHRTbGljay51aWRPZihlbCk7XG5c
dFx0XHRcdGlmICghbm9jYXNoICYmICFlbC4kZmFtaWx5ICYmICEoL14oPzpvYmplY3R8ZW1iZWQp
JC9pKS50ZXN0KGVsLnRhZ05hbWUpKXtcblx0XHRcdFx0XHR2YXIgZmlyZUV2ZW50ID0gZWwuZmly
ZUV2ZW50O1xuXHRcdFx0XHRcdC8vIHdyYXBwaW5nIG5lZWRlZCBpbiBJRTcsIG9yIGVsc2UgY3Jh
c2hcblx0XHRcdFx0XHRlbC5fZmlyZUV2ZW50ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRc
dFx0XHRcdFx0cmV0dXJuIGZpcmVFdmVudCh0eXBlLCBldmVudCk7XG5cdFx0XHRcdFx0fTtcblx0
XHRcdFx0XHRPYmplY3QuYXBwZW5kKGVsLCBFbGVtZW50LlByb3RvdHlwZSk7XG5cdFx0XHRcdH1c
blx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0fSxcblxuXHRcdFx0b2JqZWN0OiBmdW5jdGlvbihv
YmosIG5vY2FzaCwgZG9jKXtcblx0XHRcdFx0aWYgKG9iai50b0VsZW1lbnQpIHJldHVybiB0eXBl
cy5lbGVtZW50KG9iai50b0VsZW1lbnQoZG9jKSwgbm9jYXNoKTtcblx0XHRcdFx0cmV0dXJuIG51
bGw7XG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dHlwZXMudGV4dG5vZGUgPSB0eXBlcy53aGl0
ZXNwYWNlID0gdHlwZXMud2luZG93ID0gdHlwZXMuZG9jdW1lbnQgPSBmdW5jdGlvbih6ZXJvKXtc
blx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oZWwsIG5v
Y2FzaCwgZG9jKXtcblx0XHRcdGlmIChlbCAmJiBlbC4kZmFtaWx5ICYmIGVsLnVuaXF1ZU51bWJl
cikgcmV0dXJuIGVsO1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YoZWwpO1xuXHRcdFx0cmV0dXJu
ICh0eXBlc1t0eXBlXSkgPyB0eXBlc1t0eXBlXShlbCwgbm9jYXNoLCBkb2MgfHwgZG9jdW1lbnQp
IDogbnVsbDtcblx0XHR9O1xuXG5cdH0pKClcblxufSk7XG5cbmlmICh3aW5kb3cuJCA9PSBudWxs
KSBXaW5kb3cuaW1wbGVtZW50KCckJywgZnVuY3Rpb24oZWwsIG5jKXtcblx0cmV0dXJuIGRvY3Vt
ZW50LmlkKGVsLCBuYywgdGhpcy5kb2N1bWVudCk7XG59KTtcblxuV2luZG93LmltcGxlbWVudCh7
XG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZG9jdW1lbnQ7
XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
XG5cbn0pO1xuXG5bRG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5c
dGdldEVsZW1lbnRzOiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gU2xpY2suc2Vh
cmNoKHRoaXMsIGV4cHJlc3Npb24sIG5ldyBFbGVtZW50cyk7XG5cdH0sXG5cblx0Z2V0RWxlbWVu
dDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZp
bmQodGhpcywgZXhwcmVzc2lvbikpO1xuXHR9XG5cbn0pO1xuXG52YXIgY29udGFpbnMgPSB7Y29u
dGFpbnM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHRyZXR1cm4gU2xpY2suY29udGFpbnModGhpcywg
ZWxlbWVudCk7XG59fTtcblxuaWYgKCFkb2N1bWVudC5jb250YWlucykgRG9jdW1lbnQuaW1wbGVt
ZW50KGNvbnRhaW5zKTtcbmlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY29udGFp
bnMpIEVsZW1lbnQuaW1wbGVtZW50KGNvbnRhaW5zKTtcblxuXG5cbi8vIHRyZWUgd2Fsa2luZ1xu
XG52YXIgaW5qZWN0Q29tYmluYXRvciA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNvbWJpbmF0b3Ip
e1xuXHRpZiAoIWV4cHJlc3Npb24pIHJldHVybiBjb21iaW5hdG9yO1xuXG5cdGV4cHJlc3Npb24g
PSBPYmplY3QuY2xvbmUoU2xpY2sucGFyc2UoZXhwcmVzc2lvbikpO1xuXG5cdHZhciBleHByZXNz
aW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSBleHByZXNzaW9u
cy5sZW5ndGg7IGktLTspXG5cdFx0ZXhwcmVzc2lvbnNbaV1bMF0uY29tYmluYXRvciA9IGNvbWJp
bmF0b3I7XG5cblx0cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5c
dGdldE5leHQ6ICd+Jyxcblx0Z2V0UHJldmlvdXM6ICchficsXG5cdGdldFBhcmVudDogJyEnXG59
LCBmdW5jdGlvbihjb21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRo
b2QsIGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnQoaW5q
ZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbk9i
amVjdC5mb3JFYWNoKHtcblx0Z2V0QWxsTmV4dDogJ34nLFxuXHRnZXRBbGxQcmV2aW91czogJyF+
Jyxcblx0Z2V0U2libGluZ3M6ICd+ficsXG5cdGdldENoaWxkcmVuOiAnPicsXG5cdGdldFBhcmVu
dHM6ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBs
ZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRF
bGVtZW50cyhpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtcblx0fSk7
XG59KTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldEZpcnN0OiBmdW5jdGlvbihleHBy
ZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVj
dENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSlbMF0pO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1
bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5zZWFyY2go
dGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKS5nZXRMYXN0KCkpO1xuXHR9
LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3Vt
ZW50LndpbmRvdztcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5vd25lckRvY3VtZW50O1xuXHR9LFxuXG5cdGdldEVsZW1lbnRCeUlkOiBmdW5jdGlv
bihpZCl7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgJyMnICsgKCcn
ICsgaWQpLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSkpO1xuXHR9LFxuXG5cdG1hdGNoOiBm
dW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIWV4cHJlc3Npb24gfHwgU2xpY2subWF0
Y2godGhpcywgZXhwcmVzc2lvbik7XG5cdH1cblxufSk7XG5cblxuXG5pZiAod2luZG93LiQkID09
IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQkJywgZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRpZiAo
YXJndW1lbnRzLmxlbmd0aCA9PSAxKXtcblx0XHRpZiAodHlwZW9mIHNlbGVjdG9yID09ICdzdHJp
bmcnKSByZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHNlbGVjdG9yLCBuZXcgRWxl
bWVudHMpO1xuXHRcdGVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxlKHNlbGVjdG9yKSkgcmV0dXJu
IG5ldyBFbGVtZW50cyhzZWxlY3Rvcik7XG5cdH1cblx0cmV0dXJuIG5ldyBFbGVtZW50cyhhcmd1
bWVudHMpO1xufSk7XG5cbi8vIEluc2VydGVyc1xuXG52YXIgaW5zZXJ0ZXJzID0ge1xuXG5cdGJl
Zm9yZTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1l
bnQucGFyZW50Tm9kZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRl
eHQsIGVsZW1lbnQpO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50
KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQp
IHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5uZXh0U2libGluZyk7XG5cdH0s
XG5cblx0Ym90dG9tOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50LmFw
cGVuZENoaWxkKGNvbnRleHQpO1xuXHR9LFxuXG5cdHRvcDogZnVuY3Rpb24oY29udGV4dCwgZWxl
bWVudCl7XG5cdFx0ZWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5maXJzdENo
aWxkKTtcblx0fVxuXG59O1xuXG5pbnNlcnRlcnMuaW5zaWRlID0gaW5zZXJ0ZXJzLmJvdHRvbTtc
blxuXG5cbi8vIGdldFByb3BlcnR5IC8gc2V0UHJvcGVydHlcblxudmFyIHByb3BlcnR5R2V0dGVy
cyA9IHt9LCBwcm9wZXJ0eVNldHRlcnMgPSB7fTtcblxuLy8gcHJvcGVydGllc1xuXG52YXIgcHJv
cGVydGllcyA9IHt9O1xuQXJyYXkuZm9yRWFjaChbXG5cdCd0eXBlJywgJ3ZhbHVlJywgJ2RlZmF1
bHRWYWx1ZScsICdhY2Nlc3NLZXknLCAnY2VsbFBhZGRpbmcnLCAnY2VsbFNwYWNpbmcnLCAnY29s
U3BhbicsXG5cdCdmcmFtZUJvcmRlcicsICdyb3dTcGFuJywgJ3RhYkluZGV4JywgJ3VzZU1hcCdc
bl0sIGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cHJvcGVydGllc1twcm9wZXJ0eS50b0xvd2VyQ2Fz
ZSgpXSA9IHByb3BlcnR5O1xufSk7XG5cbnByb3BlcnRpZXMuaHRtbCA9ICdpbm5lckhUTUwnO1xu
cHJvcGVydGllcy50ZXh0ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnRleHRDb250
ZW50ID09IG51bGwpID8gJ2lubmVyVGV4dCc6ICd0ZXh0Q29udGVudCc7XG5cbk9iamVjdC5mb3JF
YWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHJlYWwsIGtleSl7XG5cdHByb3BlcnR5U2V0dGVyc1tr
ZXldID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbcmVhbF0gPSB2YWx1ZTtcblx0
fTtcblx0cHJvcGVydHlHZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4g
bm9kZVtyZWFsXTtcblx0fTtcbn0pO1xuXG4vKjxsdElFOT4qL1xucHJvcGVydHlTZXR0ZXJzLnRl
eHQgPSAoZnVuY3Rpb24oKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRp
ZiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpIG5vZGUuc2V0KCdodG1sJywgdmFsdWUpO1xu
XHRcdGVsc2Ugbm9kZVtwcm9wZXJ0aWVzLnRleHRdID0gdmFsdWU7XG5cdH07XG59KShwcm9wZXJ0
eVNldHRlcnMudGV4dCk7XG5cbnByb3BlcnR5R2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKGdldHRl
cil7XG5cdHJldHVybiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUuZ2V0KCd0YWcn
KSA9PSAnc3R5bGUnKSA/IG5vZGUuaW5uZXJIVE1MIDogZ2V0dGVyKG5vZGUpO1xuXHR9O1xufSko
cHJvcGVydHlHZXR0ZXJzLnRleHQpO1xuLyo8L2x0SUU5PiovXG5cbi8vIEJvb2xlYW5zXG5cbnZh
ciBib29scyA9IFtcblx0J2NvbXBhY3QnLCAnbm93cmFwJywgJ2lzbWFwJywgJ2RlY2xhcmUnLCAn
bm9zaGFkZScsICdjaGVja2VkJyxcblx0J2Rpc2FibGVkJywgJ3JlYWRPbmx5JywgJ211bHRpcGxl
JywgJ3NlbGVjdGVkJywgJ25vcmVzaXplJyxcblx0J2RlZmVyJywgJ2RlZmF1bHRDaGVja2VkJywg
J2F1dG9mb2N1cycsICdjb250cm9scycsICdhdXRvcGxheScsXG5cdCdsb29wJ1xuXTtcblxudmFy
IGJvb2xlYW5zID0ge307XG5BcnJheS5mb3JFYWNoKGJvb2xzLCBmdW5jdGlvbihib29sKXtcblx0
dmFyIGxvd2VyID0gYm9vbC50b0xvd2VyQ2FzZSgpO1xuXHRib29sZWFuc1tsb3dlcl0gPSBib29s
O1xuXHRwcm9wZXJ0eVNldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRc
dG5vZGVbYm9vbF0gPSAhIXZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNbbG93ZXJdID0g
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuICEhbm9kZVtib29sXTtcblx0fTtcbn0pO1xuXG4v
LyBTcGVjaWFsIGNhc2VzXG5cbk9iamVjdC5hcHBlbmQocHJvcGVydHlTZXR0ZXJzLCB7XG5cblx0
J2NsYXNzJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnY2xhc3NOYW1lJyBpbiBub2Rl
KSA/IG5vZGUuY2xhc3NOYW1lID0gKHZhbHVlIHx8ICcnKSA6IG5vZGUuc2V0QXR0cmlidXRlKCdj
bGFzcycsIHZhbHVlKTtcblx0fSxcblxuXHQnZm9yJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xu
XHRcdCgnaHRtbEZvcicgaW4gbm9kZSkgPyBub2RlLmh0bWxGb3IgPSB2YWx1ZSA6IG5vZGUuc2V0
QXR0cmlidXRlKCdmb3InLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24obm9k
ZSwgdmFsdWUpe1xuXHRcdChub2RlLnN0eWxlKSA/IG5vZGUuc3R5bGUuY3NzVGV4dCA9IHZhbHVl
IDogbm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgdmFsdWUpO1xuXHR9LFxuXG5cdCd2YWx1ZSc6
IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlLnZhbHVlID0gKHZhbHVlICE9IG51bGwp
ID8gdmFsdWUgOiAnJztcblx0fVxuXG59KTtcblxucHJvcGVydHlHZXR0ZXJzWydjbGFzcyddID0g
ZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiAoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNs
YXNzTmFtZSB8fCBudWxsIDogbm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG59O1xuXG4vKiA8
d2Via2l0PiAqL1xudmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4v
LyBJRSBzZXRzIHR5cGUgYXMgcmVhZG9ubHkgYW5kIHRocm93c1xudHJ5IHsgZWwudHlwZSA9ICdi
dXR0b24nOyB9IGNhdGNoIChlKXt9XG5pZiAoZWwudHlwZSAhPSAnYnV0dG9uJykgcHJvcGVydHlT
ZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdG5vZGUuc2V0QXR0cmlidXRl
KCd0eXBlJywgdmFsdWUpO1xufTtcbmVsID0gbnVsbDtcbi8qIDwvd2Via2l0PiAqL1xuXG4vKjxJ
RT4qL1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0
eWxlIGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFy
IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNl
O1xuXHR0cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7
fSc7XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1
cm4gZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIGlucHV0ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaW5wdXQnKSwgdm9sYXRpbGVJbnB1dFZhbHVlLCBodG1sNUlucHV0U3VwcG9y
dDtcblxuLy8gIzIxNzhcbmlucHV0LnZhbHVlID0gJ3QnO1xuaW5wdXQudHlwZSA9ICdzdWJtaXQn
O1xudm9sYXRpbGVJbnB1dFZhbHVlID0gaW5wdXQudmFsdWUgIT0gJ3QnO1xuXG4vLyAjMjQ0MyAt
IElFIHRocm93cyBcIkludmFsaWQgQXJndW1lbnRcIiB3aGVuIHRyeWluZyB0byB1c2UgaHRtbDUg
aW5wdXQgdHlwZXNcbnRyeSB7XG5cdGlucHV0LnZhbHVlID0gJyc7XG5cdGlucHV0LnR5cGUgPSAn
ZW1haWwnO1xuXHRodG1sNUlucHV0U3VwcG9ydCA9IGlucHV0LnR5cGUgPT0gJ2VtYWlsJztcbn0g
Y2F0Y2ggKGUpe31cblxuaW5wdXQgPSBudWxsO1xuXG5pZiAodm9sYXRpbGVJbnB1dFZhbHVlIHx8
ICFodG1sNUlucHV0U3VwcG9ydCkgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2Rl
LCB0eXBlKXtcblx0dHJ5IHtcblx0XHR2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuXHRcdG5vZGUu
dHlwZSA9IHR5cGU7XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKXt9XG59
O1xuLyo8L0lFPiovXG5cbi8qIGdldFByb3BlcnR5LCBzZXRQcm9wZXJ0eSAqL1xuXG4vKiA8bHRJ
RTk+ICovXG52YXIgcG9sbHV0ZXNHZXRBdHRyaWJ1dGUgPSAoZnVuY3Rpb24oZGl2KXtcblx0ZGl2
LnJhbmRvbSA9ICdhdHRyaWJ1dGUnO1xuXHRyZXR1cm4gKGRpdi5nZXRBdHRyaWJ1dGUoJ3JhbmRv
bScpID09ICdhdHRyaWJ1dGUnKTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtc
blxudmFyIGhhc0Nsb25lQnVnID0gKGZ1bmN0aW9uKHRlc3Qpe1xuXHR0ZXN0LmlubmVySFRNTCA9
ICc8b2JqZWN0PjxwYXJhbSBuYW1lPVwic2hvdWxkX2ZpeFwiIHZhbHVlPVwidGhlIHVua25vd25c
IiAvPjwvb2JqZWN0Pic7XG5cdHJldHVybiB0ZXN0LmNsb25lTm9kZSh0cnVlKS5maXJzdENoaWxk
LmNoaWxkTm9kZXMubGVuZ3RoICE9IDE7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KSk7XG4vKiA8L2x0SUU5PiAqL1xuXG52YXIgaGFzQ2xhc3NMaXN0ID0gISFkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKS5jbGFzc0xpc3Q7XG5cbnZhciBjbGFzc2VzID0gZnVuY3Rpb24oY2xh
c3NOYW1lKXtcblx0dmFyIGNsYXNzTmFtZXMgPSAoY2xhc3NOYW1lIHx8ICcnKS5jbGVhbigpLnNw
bGl0KCcgJyksIHVuaXF1ZXMgPSB7fTtcblx0cmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGZ1bmN0
aW9uKGNsYXNzTmFtZSl7XG5cdFx0aWYgKGNsYXNzTmFtZSAhPT0gJycgJiYgIXVuaXF1ZXNbY2xh
c3NOYW1lXSkgcmV0dXJuIHVuaXF1ZXNbY2xhc3NOYW1lXSA9IGNsYXNzTmFtZTtcblx0fSk7XG59
O1xuXG52YXIgYWRkVG9DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xp
c3QuYWRkKG5hbWUpO1xufTtcblxudmFyIHJlbW92ZUZyb21DbGFzc0xpc3QgPSBmdW5jdGlvbihu
YW1lKXtcblx0dGhpcy5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xufTtcblxuRWxlbWVudC5pbXBs
ZW1lbnQoe1xuXG5cdHNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0dmFy
IHNldHRlciA9IHByb3BlcnR5U2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChz
ZXR0ZXIpe1xuXHRcdFx0c2V0dGVyKHRoaXMsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0
LyogPGx0SUU5PiAqL1xuXHRcdFx0dmFyIGF0dHJpYnV0ZVdoaXRlTGlzdDtcblx0XHRcdGlmIChw
b2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0ID0gdGhpcy5yZXRyaWV2ZSgn
JGF0dHJpYnV0ZVdoaXRlTGlzdCcsIHt9KTtcblx0XHRcdC8qIDwvbHRJRTk+ICovXG5cblx0XHRc
dGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7
XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRl
KSBkZWxldGUgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAq
L1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgJycgKyB2
YWx1ZSk7XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0
cmlidXRlKSBhdHRyaWJ1dGVXaGl0ZUxpc3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0XHQvKiA8L2x0
SUU5PiAqL1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXRQ
cm9wZXJ0aWVzOiBmdW5jdGlvbihhdHRyaWJ1dGVzKXtcblx0XHRmb3IgKHZhciBhdHRyaWJ1dGUg
aW4gYXR0cmlidXRlcykgdGhpcy5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbYXR0
cmlidXRlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0UHJvcGVydHk6IGZ1bmN0
aW9uKG5hbWUpe1xuXHRcdHZhciBnZXR0ZXIgPSBwcm9wZXJ0eUdldHRlcnNbbmFtZS50b0xvd2Vy
Q2FzZSgpXTtcblx0XHRpZiAoZ2V0dGVyKSByZXR1cm4gZ2V0dGVyKHRoaXMpO1xuXHRcdC8qIDxs
dElFOT4gKi9cblx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpe1xuXHRcdFx0dmFyIGF0dHIg
PSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUobmFtZSksIGF0dHJpYnV0ZVdoaXRlTGlzdCA9IHRoaXMu
cmV0cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5cdFx0XHRpZiAoIWF0dHIpIHJl
dHVybiBudWxsO1xuXHRcdFx0aWYgKGF0dHIuZXhwYW5kbyAmJiAhYXR0cmlidXRlV2hpdGVMaXN0
W25hbWVdKXtcblx0XHRcdFx0dmFyIG91dGVyID0gdGhpcy5vdXRlckhUTUw7XG5cdFx0XHRcdC8v
IHNlZ21lbnQgYnkgdGhlIG9wZW5pbmcgdGFnIGFuZCBmaW5kIG1lbnRpb24gb2YgYXR0cmlidXRl
IG5hbWVcblx0XHRcdFx0aWYgKG91dGVyLnN1YnN0cigwLCBvdXRlci5zZWFyY2goL1xcLz9bJ1wi
XT8+KD8hW148XSo8WydcIl0pLykpLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gbnVsbDtcblx0
XHRcdFx0YXR0cmlidXRlV2hpdGVMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5c
dFx0LyogPC9sdElFOT4gKi9cblx0XHR2YXIgcmVzdWx0ID0gU2xpY2suZ2V0QXR0cmlidXRlKHRo
aXMsIG5hbWUpO1xuXHRcdHJldHVybiAoIXJlc3VsdCAmJiAhU2xpY2suaGFzQXR0cmlidXRlKHRo
aXMsIG5hbWUpKSA/IG51bGwgOiByZXN1bHQ7XG5cdH0sXG5cblx0Z2V0UHJvcGVydGllczogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKTtcblx0XHRy
ZXR1cm4gYXJncy5tYXAodGhpcy5nZXRQcm9wZXJ0eSwgdGhpcykuYXNzb2NpYXRlKGFyZ3MpO1xu
XHR9LFxuXG5cdHJlbW92ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gdGhp
cy5zZXRQcm9wZXJ0eShuYW1lLCBudWxsKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0aWVzOiBm
dW5jdGlvbigpe1xuXHRcdEFycmF5LmVhY2goYXJndW1lbnRzLCB0aGlzLnJlbW92ZVByb3BlcnR5
LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3As
IHZhbHVlKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5c
dFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0eS5zZXQuY2FsbCh0aGlzLCB2
YWx1ZSkgOiB0aGlzLnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTtcblx0fS5vdmVybG9hZFNldHRl
cigpLFxuXG5cdGdldDogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVu
dC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdHJldHVybiAocHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0
KSA/IHByb3BlcnR5LmdldC5hcHBseSh0aGlzKSA6IHRoaXMuZ2V0UHJvcGVydHkocHJvcCk7XG5c
dH0ub3ZlcmxvYWRHZXR0ZXIoKSxcblxuXHRlcmFzZTogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFy
IHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBw
cm9wZXJ0eS5lcmFzZSkgPyBwcm9wZXJ0eS5lcmFzZS5hcHBseSh0aGlzKSA6IHRoaXMucmVtb3Zl
UHJvcGVydHkocHJvcCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGhh
c0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3NM
aXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRc
dHJldHVybiBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKS5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9
LFxuXG5cdGFkZENsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRc
dGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGFkZFRvQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dGhpcy5jbGFzc05h
bWUgPSBjbGFzc2VzKGNsYXNzTmFtZSArICcgJyArIHRoaXMuY2xhc3NOYW1lKS5qb2luKCcgJyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGhhc0NsYXNzTGlzdCA/
IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2gocmVt
b3ZlRnJvbUNsYXNzTGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlv
bihjbGFzc05hbWUpe1xuXHRcdHZhciBjbGFzc05hbWVzID0gY2xhc3Nlcyh0aGlzLmNsYXNzTmFt
ZSk7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goY2xhc3NOYW1lcy5lcmFzZSwgY2xh
c3NOYW1lcyk7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWVzLmpvaW4oJyAnKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1l
LCBmb3JjZSl7XG5cdFx0aWYgKGZvcmNlID09IG51bGwpIGZvcmNlID0gIXRoaXMuaGFzQ2xhc3Mo
Y2xhc3NOYW1lKTtcblx0XHRyZXR1cm4gKGZvcmNlKSA/IHRoaXMuYWRkQ2xhc3MoY2xhc3NOYW1l
KSA6IHRoaXMucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZG9wdDogZnVuY3Rp
b24oKXtcblx0XHR2YXIgcGFyZW50ID0gdGhpcywgZnJhZ21lbnQsIGVsZW1lbnRzID0gQXJyYXku
ZmxhdHRlbihhcmd1bWVudHMpLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0aWYgKGxl
bmd0aCA+IDEpIHBhcmVudCA9IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFn
bWVudCgpO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHR2
YXIgZWxlbWVudCA9IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0cnVlKTtcblx0XHRcdGlmIChl
bGVtZW50KSBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZy
YWdtZW50KSB0aGlzLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGFwcGVuZFRleHQ6IGZ1bmN0aW9uKHRleHQsIHdoZXJlKXtcblx0XHRyZXR1cm4g
dGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZSh0ZXh0KSwgd2hlcmUpO1xu
XHR9LFxuXG5cdGdyYWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJl
IHx8ICdib3R0b20nXShkb2N1bWVudC5pZChlbCwgdHJ1ZSksIHRoaXMpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGluamVjdDogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRl
cnNbd2hlcmUgfHwgJ2JvdHRvbSddKHRoaXMsIGRvY3VtZW50LmlkKGVsLCB0cnVlKSk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVwbGFjZXM6IGZ1bmN0aW9uKGVsKXtcblx0XHRlbCA9
IGRvY3VtZW50LmlkKGVsLCB0cnVlKTtcblx0XHRlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0
aGlzLCBlbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcHM6IGZ1bmN0aW9uKGVs
LCB3aGVyZSl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHRo
aXMucmVwbGFjZXMoZWwpLmdyYWIoZWwsIHdoZXJlKTtcblx0fSxcblxuXHRnZXRTZWxlY3RlZDog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNlbGVjdGVkSW5kZXg7IC8vIFNhZmFyaSAzLjIuMVxuXHRc
dHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlzLm9wdGlvbnMpLmZpbHRlcihm
dW5jdGlvbihvcHRpb24pe1xuXHRcdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZDtcblx0XHR9KSk7
XG5cdH0sXG5cblx0dG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgcXVlcnlTdHJp
bmcgPSBbXTtcblx0XHR0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScp
LmVhY2goZnVuY3Rpb24oZWwpe1xuXHRcdFx0dmFyIHR5cGUgPSBlbC50eXBlO1xuXHRcdFx0aWYg
KCFlbC5uYW1lIHx8IGVsLmRpc2FibGVkIHx8IHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PSAn
cmVzZXQnIHx8IHR5cGUgPT0gJ2ZpbGUnIHx8IHR5cGUgPT0gJ2ltYWdlJykgcmV0dXJuO1xuXG5c
dFx0XHR2YXIgdmFsdWUgPSAoZWwuZ2V0KCd0YWcnKSA9PSAnc2VsZWN0JykgPyBlbC5nZXRTZWxl
Y3RlZCgpLm1hcChmdW5jdGlvbihvcHQpe1xuXHRcdFx0XHQvLyBJRVxuXHRcdFx0XHRyZXR1cm4g
ZG9jdW1lbnQuaWQob3B0KS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHR9KSA6ICgodHlwZSA9PSAncmFk
aW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94JykgJiYgIWVsLmNoZWNrZWQpID8gbnVsbCA6IGVsLmdl
dCgndmFsdWUnKTtcblxuXHRcdFx0QXJyYXkuY29udmVydCh2YWx1ZSkuZWFjaChmdW5jdGlvbih2
YWwpe1xuXHRcdFx0XHRpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZpbmVkJykgcXVlcnlTdHJpbmcu
cHVzaChlbmNvZGVVUklDb21wb25lbnQoZWwubmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25l
bnQodmFsKSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9p
bignJicpO1xuXHR9XG5cbn0pO1xuXG5cbi8vIGFwcGVuZEhUTUxcblxudmFyIGFwcGVuZEluc2Vy
dGVycyA9IHtcblx0YmVmb3JlOiAnYmVmb3JlQmVnaW4nLFxuXHRhZnRlcjogJ2FmdGVyRW5kJyxc
blx0Ym90dG9tOiAnYmVmb3JlRW5kJyxcblx0dG9wOiAnYWZ0ZXJCZWdpbicsXG5cdGluc2lkZTog
J2JlZm9yZUVuZCdcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KCdhcHBlbmRIVE1MJywgKCdpbnNl
cnRBZGphY2VudEhUTUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSA/IGZ1bmN0
aW9uKGh0bWwsIHdoZXJlKXtcblx0dGhpcy5pbnNlcnRBZGphY2VudEhUTUwoYXBwZW5kSW5zZXJ0
ZXJzW3doZXJlIHx8ICdib3R0b20nXSwgaHRtbCk7XG5cdHJldHVybiB0aGlzO1xufSA6IGZ1bmN0
aW9uKGh0bWwsIHdoZXJlKXtcblx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jywge2h0bWw6
IGh0bWx9KSxcblx0XHRjaGlsZHJlbiA9IHRlbXAuY2hpbGROb2Rlcyxcblx0XHRmcmFnbWVudCA9
IHRlbXAuZmlyc3RDaGlsZDtcblxuXHRpZiAoIWZyYWdtZW50KSByZXR1cm4gdGhpcztcblx0aWYg
KGNoaWxkcmVuLmxlbmd0aCA+IDEpe1xuXHRcdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9j
dW1lbnRGcmFnbWVudCgpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3Ro
OyBpIDwgbDsgaSsrKXtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldKTtc
blx0XHR9XG5cdH1cblxuXHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGZyYWdtZW50LCB0
aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59KTtcblxudmFyIGNvbGxlY3RlZCA9IHt9LCBzdG9yYWdl
ID0ge307XG5cbnZhciBnZXQgPSBmdW5jdGlvbih1aWQpe1xuXHRyZXR1cm4gKHN0b3JhZ2VbdWlk
XSB8fCAoc3RvcmFnZVt1aWRdID0ge30pKTtcbn07XG5cbnZhciBjbGVhbiA9IGZ1bmN0aW9uKGl0
ZW0pe1xuXHR2YXIgdWlkID0gaXRlbS51bmlxdWVOdW1iZXI7XG5cdGlmIChpdGVtLnJlbW92ZUV2
ZW50cykgaXRlbS5yZW1vdmVFdmVudHMoKTtcblx0aWYgKGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKSBp
dGVtLmNsZWFyQXR0cmlidXRlcygpO1xuXHRpZiAodWlkICE9IG51bGwpe1xuXHRcdGRlbGV0ZSBj
b2xsZWN0ZWRbdWlkXTtcblx0XHRkZWxldGUgc3RvcmFnZVt1aWRdO1xuXHR9XG5cdHJldHVybiBp
dGVtO1xufTtcblxudmFyIGZvcm1Qcm9wcyA9IHtpbnB1dDogJ2NoZWNrZWQnLCBvcHRpb246ICdz
ZWxlY3RlZCcsIHRleHRhcmVhOiAndmFsdWUnfTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dGRlc3Ryb3k6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGNoaWxkcmVuID0gY2xlYW4odGhpcykuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRBcnJheS5lYWNoKGNoaWxkcmVuLCBjbGVhbik7
XG5cdFx0RWxlbWVudC5kaXNwb3NlKHRoaXMpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5c
dGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdEFycmF5LmNvbnZlcnQodGhpcy5jaGlsZE5vZGVzKS5l
YWNoKEVsZW1lbnQuZGlzcG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZGlzcG9z
ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMucGFyZW50Tm9kZSkgPyB0aGlzLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQodGhpcykgOiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlv
bihjb250ZW50cywga2VlcGlkKXtcblx0XHRjb250ZW50cyA9IGNvbnRlbnRzICE9PSBmYWxzZTtc
blx0XHR2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50cyksIGNlID0gW2Nsb25lXSwg
dGUgPSBbdGhpc10sIGk7XG5cblx0XHRpZiAoY29udGVudHMpe1xuXHRcdFx0Y2UuYXBwZW5kKEFy
cmF5LmNvbnZlcnQoY2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdFx0dGUu
YXBwZW5kKEFycmF5LmNvbnZlcnQodGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5c
dFx0fVxuXG5cdFx0Zm9yIChpID0gY2UubGVuZ3RoOyBpLS07KXtcblx0XHRcdHZhciBub2RlID0g
Y2VbaV0sIGVsZW1lbnQgPSB0ZVtpXTtcblx0XHRcdGlmICgha2VlcGlkKSBub2RlLnJlbW92ZUF0
dHJpYnV0ZSgnaWQnKTtcblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAobm9kZS5jbGVhckF0
dHJpYnV0ZXMpe1xuXHRcdFx0XHRub2RlLmNsZWFyQXR0cmlidXRlcygpO1xuXHRcdFx0XHRub2Rl
Lm1lcmdlQXR0cmlidXRlcyhlbGVtZW50KTtcblx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUo
J3VuaXF1ZU51bWJlcicpO1xuXHRcdFx0XHRpZiAobm9kZS5vcHRpb25zKXtcblx0XHRcdFx0XHR2
YXIgbm8gPSBub2RlLm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRpb25zO1xuXHRcdFx0XHRcdGZv
ciAodmFyIGogPSBuby5sZW5ndGg7IGotLTspIG5vW2pdLnNlbGVjdGVkID0gZW9bal0uc2VsZWN0
ZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFyIHBy
b3AgPSBmb3JtUHJvcHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdFx0aWYg
KHByb3AgJiYgZWxlbWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07XG5cdFx0
fVxuXG5cdFx0Lyo8bHRJRTk+Ki9cblx0XHRpZiAoaGFzQ2xvbmVCdWcpe1xuXHRcdFx0dmFyIGNv
ID0gY2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpLCB0byA9IHRoaXMuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ29iamVjdCcpO1xuXHRcdFx0Zm9yIChpID0gY28ubGVuZ3RoOyBpLS07
KSBjb1tpXS5vdXRlckhUTUwgPSB0b1tpXS5vdXRlckhUTUw7XG5cdFx0fVxuXHRcdC8qPC9sdElF
OT4qL1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChjbG9uZSk7XG5cdH1cblxufSk7XG5cbltFbGVt
ZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRMaXN0
ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYg
IXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0XHRcdGNvbGxlY3RlZFtTbGljay51aWRPZih0
aGlzKV0gPSB0aGlzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5hZGRFdmVudExpc3RlbmVyKSB0aGlz
LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRo
aXMuYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRyZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh0aGlzLnJl
bW92ZUV2ZW50TGlzdGVuZXIpIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFh
cmd1bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4p
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJldHJpZXZlOiBmdW5jdGlvbihwcm9wZXJ0
eSwgZGZsdCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpLCBwcm9w
ID0gc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0aWYgKGRmbHQgIT0gbnVsbCAmJiBwcm9wID09IG51
bGwpIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XSA9IGRmbHQ7XG5cdFx0cmV0dXJuIHByb3AgIT0g
bnVsbCA/IHByb3AgOiBudWxsO1xuXHR9LFxuXG5cdHN0b3JlOiBmdW5jdGlvbihwcm9wZXJ0eSwg
dmFsdWUpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRz
dG9yYWdlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVs
aW1pbmF0ZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNr
LnVpZE9mKHRoaXMpKTtcblx0XHRkZWxldGUgc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH1cblxufSk7XG5cbi8qPGx0SUU5PiovXG5pZiAod2luZG93LmF0dGFjaEV2ZW50
ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciBnYyA9IGZ1bmN0aW9uKCl7XG5c
dFx0T2JqZWN0LmVhY2goY29sbGVjdGVkLCBjbGVhbik7XG5cdFx0aWYgKHdpbmRvdy5Db2xsZWN0
R2FyYmFnZSkgQ29sbGVjdEdhcmJhZ2UoKTtcblx0XHR3aW5kb3cucmVtb3ZlTGlzdGVuZXIoJ3Vu
bG9hZCcsIGdjKTtcblx0fTtcblx0d2luZG93LmFkZExpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG59
XG4vKjwvbHRJRTk+Ki9cblxuRWxlbWVudC5Qcm9wZXJ0aWVzID0ge307XG5cblxuXG5FbGVtZW50
LlByb3BlcnRpZXMuc3R5bGUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihzdHlsZSl7XG5cdFx0dGhp
cy5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLnN0eWxlLmNzc1RleHQ7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKCl7
XG5cdFx0dGhpcy5zdHlsZS5jc3NUZXh0ID0gJyc7XG5cdH1cblxufTtcblxuRWxlbWVudC5Qcm9w
ZXJ0aWVzLnRhZyA9IHtcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMudGFn
TmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy5odG1s
ID0ge1xuXG5cdHNldDogZnVuY3Rpb24oaHRtbCl7XG5cdFx0aWYgKGh0bWwgPT0gbnVsbCkgaHRt
bCA9ICcnO1xuXHRcdGVsc2UgaWYgKHR5cGVPZihodG1sKSA9PSAnYXJyYXknKSBodG1sID0gaHRt
bC5qb2luKCcnKTtcblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKHRoaXMuc3R5bGVTaGVldCAm
JiAhY2FuQ2hhbmdlU3R5bGVIVE1MKSB0aGlzLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGh0bWw7XG5c
dFx0ZWxzZSAvKjwvbHRJRTk+Ki90aGlzLmlubmVySFRNTCA9IGh0bWw7XG5cdH0sXG5cdGVyYXNl
OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc2V0KCdodG1sJywgJycpO1xuXHR9XG5cbn07XG5cbnZh
ciBzdXBwb3J0c0hUTUw1RWxlbWVudHMgPSB0cnVlLCBzdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0g
dHJ1ZSwgc3VwcG9ydHNUUklubmVySFRNTCA9IHRydWU7XG5cbi8qPGx0SUU5PiovXG4vLyB0ZWNo
bmlxdWUgYnkgamRiYXJsZXR0IC0gaHR0cDovL2pkYmFydGxldHQuY29tL2lubmVyc2hpdi9cbnZh
ciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBmcmFnbWVudDtcbmRp
di5pbm5lckhUTUwgPSAnPG5hdj48L25hdj4nO1xuc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gKGRp
di5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxKTtcbmlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtc
blx0dmFyIHRhZ3MgPSAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGNhbnZhcyBkYXRhbGlzdCBk
ZXRhaWxzIGZpZ2NhcHRpb24gZmlndXJlIGZvb3RlciBoZWFkZXIgaGdyb3VwIG1hcmsgbWV0ZXIg
bmF2IG91dHB1dCBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGltZSB2aWRlbycuc3BsaXQoJyAn
KTtcblx0ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGwgPSB0
YWdzLmxlbmd0aDtcblx0d2hpbGUgKGwtLSkgZnJhZ21lbnQuY3JlYXRlRWxlbWVudCh0YWdzW2xd
KTtcbn1cbmRpdiA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbnN1cHBvcnRzVGFi
bGVJbm5lckhUTUwgPSBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdHZhciB0YWJsZSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG5cdHRhYmxlLmlubmVySFRNTCA9ICc8
dHI+PHRkPjwvdGQ+PC90cj4nO1xuXHRyZXR1cm4gdHJ1ZTtcbn0pO1xuXG4vKjxsdEZGND4qL1xu
dmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSwgaHRtbCA9ICc8dGQ+PC90ZD4n
O1xudHIuaW5uZXJIVE1MID0gaHRtbDtcbnN1cHBvcnRzVFJJbm5lckhUTUwgPSAodHIuaW5uZXJI
VE1MID09IGh0bWwpO1xudHIgPSBudWxsO1xuLyo8L2x0RkY0PiovXG5cbmlmICghc3VwcG9ydHNU
YWJsZUlubmVySFRNTCB8fCAhc3VwcG9ydHNUUklubmVySFRNTCB8fCAhc3VwcG9ydHNIVE1MNUVs
ZW1lbnRzKXtcblxuXHRFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQgPSAoZnVuY3Rpb24oc2V0
KXtcblxuXHRcdHZhciB0cmFuc2xhdGlvbnMgPSB7XG5cdFx0XHR0YWJsZTogWzEsICc8dGFibGU+
JywgJzwvdGFibGU+J10sXG5cdFx0XHRzZWxlY3Q6IFsxLCAnPHNlbGVjdD4nLCAnPC9zZWxlY3Q+
J10sXG5cdFx0XHR0Ym9keTogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+
J10sXG5cdFx0XHR0cjogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5Pjwv
dGFibGU+J11cblx0XHR9O1xuXG5cdFx0dHJhbnNsYXRpb25zLnRoZWFkID0gdHJhbnNsYXRpb25z
LnRmb290ID0gdHJhbnNsYXRpb25zLnRib2R5O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGh0bWwp
e1xuXG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKHRoaXMuc3R5bGVTaGVldCkgcmV0dXJu
IHNldC5jYWxsKHRoaXMsIGh0bWwpO1xuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgd3Jh
cCA9IHRyYW5zbGF0aW9uc1t0aGlzLmdldCgndGFnJyldO1xuXHRcdFx0aWYgKCF3cmFwICYmICFz
dXBwb3J0c0hUTUw1RWxlbWVudHMpIHdyYXAgPSBbMCwgJycsICcnXTtcblx0XHRcdGlmICghd3Jh
cCkgcmV0dXJuIHNldC5jYWxsKHRoaXMsIGh0bWwpO1xuXG5cdFx0XHR2YXIgbGV2ZWwgPSB3cmFw
WzBdLCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIHRhcmdldCA9IHdy
YXBwZXI7XG5cdFx0XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQuYXBwZW5k
Q2hpbGQod3JhcHBlcik7XG5cdFx0XHR3cmFwcGVyLmlubmVySFRNTCA9IFt3cmFwWzFdLCBodG1s
LCB3cmFwWzJdXS5mbGF0dGVuKCkuam9pbignJyk7XG5cdFx0XHR3aGlsZSAobGV2ZWwtLSkgdGFy
Z2V0ID0gdGFyZ2V0LmZpcnN0Q2hpbGQ7XG5cdFx0XHR0aGlzLmVtcHR5KCkuYWRvcHQodGFyZ2V0
LmNoaWxkTm9kZXMpO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50
LnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlciA9IG51bGw7XG5cdFx0fTtcblxu
XHR9KShFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQpO1xufVxuLyo8L0lFPiovXG5cbi8qPGx0
SUU5PiovXG52YXIgdGVzdEZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG50
ZXN0Rm9ybS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uPnM8L29wdGlvbj48L3NlbGVjdD4n
O1xuXG5pZiAodGVzdEZvcm0uZmlyc3RDaGlsZC52YWx1ZSAhPSAncycpIEVsZW1lbnQuUHJvcGVy
dGllcy52YWx1ZSA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGFnID0g
dGhpcy5nZXQoJ3RhZycpO1xuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcpIHJldHVybiB0aGlzLnNl
dFByb3BlcnR5KCd2YWx1ZScsIHZhbHVlKTtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0RWxl
bWVudHMoJ29wdGlvbicpO1xuXHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRmb3IgKHZh
ciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIG9wdGlvbiA9IG9w
dGlvbnNbaV0sXG5cdFx0XHRcdGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgndmFsdWUn
KSxcblx0XHRcdFx0b3B0aW9uVmFsdWUgPSAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRp
b24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09
IHZhbHVlKSByZXR1cm4gb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0
Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb24gPSB0aGlzLCB0YWcgPSBvcHRpb24uZ2V0
KCd0YWcnKTtcblxuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcgJiYgdGFnICE9ICdvcHRpb24nKSBy
ZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eSgndmFsdWUnKTtcblxuXHRcdGlmICh0YWcgPT0gJ3NlbGVj
dCcgJiYgIShvcHRpb24gPSBvcHRpb24uZ2V0U2VsZWN0ZWQoKVswXSkpIHJldHVybiAnJztcblxu
XHRcdHZhciBhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyk7XG5cdFx0cmV0
dXJuIChhdHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQo
J3RleHQnKTtcblx0fVxuXG59O1xudGVzdEZvcm0gPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8q
PElFPiovXG5pZiAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuZ2V0QXR0cmlidXRlTm9k
ZSgnaWQnKSkgRWxlbWVudC5Qcm9wZXJ0aWVzLmlkID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKGlkKXtc
blx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gaWQ7XG5c
dH0sXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5pZCB8fCBudWxsO1xuXHR9
LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVO
b2RlKCdpZCcpLnZhbHVlID0gJyc7XG5cdH1cbn07XG4vKjwvSUU+Ki9cblxufSkoKTtcblxuLypc
bi0tLVxuXG5uYW1lOiBFdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIEV2ZW50IFR5
cGUsIHRvIG1ha2UgdGhlIGV2ZW50IG9iamVjdCBjcm9zcy1icm93c2VyLlxuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwg
RnVuY3Rpb24sIFN0cmluZywgT2JqZWN0XVxuXG5wcm92aWRlczogRXZlbnRcblxuLi4uXG4qL1xu
XG4oZnVuY3Rpb24oKXtcblxudmFyIF9rZXlzID0ge307XG52YXIgbm9ybWFsaXplV2hlZWxTcGVl
ZCA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIG5vcm1hbGl6ZWQ7XG5cdGlmIChldmVudC53aGVl
bERlbHRhKXtcblx0XHRub3JtYWxpemVkID0gZXZlbnQud2hlZWxEZWx0YSAlIDEyMCA9PSAwID8g
ZXZlbnQud2hlZWxEZWx0YSAvIDEyMCA6IGV2ZW50LndoZWVsRGVsdGEgLyAxMjtcblx0fSBlbHNl
IHtcblx0XHR2YXIgcmF3QW1vdW50ID0gZXZlbnQuZGVsdGFZIHx8IGV2ZW50LmRldGFpbCB8fCAw
O1xuXHRcdG5vcm1hbGl6ZWQgPSAtKHJhd0Ftb3VudCAlIDMgPT0gMCA/IHJhd0Ftb3VudCAvIDMg
OiByYXdBbW91bnQgKiAxMCk7XG5cdH1cblx0cmV0dXJuIG5vcm1hbGl6ZWQ7XG59O1xuXG52YXIg
RE9NRXZlbnQgPSB0aGlzLkRPTUV2ZW50ID0gbmV3IFR5cGUoJ0RPTUV2ZW50JywgZnVuY3Rpb24o
ZXZlbnQsIHdpbil7XG5cdGlmICghd2luKSB3aW4gPSB3aW5kb3c7XG5cdGV2ZW50ID0gZXZlbnQg
fHwgd2luLmV2ZW50O1xuXHRpZiAoZXZlbnQuJGV4dGVuZGVkKSByZXR1cm4gZXZlbnQ7XG5cdHRo
aXMuZXZlbnQgPSBldmVudDtcblx0dGhpcy4kZXh0ZW5kZWQgPSB0cnVlO1xuXHR0aGlzLnNoaWZ0
ID0gZXZlbnQuc2hpZnRLZXk7XG5cdHRoaXMuY29udHJvbCA9IGV2ZW50LmN0cmxLZXk7XG5cdHRo
aXMuYWx0ID0gZXZlbnQuYWx0S2V5O1xuXHR0aGlzLm1ldGEgPSBldmVudC5tZXRhS2V5O1xuXHR2
YXIgdHlwZSA9IHRoaXMudHlwZSA9IGV2ZW50LnR5cGU7XG5cdHZhciB0YXJnZXQgPSBldmVudC50
YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQubm9k
ZVR5cGUgPT0gMykgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG5cdHRoaXMudGFyZ2V0ID0g
ZG9jdW1lbnQuaWQodGFyZ2V0KTtcblxuXHRpZiAodHlwZS5pbmRleE9mKCdrZXknKSA9PSAwKXtc
blx0XHR2YXIgY29kZSA9IHRoaXMuY29kZSA9IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2Rl
KTtcblx0XHRpZiAoIXRoaXMuc2hpZnQgfHwgdHlwZSAhPSAna2V5cHJlc3MnKSB0aGlzLmtleSA9
IF9rZXlzW2NvZGVdO1xuXHRcdGlmICh0eXBlID09ICdrZXlkb3duJyB8fCB0eXBlID09ICdrZXl1
cCcpe1xuXHRcdFx0aWYgKGNvZGUgPiAxMTEgJiYgY29kZSA8IDEyNCkgdGhpcy5rZXkgPSAnZicg
KyAoY29kZSAtIDExMSk7XG5cdFx0XHRlbHNlIGlmIChjb2RlID4gOTUgJiYgY29kZSA8IDEwNikg
dGhpcy5rZXkgPSBjb2RlIC0gOTY7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmtleSA9PSBudWxsKSB0
aGlzLmtleSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKTtcblx0fSBl
bHNlIGlmICh0eXBlID09ICdjbGljaycgfHwgdHlwZSA9PSAnZGJsY2xpY2snIHx8IHR5cGUgPT0g
J2NvbnRleHRtZW51JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnRE9NTW91c2VTY3Jv
bGwnIHx8IHR5cGUuaW5kZXhPZignbW91c2UnKSA9PSAwKXtcblx0XHR2YXIgZG9jID0gd2luLmRv
Y3VtZW50O1xuXHRcdGRvYyA9ICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0g
J0NTUzFDb21wYXQnKSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG5cdFx0dGhpcy5wYWdlID0ge1xu
XHRcdFx0eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggOiBldmVudC5jbGll
bnRYICsgZG9jLnNjcm9sbExlZnQsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBl
dmVudC5wYWdlWSA6IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wXG5cdFx0fTtcblx0XHR0
aGlzLmNsaWVudCA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBh
Z2VYIC0gd2luLnBhZ2VYT2Zmc2V0IDogZXZlbnQuY2xpZW50WCxcblx0XHRcdHk6IChldmVudC5w
YWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZT2Zmc2V0IDogZXZlbnQuY2xp
ZW50WVxuXHRcdH07XG5cdFx0aWYgKHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlID09
ICd3aGVlbCcgfHwgdHlwZSA9PSAnbW91c2V3aGVlbCcpIHRoaXMud2hlZWwgPSBub3JtYWxpemVX
aGVlbFNwZWVkKGV2ZW50KTtcblx0XHR0aGlzLnJpZ2h0Q2xpY2sgPSAoZXZlbnQud2hpY2ggPT0g
MyB8fCBldmVudC5idXR0b24gPT0gMik7XG5cdFx0aWYgKHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwg
dHlwZSA9PSAnbW91c2VvdXQnIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT0gJ21v
dXNlbGVhdmUnKXtcblx0XHRcdHZhciBvdmVyVGFyZ2V0ID0gdHlwZSA9PSAnbW91c2VvdmVyJyB8
fCB0eXBlID09ICdtb3VzZWVudGVyJztcblx0XHRcdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRl
ZFRhcmdldCB8fCBldmVudFsob3ZlclRhcmdldCA/ICdmcm9tJyA6ICd0bycpICsgJ0VsZW1lbnQn
XTtcblx0XHRcdHdoaWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9kZVR5cGUgPT0gMykgcmVsYXRl
ZCA9IHJlbGF0ZWQucGFyZW50Tm9kZTtcblx0XHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IGRvY3Vt
ZW50LmlkKHJlbGF0ZWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ3RvdWNo
JykgPT0gMCB8fCB0eXBlLmluZGV4T2YoJ2dlc3R1cmUnKSA9PSAwKXtcblx0XHR0aGlzLnJvdGF0
aW9uID0gZXZlbnQucm90YXRpb247XG5cdFx0dGhpcy5zY2FsZSA9IGV2ZW50LnNjYWxlO1xuXHRc
dHRoaXMudGFyZ2V0VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNoZXM7XG5cdFx0dGhpcy5jaGFu
Z2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuXHRcdHZhciB0b3VjaGVzID0gdGhp
cy50b3VjaGVzID0gZXZlbnQudG91Y2hlcztcblx0XHRpZiAodG91Y2hlcyAmJiB0b3VjaGVzWzBd
KXtcblx0XHRcdHZhciB0b3VjaCA9IHRvdWNoZXNbMF07XG5cdFx0XHR0aGlzLnBhZ2UgPSB7eDog
dG91Y2gucGFnZVgsIHk6IHRvdWNoLnBhZ2VZfTtcblx0XHRcdHRoaXMuY2xpZW50ID0ge3g6IHRv
dWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFl9O1xuXHRcdH1cblx0fVxuXG5cdGlmICghdGhp
cy5jbGllbnQpIHRoaXMuY2xpZW50ID0ge307XG5cdGlmICghdGhpcy5wYWdlKSB0aGlzLnBhZ2Ug
PSB7fTtcbn0pO1xuXG5ET01FdmVudC5pbXBsZW1lbnQoe1xuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMucHJldmVudERlZmF1bHQoKS5zdG9wUHJvcGFnYXRpb24oKTtcblx0
fSxcblxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQu
c3RvcFByb3BhZ2F0aW9uKSB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGVsc2Ug
dGhpcy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnByZXZl
bnREZWZhdWx0KSB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZWxzZSB0aGlzLmV2
ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bkRPTUV2ZW50LmRlZmluZUtleSA9IGZ1bmN0aW9uKGNvZGUsIGtleSl7XG5cdF9rZXlzW2NvZGVd
ID0ga2V5O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkRPTUV2ZW50LmRlZmluZUtleXMgPSBET01F
dmVudC5kZWZpbmVLZXkub3ZlcmxvYWRTZXR0ZXIodHJ1ZSk7XG5cbkRPTUV2ZW50LmRlZmluZUtl
eXMoe1xuXHQnMzgnOiAndXAnLCAnNDAnOiAnZG93bicsICczNyc6ICdsZWZ0JywgJzM5JzogJ3Jp
Z2h0Jyxcblx0JzI3JzogJ2VzYycsICczMic6ICdzcGFjZScsICc4JzogJ2JhY2tzcGFjZScsICc5
JzogJ3RhYicsXG5cdCc0Nic6ICdkZWxldGUnLCAnMTMnOiAnZW50ZXInXG59KTtcblxufSkoKTtc
blxuXG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRXZlbnRcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIEVsZW1lbnQgbWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIGV2ZW50cy4gVGhpcyBm
aWxlIGFsc28gaW5jbHVkZXMgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBjdXN0b20gRWxlbWVu
dCBFdmVudHMsIGlmIG5lY2Vzc2FyeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5c
bnJlcXVpcmVzOiBbRWxlbWVudCwgRXZlbnRdXG5cbnByb3ZpZGVzOiBFbGVtZW50LkV2ZW50XG5c
bi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7
c2V0OiBmdW5jdGlvbihldmVudHMpe1xuXHR0aGlzLmFkZEV2ZW50cyhldmVudHMpO1xufX07XG5c
bltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRh
ZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJp
ZXZlKCdldmVudHMnLCB7fSk7XG5cdFx0aWYgKCFldmVudHNbdHlwZV0pIGV2ZW50c1t0eXBlXSA9
IHtrZXlzOiBbXSwgdmFsdWVzOiBbXX07XG5cdFx0aWYgKGV2ZW50c1t0eXBlXS5rZXlzLmNvbnRh
aW5zKGZuKSkgcmV0dXJuIHRoaXM7XG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMucHVzaChmbik7XG5c
dFx0dmFyIHJlYWxUeXBlID0gdHlwZSxcblx0XHRcdGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5
cGVdLFxuXHRcdFx0Y29uZGl0aW9uID0gZm4sXG5cdFx0XHRzZWxmID0gdGhpcztcblx0XHRpZiAo
Y3VzdG9tKXtcblx0XHRcdGlmIChjdXN0b20ub25BZGQpIGN1c3RvbS5vbkFkZC5jYWxsKHRoaXMs
IGZuLCB0eXBlKTtcblx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uKXtcblx0XHRcdFx0Y29uZGl0
aW9uID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uLmNh
bGwodGhpcywgZXZlbnQsIHR5cGUpKSByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0
XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VzdG9t
LmJhc2UpIHJlYWxUeXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlz
LCB0eXBlKTtcblx0XHR9XG5cdFx0dmFyIGRlZm4gPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJu
IGZuLmNhbGwoc2VsZik7XG5cdFx0fTtcblx0XHR2YXIgbmF0aXZlRXZlbnQgPSBFbGVtZW50Lk5h
dGl2ZUV2ZW50c1tyZWFsVHlwZV07XG5cdFx0aWYgKG5hdGl2ZUV2ZW50KXtcblx0XHRcdGlmIChu
YXRpdmVFdmVudCA9PSAyKXtcblx0XHRcdFx0ZGVmbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRc
dFx0XHRldmVudCA9IG5ldyBET01FdmVudChldmVudCwgc2VsZi5nZXRXaW5kb3coKSk7XG5cdFx0
XHRcdFx0aWYgKGNvbmRpdGlvbi5jYWxsKHNlbGYsIGV2ZW50KSA9PT0gZmFsc2UpIGV2ZW50LnN0
b3AoKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWRkTGlzdGVuZXIocmVhbFR5
cGUsIGRlZm4sIGFyZ3VtZW50c1syXSk7XG5cdFx0fVxuXHRcdGV2ZW50c1t0eXBlXS52YWx1ZXMu
cHVzaChkZWZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMn
KTtcblx0XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHR2
YXIgbGlzdCA9IGV2ZW50c1t0eXBlXTtcblx0XHR2YXIgaW5kZXggPSBsaXN0LmtleXMuaW5kZXhP
Zihmbik7XG5cdFx0aWYgKGluZGV4ID09IC0xKSByZXR1cm4gdGhpcztcblx0XHR2YXIgdmFsdWUg
PSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qua2V5c1tpbmRleF07XG5cdFx0
ZGVsZXRlIGxpc3QudmFsdWVzW2luZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gRWxlbWVudC5FdmVu
dHNbdHlwZV07XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uUmVtb3ZlKSBj
dXN0b20ub25SZW1vdmUuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmJh
c2UpIHR5cGUgPSBGdW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUp
O1xuXHRcdH1cblx0XHRyZXR1cm4gKEVsZW1lbnQuTmF0aXZlRXZlbnRzW3R5cGVdKSA/IHRoaXMu
cmVtb3ZlTGlzdGVuZXIodHlwZSwgdmFsdWUsIGFyZ3VtZW50c1syXSkgOiB0aGlzO1xuXHR9LFxu
XG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciBldmVudCBpbiBl
dmVudHMpIHRoaXMuYWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVudF0pO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIg
dHlwZTtcblx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0
eXBlIGluIGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRc
dFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmlldmUo
J2V2ZW50cycpO1xuXHRcdGlmICghYXR0YWNoZWQpIHJldHVybiB0aGlzO1xuXHRcdGlmICghZXZl
bnRzKXtcblx0XHRcdGZvciAodHlwZSBpbiBhdHRhY2hlZCkgdGhpcy5yZW1vdmVFdmVudHModHlw
ZSk7XG5cdFx0XHR0aGlzLmVsaW1pbmF0ZSgnZXZlbnRzJyk7XG5cdFx0fSBlbHNlIGlmIChhdHRh
Y2hlZFtldmVudHNdKXtcblx0XHRcdGF0dGFjaGVkW2V2ZW50c10ua2V5cy5lYWNoKGZ1bmN0aW9u
KGZuKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudChldmVudHMsIGZuKTtcblx0XHRcdH0sIHRo
aXMpO1xuXHRcdFx0ZGVsZXRlIGF0dGFjaGVkW2V2ZW50c107XG5cdFx0fVxuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpe1xu
XHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50
cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVy
dChhcmdzKTtcblxuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRc
dFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRlbHNlIGZu
LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGNsb25lRXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBlKXtcblx0XHRmcm9tID0gZG9j
dW1lbnQuaWQoZnJvbSk7XG5cdFx0dmFyIGV2ZW50cyA9IGZyb20ucmV0cmlldmUoJ2V2ZW50cycp
O1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRpZiAoIXR5cGUpe1xuXHRcdFx0
Zm9yICh2YXIgZXZlbnRUeXBlIGluIGV2ZW50cykgdGhpcy5jbG9uZUV2ZW50cyhmcm9tLCBldmVu
dFR5cGUpO1xuXHRcdH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdKXtcblx0XHRcdGV2ZW50c1t0eXBl
XS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50KHR5cGUsIGZu
KTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtc
blxuRWxlbWVudC5OYXRpdmVFdmVudHMgPSB7XG5cdGNsaWNrOiAyLCBkYmxjbGljazogMiwgbW91
c2V1cDogMiwgbW91c2Vkb3duOiAyLCBjb250ZXh0bWVudTogMiwgLy9tb3VzZSBidXR0b25zXG5c
dHdoZWVsOiAyLCBtb3VzZXdoZWVsOiAyLCBET01Nb3VzZVNjcm9sbDogMiwgLy9tb3VzZSB3aGVl
bFxuXHRtb3VzZW92ZXI6IDIsIG1vdXNlb3V0OiAyLCBtb3VzZW1vdmU6IDIsIHNlbGVjdHN0YXJ0
OiAyLCBzZWxlY3RlbmQ6IDIsIC8vbW91c2UgbW92ZW1lbnRcblx0a2V5ZG93bjogMiwga2V5cHJl
c3M6IDIsIGtleXVwOiAyLCAvL2tleWJvYXJkXG5cdG9yaWVudGF0aW9uY2hhbmdlOiAyLCAvLyBt
b2JpbGVcblx0dG91Y2hzdGFydDogMiwgdG91Y2htb3ZlOiAyLCB0b3VjaGVuZDogMiwgdG91Y2hj
YW5jZWw6IDIsIC8vIHRvdWNoXG5cdGdlc3R1cmVzdGFydDogMiwgZ2VzdHVyZWNoYW5nZTogMiwg
Z2VzdHVyZWVuZDogMiwgLy8gZ2VzdHVyZVxuXHRmb2N1czogMiwgYmx1cjogMiwgY2hhbmdlOiAy
LCByZXNldDogMiwgc2VsZWN0OiAyLCBzdWJtaXQ6IDIsIHBhc3RlOiAyLCBpbnB1dDogMiwgLy9m
b3JtIGVsZW1lbnRzXG5cdGxvYWQ6IDIsIHVubG9hZDogMSwgYmVmb3JldW5sb2FkOiAyLCByZXNp
emU6IDEsIG1vdmU6IDEsIERPTUNvbnRlbnRMb2FkZWQ6IDEsIHJlYWR5c3RhdGVjaGFuZ2U6IDEs
IC8vd2luZG93XG5cdGhhc2hjaGFuZ2U6IDEsIHBvcHN0YXRlOiAyLCBwYWdlc2hvdzogMiwgcGFn
ZWhpZGU6IDIsIC8vIGhpc3Rvcnlcblx0ZXJyb3I6IDEsIGFib3J0OiAxLCBzY3JvbGw6IDEsIG1l
c3NhZ2U6IDIgLy9taXNjXG59O1xuXG5FbGVtZW50LkV2ZW50cyA9IHtcblx0bW91c2V3aGVlbDog
e1xuXHRcdGJhc2U6ICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3aGVlbCcgOiAnb25tb3VzZXdo
ZWVsJyBpbiBkb2N1bWVudCA/ICdtb3VzZXdoZWVsJyA6ICdET01Nb3VzZVNjcm9sbCdcblx0fVxu
fTtcblxudmFyIGNoZWNrID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgcmVsYXRlZCA9IGV2ZW50
LnJlbGF0ZWRUYXJnZXQ7XG5cdGlmIChyZWxhdGVkID09IG51bGwpIHJldHVybiB0cnVlO1xuXHRp
ZiAoIXJlbGF0ZWQpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChyZWxhdGVkICE9IHRoaXMgJiYg
cmVsYXRlZC5wcmVmaXggIT0gJ3h1bCcgJiYgdHlwZU9mKHRoaXMpICE9ICdkb2N1bWVudCcgJiYg
IXRoaXMuY29udGFpbnMocmVsYXRlZCkpO1xufTtcblxuaWYgKCdvbm1vdXNlZW50ZXInIGluIGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCl7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlZW50
ZXIgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5tb3VzZWxlYXZlID0gMjtcblx0RWxlbWVudC5Nb3Vz
ZWVudGVyQ2hlY2sgPSBjaGVjaztcbn0gZWxzZSB7XG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlZW50
ZXIgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9
O1xuXG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlbGVhdmUgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3V0
Jyxcblx0XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG59XG5cbi8qPGx0SUU5PiovXG5pZiAoIXdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMucHJvcGVydHlj
aGFuZ2UgPSAyO1xuXHRFbGVtZW50LkV2ZW50cy5jaGFuZ2UgPSB7XG5cdFx0YmFzZTogZnVuY3Rp
b24oKXtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHRcdFx0cmV0dXJuICh0aGlzLmdl
dCgndGFnJykgPT0gJ2lucHV0JyAmJiAodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNr
Ym94JykpID8gJ3Byb3BlcnR5Y2hhbmdlJyA6ICdjaGFuZ2UnO1xuXHRcdH0sXG5cdFx0Y29uZGl0
aW9uOiBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRyZXR1cm4gZXZlbnQudHlwZSAhPSAncHJvcGVy
dHljaGFuZ2UnIHx8IGV2ZW50LmV2ZW50LnByb3BlcnR5TmFtZSA9PSAnY2hlY2tlZCc7XG5cdFx0
fVxuXHR9O1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6
IEVsZW1lbnQuRGVsZWdhdGlvblxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBu
YXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgdGhlIGRlbGVnYXRlIG1ldGhvZCBmb3IgbW9yZSBlZmZp
Y2llbnQgZXZlbnQgbWFuYWdlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5c
bnJlcXVpcmVzOiBbRWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRlbGVnYXRp
b25dXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBldmVudExpc3RlbmVyU3VwcG9y
dCA9ICEhd2luZG93LmFkZEV2ZW50TGlzdGVuZXI7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzLmZv
Y3VzaW4gPSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c291dCA9IDI7XG5cbnZhciBidWJibGVV
cCA9IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdHdoaWxlICh0
YXJnZXQgJiYgdGFyZ2V0ICE9IHNlbGYpe1xuXHRcdGlmIChtYXRjaCh0YXJnZXQsIGV2ZW50KSkg
cmV0dXJuIGZuLmNhbGwodGFyZ2V0LCBldmVudCwgdGFyZ2V0KTtcblx0XHR0YXJnZXQgPSBkb2N1
bWVudC5pZCh0YXJnZXQucGFyZW50Tm9kZSk7XG5cdH1cbn07XG5cbnZhciBtYXAgPSB7XG5cdG1v
dXNlZW50ZXI6IHtcblx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25kaXRpb246IEVsZW1l
bnQuTW91c2VlbnRlckNoZWNrXG5cdH0sXG5cdG1vdXNlbGVhdmU6IHtcblx0XHRiYXNlOiAnbW91
c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0
Zm9jdXM6IHtcblx0XHRiYXNlOiAnZm9jdXMnICsgKGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJycg
OiAnaW4nKSxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH0sXG5cdGJsdXI6IHtcblx0XHRiYXNlOiBl
dmVudExpc3RlbmVyU3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291dCcsXG5cdFx0Y2FwdHVyZTog
dHJ1ZVxuXHR9XG59O1xuXG4vKjxsdElFOT4qL1xudmFyIF9rZXkgPSAnJGRlbGVnYXRpb246Jztc
bnZhciBmb3JtT2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblxuXHRyZXR1cm4ge1xuXG5cdFx0
YmFzZTogJ2ZvY3VzaW4nLFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbihzZWxmLCB1aWQpe1xuXHRc
dFx0dmFyIGxpc3QgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9
KVt1aWRdO1xuXHRcdFx0aWYgKGxpc3QgJiYgbGlzdC5mb3JtcykgZm9yICh2YXIgaSA9IGxpc3Qu
Zm9ybXMubGVuZ3RoOyBpLS07KXtcblx0XHRcdFx0Ly8gdGhlIGZvcm0gbWF5IGhhdmUgYmVlbiBk
ZXN0cm95ZWQsIHNvIGl0IHdvbid0IGhhdmUgdGhlXG5cdFx0XHRcdC8vIHJlbW92ZUV2ZW50IG1l
dGhvZCBhbnltb3JlLiBJbiB0aGF0IGNhc2UgdGhlIGV2ZW50IHdhc1xuXHRcdFx0XHQvLyByZW1v
dmVkIGFzIHdlbGwuXG5cdFx0XHRcdGlmIChsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KSBsaXN0
LmZvcm1zW2ldLnJlbW92ZUV2ZW50KHR5cGUsIGxpc3QuZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9
LFxuXG5cdFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQs
IHVpZCl7XG5cdFx0XHR2YXIgZm9ybSA9ICh0YXJnZXQuZ2V0KCd0YWcnKSA9PSAnZm9ybScpID8g
dGFyZ2V0IDogZXZlbnQudGFyZ2V0LmdldFBhcmVudCgnZm9ybScpO1xuXHRcdFx0aWYgKCFmb3Jt
KSByZXR1cm47XG5cblx0XHRcdHZhciBsaXN0ZW5lcnMgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0
eXBlICsgJ2xpc3RlbmVycycsIHt9KSxcblx0XHRcdFx0bGlzdGVuZXIgPSBsaXN0ZW5lcnNbdWlk
XSB8fCB7Zm9ybXM6IFtdLCBmbnM6IFtdfSxcblx0XHRcdFx0Zm9ybXMgPSBsaXN0ZW5lci5mb3Jt
cywgZm5zID0gbGlzdGVuZXIuZm5zO1xuXG5cdFx0XHRpZiAoZm9ybXMuaW5kZXhPZihmb3JtKSAh
PSAtMSkgcmV0dXJuO1xuXHRcdFx0Zm9ybXMucHVzaChmb3JtKTtcblxuXHRcdFx0dmFyIF9mbiA9
IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVu
dCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0XHRmb3JtLmFkZEV2ZW50KHR5cGUsIF9mbik7XG5c
dFx0XHRmbnMucHVzaChfZm4pO1xuXG5cdFx0XHRsaXN0ZW5lcnNbdWlkXSA9IGxpc3RlbmVyO1xu
XHRcdFx0c2VsZi5zdG9yZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCBsaXN0ZW5lcnMpO1xu
XHRcdH1cblx0fTtcbn07XG5cbnZhciBpbnB1dE9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5c
dHJldHVybiB7XG5cdFx0YmFzZTogJ2ZvY3VzaW4nLFxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2Vs
ZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0XHRcdHZhciBldmVudHMgPSB7Ymx1cjog
ZnVuY3Rpb24oKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudHMoZXZlbnRzKTtcblx0XHRcdH19
O1xuXHRcdFx0ZXZlbnRzW3R5cGVdID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVV
cChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGV2ZW50
LnRhcmdldC5hZGRFdmVudHMoZXZlbnRzKTtcblx0XHR9XG5cdH07XG59O1xuXG5pZiAoIWV2ZW50
TGlzdGVuZXJTdXBwb3J0KSBPYmplY3QuYXBwZW5kKG1hcCwge1xuXHRzdWJtaXQ6IGZvcm1PYnNl
cnZlcignc3VibWl0JyksXG5cdHJlc2V0OiBmb3JtT2JzZXJ2ZXIoJ3Jlc2V0JyksXG5cdGNoYW5n
ZTogaW5wdXRPYnNlcnZlcignY2hhbmdlJyksXG5cdHNlbGVjdDogaW5wdXRPYnNlcnZlcignc2Vs
ZWN0Jylcbn0pO1xuLyo8L2x0SUU5PiovXG5cbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBl
LFxuXHRhZGRFdmVudCA9IHByb3RvLmFkZEV2ZW50LFxuXHRyZW1vdmVFdmVudCA9IHByb3RvLnJl
bW92ZUV2ZW50O1xuXG52YXIgcmVsYXkgPSBmdW5jdGlvbihvbGQsIG1ldGhvZCl7XG5cdHJldHVy
biBmdW5jdGlvbih0eXBlLCBmbiwgdXNlQ2FwdHVyZSl7XG5cdFx0aWYgKHR5cGUuaW5kZXhPZign
OnJlbGF5JykgPT0gLTEpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVy
ZSk7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHR5cGUpLmV4cHJlc3Npb25zWzBdWzBd
O1xuXHRcdGlmIChwYXJzZWQucHNldWRvc1swXS5rZXkgIT0gJ3JlbGF5JykgcmV0dXJuIG9sZC5j
YWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgbmV3VHlwZSA9IHBhcnNl
ZC50YWc7XG5cdFx0cGFyc2VkLnBzZXVkb3Muc2xpY2UoMSkuZWFjaChmdW5jdGlvbihwc2V1ZG8p
e1xuXHRcdFx0bmV3VHlwZSArPSAnOicgKyBwc2V1ZG8ua2V5ICsgKHBzZXVkby52YWx1ZSA/ICco
JyArIHBzZXVkby52YWx1ZSArICcpJyA6ICcnKTtcblx0XHR9KTtcblx0XHRvbGQuY2FsbCh0aGlz
LCB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIG5ld1R5cGUsIHBhcnNl
ZC5wc2V1ZG9zWzBdLnZhbHVlLCBmbik7XG5cdH07XG59O1xuXG52YXIgZGVsZWdhdGlvbiA9IHtc
blxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuKXtcblx0XHR2YXIgc3RvcmFn
ZSA9IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlw
ZV07XG5cdFx0aWYgKHN0b3JlZCkgZm9yICh2YXIgX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0aWYg
KHN0b3JlZFtfdWlkXS5mbiA9PSBmbiAmJiBzdG9yZWRbX3VpZF0ubWF0Y2ggPT0gbWF0Y2gpIHJl
dHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IHR5cGUsIF9tYXRjaCA9IG1hdGNo
LCBfZm4gPSBmbiwgX21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHR0eXBlID0gX21hcC5iYXNl
IHx8IF90eXBlO1xuXG5cdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQpe1xuXHRcdFx0cmV0dXJu
IFNsaWNrLm1hdGNoKHRhcmdldCwgX21hdGNoKTtcblx0XHR9O1xuXG5cdFx0dmFyIGVsZW1lbnRF
dmVudCA9IEVsZW1lbnQuRXZlbnRzW190eXBlXTtcblx0XHRpZiAoX21hcC5jb25kaXRpb24gfHwg
ZWxlbWVudEV2ZW50ICYmIGVsZW1lbnRFdmVudC5jb25kaXRpb24pe1xuXHRcdFx0dmFyIF9fbWF0
Y2ggPSBtYXRjaCwgY29uZGl0aW9uID0gX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50LmNv
bmRpdGlvbjtcblx0XHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0LCBldmVudCl7XG5cdFx0XHRc
dHJldHVybiBfX21hdGNoKHRhcmdldCwgZXZlbnQpICYmIGNvbmRpdGlvbi5jYWxsKHRhcmdldCwg
ZXZlbnQsIHR5cGUpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgc2VsZiA9IHRoaXMsIHVp
ZCA9IFN0cmluZy51bmlxdWVJRCgpO1xuXHRcdHZhciBkZWxlZ2F0b3IgPSBfbWFwLmxpc3RlbiA/
IGZ1bmN0aW9uKGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYg
ZXZlbnQudGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBf
bWFwLmxpc3RlbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCk7XG5cdFx0fSA6
IGZ1bmN0aW9uKGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYg
ZXZlbnQudGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBi
dWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdH07XG5cblx0XHRp
ZiAoIXN0b3JlZCkgc3RvcmVkID0ge307XG5cdFx0c3RvcmVkW3VpZF0gPSB7XG5cdFx0XHRtYXRj
aDogX21hdGNoLFxuXHRcdFx0Zm46IF9mbixcblx0XHRcdGRlbGVnYXRvcjogZGVsZWdhdG9yXG5c
dFx0fTtcblx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRyZXR1cm4gYWRkRXZlbnQu
Y2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdH0sXG5cblx0cmVt
b3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbiwgX3VpZCl7XG5cdFx0dmFyIHN0b3Jh
Z2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5
cGVdO1xuXHRcdGlmICghc3RvcmVkKSByZXR1cm4gdGhpcztcblxuXHRcdGlmIChfdWlkKXtcblx0
XHRcdHZhciBfdHlwZSA9IHR5cGUsIGRlbGVnYXRvciA9IHN0b3JlZFtfdWlkXS5kZWxlZ2F0b3Is
IF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBl
O1xuXHRcdFx0aWYgKF9tYXAucmVtb3ZlKSBfbWFwLnJlbW92ZSh0aGlzLCBfdWlkKTtcblx0XHRc
dGRlbGV0ZSBzdG9yZWRbX3VpZF07XG5cdFx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0
XHRcdHJldHVybiByZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5j
YXB0dXJlKTtcblx0XHR9XG5cblx0XHR2YXIgX191aWQsIHM7XG5cdFx0aWYgKGZuKSBmb3IgKF9f
dWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChzLm1h
dGNoID09IG1hdGNoICYmIHMuZm4gPT0gZm4pIHJldHVybiBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50
LmNhbGwodGhpcywgdHlwZSwgbWF0Y2gsIGZuLCBfX3VpZCk7XG5cdFx0fSBlbHNlIGZvciAoX191
aWQgaW4gc3RvcmVkKXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0
Y2ggPT0gbWF0Y2gpIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRj
aCwgcy5mbiwgX191aWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59O1xuXG5b
RWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cdGFkZEV2
ZW50OiByZWxheShhZGRFdmVudCwgZGVsZWdhdGlvbi5hZGRFdmVudCksXG5cdHJlbW92ZUV2ZW50
OiByZWxheShyZW1vdmVFdmVudCwgZGVsZWdhdGlvbi5yZW1vdmVFdmVudClcbn0pO1xuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuU3R5bGVcblxuZGVzY3JpcHRpb246IENvbnRh
aW5zIG1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0eWxlcyBvZiBFbGVtZW50cyBp
biBhIGZhc2hpb25hYmxlIHdheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBFbGVtZW50XG5cbnByb3ZpZGVzOiBFbGVtZW50LlN0eWxlXG5cbi4uLlxuKi9cblxu
KGZ1bmN0aW9uKCl7XG5cbnZhciBodG1sID0gZG9jdW1lbnQuaHRtbCwgZWw7XG5cbi8vPGx0SUU5
PlxuLy8gQ2hlY2sgZm9yIG9sZElFLCB3aGljaCBkb2VzIG5vdCByZW1vdmUgc3R5bGVzIHdoZW4g
dGhleSdyZSBzZXQgdG8gbnVsbFxuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtc
bmVsLnN0eWxlLmNvbG9yID0gJ3JlZCc7XG5lbC5zdHlsZS5jb2xvciA9IG51bGw7XG52YXIgZG9l
c05vdFJlbW92ZVN0eWxlcyA9IGVsLnN0eWxlLmNvbG9yID09ICdyZWQnO1xuXG4vLyBjaGVjayBm
b3Igb2xkSUUsIHdoaWNoIHJldHVybnMgYm9yZGVyKiBzaG9ydGhhbmQgc3R5bGVzIGluIHRoZSB3
cm9uZyBvcmRlciAoY29sb3Itd2lkdGgtc3R5bGUgaW5zdGVhZCBvZiB3aWR0aC1zdHlsZS1jb2xv
cilcbnZhciBib3JkZXIgPSAnMXB4IHNvbGlkICMxMjNhYmMnO1xuZWwuc3R5bGUuYm9yZGVyID0g
Ym9yZGVyO1xudmFyIHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyID0gZWwuc3R5bGUuYm9yZGVy
ICE9IGJvcmRlcjtcbmVsID0gbnVsbDtcbi8vPC9sdElFOT5cblxudmFyIGhhc0dldENvbXB1dGVk
U3R5bGUgPSAhIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLFxuXHRzdXBwb3J0Qm9yZGVyUmFkaXVz
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUuYm9yZGVyUmFkaXVzICE9IG51
bGw7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZXMgPSB7c2V0OiBmdW5jdGlvbihzdHlsZXMp
e1xuXHR0aGlzLnNldFN0eWxlcyhzdHlsZXMpO1xufX07XG5cbnZhciBoYXNPcGFjaXR5ID0gKGh0
bWwuc3R5bGUub3BhY2l0eSAhPSBudWxsKSxcblx0aGFzRmlsdGVyID0gKGh0bWwuc3R5bGUuZmls
dGVyICE9IG51bGwpLFxuXHRyZUFscGhhID0gL2FscGhhXFwob3BhY2l0eT0oW1xcZC5dKylcXCkv
aTtcblxudmFyIHNldFZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0
ZWxlbWVudC5zdG9yZSgnJG9wYWNpdHknLCBvcGFjaXR5KTtcblx0ZWxlbWVudC5zdHlsZS52aXNp
YmlsaXR5ID0gb3BhY2l0eSA+IDAgfHwgb3BhY2l0eSA9PSBudWxsID8gJ3Zpc2libGUnIDogJ2hp
ZGRlbic7XG59O1xuXG4vLzxsdElFOT5cbnZhciBzZXRGaWx0ZXIgPSBmdW5jdGlvbihlbGVtZW50
LCByZWdleHAsIHZhbHVlKXtcblx0dmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZSxcblx0XHRmaWx0
ZXIgPSBzdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSB8
fCAnJztcblx0c3R5bGUuZmlsdGVyID0gKHJlZ2V4cC50ZXN0KGZpbHRlcikgPyBmaWx0ZXIucmVw
bGFjZShyZWdleHAsIHZhbHVlKSA6IGZpbHRlciArICcgJyArIHZhbHVlKS50cmltKCk7XG5cdGlm
ICghc3R5bGUuZmlsdGVyKSBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xufTtcbi8v
PC9sdElFOT5cblxudmFyIHNldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1l
bnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5O1xufSA6ICho
YXNGaWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0aWYgKCFlbGVtZW50LmN1
cnJlbnRTdHlsZSB8fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSBlbGVtZW50LnN0
eWxlLnpvb20gPSAxO1xuXHRpZiAob3BhY2l0eSA9PSBudWxsIHx8IG9wYWNpdHkgPT0gMSl7XG5c
dFx0c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICcnKTtcblx0XHRpZiAob3BhY2l0eSA9PSAx
ICYmIGdldE9wYWNpdHkoZWxlbWVudCkgIT0gMSkgc2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEs
ICdhbHBoYShvcGFjaXR5PTEwMCknKTtcblx0fSBlbHNlIHtcblx0XHRzZXRGaWx0ZXIoZWxlbWVu
dCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9JyArIChvcGFjaXR5ICogMTAwKS5saW1pdCgwLCAx
MDApLnJvdW5kKCkgKyAnKScpO1xuXHR9XG59IDogc2V0VmlzaWJpbGl0eSkpO1xuXG52YXIgZ2V0
T3BhY2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5
ID0gZWxlbWVudC5zdHlsZS5vcGFjaXR5IHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnb3Bh
Y2l0eScpO1xuXHRyZXR1cm4gKG9wYWNpdHkgPT0gJycpID8gMSA6IG9wYWNpdHkudG9GbG9hdCgp
O1xufSA6IChoYXNGaWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIGZpbHRlciA9IChl
bGVtZW50LnN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicp
KSxcblx0XHRvcGFjaXR5O1xuXHRpZiAoZmlsdGVyKSBvcGFjaXR5ID0gZmlsdGVyLm1hdGNoKHJl
QWxwaGEpO1xuXHRyZXR1cm4gKG9wYWNpdHkgPT0gbnVsbCB8fCBmaWx0ZXIgPT0gbnVsbCkgPyAx
IDogKG9wYWNpdHlbMV0gLyAxMDApO1xufSA6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3Bh
Y2l0eSA9IGVsZW1lbnQucmV0cmlldmUoJyRvcGFjaXR5Jyk7XG5cdGlmIChvcGFjaXR5ID09IG51
bGwpIG9wYWNpdHkgPSAoZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gMCA6
IDEpO1xuXHRyZXR1cm4gb3BhY2l0eTtcbn0pKTtcblxudmFyIGZsb2F0TmFtZSA9IChodG1sLnN0
eWxlLmNzc0Zsb2F0ID09IG51bGwpID8gJ3N0eWxlRmxvYXQnIDogJ2Nzc0Zsb2F0Jyxcblx0bmFt
ZWRQb3NpdGlvbnMgPSB7bGVmdDogJzAlJywgdG9wOiAnMCUnLCBjZW50ZXI6ICc1MCUnLCByaWdo
dDogJzEwMCUnLCBib3R0b206ICcxMDAlJ30sXG5cdGhhc0JhY2tncm91bmRQb3NpdGlvblhZID0g
KGh0bWwuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uWCAhPSBudWxsKSxcblx0cHJlZml4UGF0dGVy
biA9IC9eLShtcyktLztcblxudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0
cmV0dXJuIHByb3BlcnR5LnJlcGxhY2UocHJlZml4UGF0dGVybiwgJyQxLScpLmNhbWVsQ2FzZSgp
O1xufTtcblxuLy88bHRJRTk+XG52YXIgcmVtb3ZlU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgcHJv
cGVydHkpe1xuXHRpZiAocHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpe1xuXHRcdHN0
eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSArICdYJyk7XG5cdFx0cHJvcGVydHkgKz0gJ1kn
O1xuXHR9XG5cdHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7XG59O1xuLy88L2x0SUU5
PlxuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0Z2V0Q29tcHV0ZWRTdHlsZTogZnVuY3Rpb24o
cHJvcGVydHkpe1xuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiB0aGlzLmN1cnJlbnRT
dHlsZSkgcmV0dXJuIHRoaXMuY3VycmVudFN0eWxlW2NhbWVsQ2FzZShwcm9wZXJ0eSldO1xuXHRc
dHZhciBkZWZhdWx0VmlldyA9IEVsZW1lbnQuZ2V0RG9jdW1lbnQodGhpcykuZGVmYXVsdFZpZXcs
XG5cdFx0XHRjb21wdXRlZCA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRT
dHlsZSh0aGlzLCBudWxsKSA6IG51bGw7XG5cdFx0cmV0dXJuIChjb21wdXRlZCkgPyBjb21wdXRl
ZC5nZXRQcm9wZXJ0eVZhbHVlKChwcm9wZXJ0eSA9PSBmbG9hdE5hbWUpID8gJ2Zsb2F0JyA6IHBy
b3BlcnR5Lmh5cGhlbmF0ZSgpKSA6ICcnO1xuXHR9LFxuXG5cdHNldFN0eWxlOiBmdW5jdGlvbihw
cm9wZXJ0eSwgdmFsdWUpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpe1xuXHRcdFx0
aWYgKHZhbHVlICE9IG51bGwpIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cdFx0XHRzZXRP
cGFjaXR5KHRoaXMsIHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRwcm9w
ZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDogcHJvcGVy
dHkpO1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdzdHJpbmcnKXtcblx0XHRcdHZhciBtYXAg
PSAoRWxlbWVudC5TdHlsZXNbcHJvcGVydHldIHx8ICdAJykuc3BsaXQoJyAnKTtcblx0XHRcdHZh
bHVlID0gQXJyYXkuY29udmVydCh2YWx1ZSkubWFwKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRc
dGlmICghbWFwW2ldKSByZXR1cm4gJyc7XG5cdFx0XHRcdHJldHVybiAodHlwZU9mKHZhbCkgPT0g
J251bWJlcicpID8gbWFwW2ldLnJlcGxhY2UoJ0AnLCBNYXRoLnJvdW5kKHZhbCkpIDogdmFsO1xu
XHRcdFx0fSkuam9pbignICcpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT0gU3RyaW5nKE51bWJl
cih2YWx1ZSkpKXtcblx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSk7XG5cdFx0fVxuXHRc
dHRoaXMuc3R5bGVbcHJvcGVydHldID0gdmFsdWU7XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKCh2
YWx1ZSA9PSAnJyB8fCB2YWx1ZSA9PSBudWxsKSAmJiBkb2VzTm90UmVtb3ZlU3R5bGVzICYmIHRo
aXMuc3R5bGUucmVtb3ZlQXR0cmlidXRlKXtcblx0XHRcdHJlbW92ZVN0eWxlKHRoaXMuc3R5bGUs
IHByb3BlcnR5KTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKHByb3BlcnR5ID09
ICdvcGFjaXR5JykgcmV0dXJuIGdldE9wYWNpdHkodGhpcyk7XG5cdFx0cHJvcGVydHkgPSBjYW1l
bENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRp
ZiAoc3VwcG9ydEJvcmRlclJhZGl1cyAmJiBwcm9wZXJ0eS5pbmRleE9mKCdib3JkZXJSYWRpdXMn
KSAhPSAtMSl7XG5cdFx0XHRyZXR1cm4gWydib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRv
cFJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbUxl
ZnRSYWRpdXMnXS5tYXAoZnVuY3Rpb24oY29ybmVyKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3R5
bGVbY29ybmVyXSB8fCAnMHB4Jztcblx0XHRcdH0sIHRoaXMpLmpvaW4oJyAnKTtcblx0XHR9XG5c
dFx0dmFyIHJlc3VsdCA9IHRoaXMuc3R5bGVbcHJvcGVydHldO1xuXHRcdGlmICghcmVzdWx0IHx8
IHByb3BlcnR5ID09ICd6SW5kZXgnKXtcblx0XHRcdGlmIChFbGVtZW50LlNob3J0U3R5bGVzLmhh
c093blByb3BlcnR5KHByb3BlcnR5KSl7XG5cdFx0XHRcdHJlc3VsdCA9IFtdO1xuXHRcdFx0XHRm
b3IgKHZhciBzIGluIEVsZW1lbnQuU2hvcnRTdHlsZXNbcHJvcGVydHldKSByZXN1bHQucHVzaCh0
aGlzLmdldFN0eWxlKHMpKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG5cdFx0
XHR9XG5cdFx0XHRyZXN1bHQgPSB0aGlzLmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xuXHRc
dH1cblx0XHRpZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgJiYgL15iYWNrZ3JvdW5kUG9zaXRp
b25bWFldPyQvLnRlc3QocHJvcGVydHkpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgv
KHRvcHxyaWdodHxib3R0b218bGVmdCkvZywgZnVuY3Rpb24ocG9zaXRpb24pe1xuXHRcdFx0XHRy
ZXR1cm4gbmFtZWRQb3NpdGlvbnNbcG9zaXRpb25dO1xuXHRcdFx0fSkgfHwgJzBweCc7XG5cdFx0
fVxuXHRcdGlmICghcmVzdWx0ICYmIHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKSBy
ZXR1cm4gJzBweCAwcHgnO1xuXHRcdGlmIChyZXN1bHQpe1xuXHRcdFx0cmVzdWx0ID0gU3RyaW5n
KHJlc3VsdCk7XG5cdFx0XHR2YXIgY29sb3IgPSByZXN1bHQubWF0Y2goL3JnYmE/XFwoW1xcZFxc
cyxdK1xcKS8pO1xuXHRcdFx0aWYgKGNvbG9yKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShjb2xv
clswXSwgY29sb3JbMF0ucmdiVG9IZXgoKSk7XG5cdFx0fVxuXHRcdGlmICghaGFzR2V0Q29tcHV0
ZWRTdHlsZSAmJiAhdGhpcy5zdHlsZVtwcm9wZXJ0eV0pe1xuXHRcdFx0aWYgKCgvXihoZWlnaHR8
d2lkdGgpJC8pLnRlc3QocHJvcGVydHkpICYmICEoL3B4JC8udGVzdChyZXN1bHQpKSl7XG5cdFx0
XHRcdHZhciB2YWx1ZXMgPSAocHJvcGVydHkgPT0gJ3dpZHRoJykgPyBbJ2xlZnQnLCAncmlnaHQn
XSA6IFsndG9wJywgJ2JvdHRvbSddLCBzaXplID0gMDtcblx0XHRcdFx0dmFsdWVzLmVhY2goZnVu
Y3Rpb24odmFsdWUpe1xuXHRcdFx0XHRcdHNpemUgKz0gdGhpcy5nZXRTdHlsZSgnYm9yZGVyLScg
KyB2YWx1ZSArICctd2lkdGgnKS50b0ludCgpICsgdGhpcy5nZXRTdHlsZSgncGFkZGluZy0nICsg
dmFsdWUpLnRvSW50KCk7XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gdGhpc1sn
b2Zmc2V0JyArIHByb3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXplICsgJ3B4Jztcblx0XHRcdH1c
blx0XHRcdGlmICgoL15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KHByb3Bl
cnR5KSAmJiBpc05hTihwYXJzZUZsb2F0KHJlc3VsdCkpKXtcblx0XHRcdFx0cmV0dXJuICcwcHgn
O1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLzxsdElFOT5cblx0XHRpZiAocmV0dXJuc0JvcmRlcnNJ
bldyb25nT3JkZXIgJiYgL15ib3JkZXIoVG9wfFJpZ2h0fEJvdHRvbXxMZWZ0KT8kLy50ZXN0KHBy
b3BlcnR5KSAmJiAvXiMvLnRlc3QocmVzdWx0KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxh
Y2UoL14oLispXFxzKC4rKVxccyguKykkLywgJyQyICQzICQxJyk7XG5cdFx0fVxuXHRcdC8vPC9s
dElFOT5cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0c2V0U3R5bGVzOiBmdW5jdGlv
bihzdHlsZXMpe1xuXHRcdGZvciAodmFyIHN0eWxlIGluIHN0eWxlcykgdGhpcy5zZXRTdHlsZShz
dHlsZSwgc3R5bGVzW3N0eWxlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5
bGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRBcnJheS5mbGF0dGVu
KGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlz
LmdldFN0eWxlKGtleSk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxu
XG59KTtcblxuRWxlbWVudC5TdHlsZXMgPSB7XG5cdGxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBi
b3R0b206ICdAcHgnLCByaWdodDogJ0BweCcsXG5cdHdpZHRoOiAnQHB4JywgaGVpZ2h0OiAnQHB4
JywgbWF4V2lkdGg6ICdAcHgnLCBtYXhIZWlnaHQ6ICdAcHgnLCBtaW5XaWR0aDogJ0BweCcsIG1p
bkhlaWdodDogJ0BweCcsXG5cdGJhY2tncm91bmRDb2xvcjogJ3JnYihALCBALCBAKScsIGJhY2tn
cm91bmRTaXplOiAnQHB4JywgYmFja2dyb3VuZFBvc2l0aW9uOiAnQHB4IEBweCcsIGNvbG9yOiAn
cmdiKEAsIEAsIEApJyxcblx0Zm9udFNpemU6ICdAcHgnLCBsZXR0ZXJTcGFjaW5nOiAnQHB4Jywg
bGluZUhlaWdodDogJ0BweCcsIGNsaXA6ICdyZWN0KEBweCBAcHggQHB4IEBweCknLFxuXHRtYXJn
aW46ICdAcHggQHB4IEBweCBAcHgnLCBwYWRkaW5nOiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVy
OiAnQHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwg
QCknLFxuXHRib3JkZXJXaWR0aDogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRlclN0eWxlOiAnQCBA
IEAgQCcsIGJvcmRlckNvbG9yOiAncmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwg
QCkgcmdiKEAsIEAsIEApJyxcblx0ekluZGV4OiAnQCcsICd6b29tJzogJ0AnLCBmb250V2VpZ2h0
OiAnQCcsIHRleHRJbmRlbnQ6ICdAcHgnLCBvcGFjaXR5OiAnQCcsIGJvcmRlclJhZGl1czogJ0Bw
eCBAcHggQHB4IEBweCdcbn07XG5cblxuXG5cblxuRWxlbWVudC5TaG9ydFN0eWxlcyA9IHttYXJn
aW46IHt9LCBwYWRkaW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVyV2lkdGg6IHt9LCBib3JkZXJT
dHlsZToge30sIGJvcmRlckNvbG9yOiB7fX07XG5cblsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScs
ICdMZWZ0J10uZWFjaChmdW5jdGlvbihkaXJlY3Rpb24pe1xuXHR2YXIgU2hvcnQgPSBFbGVtZW50
LlNob3J0U3R5bGVzO1xuXHR2YXIgQWxsID0gRWxlbWVudC5TdHlsZXM7XG5cdFsnbWFyZ2luJywg
J3BhZGRpbmcnXS5lYWNoKGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR2YXIgc2QgPSBzdHlsZSArIGRp
cmVjdGlvbjtcblx0XHRTaG9ydFtzdHlsZV1bc2RdID0gQWxsW3NkXSA9ICdAcHgnO1xuXHR9KTtc
blx0dmFyIGJkID0gJ2JvcmRlcicgKyBkaXJlY3Rpb247XG5cdFNob3J0LmJvcmRlcltiZF0gPSBB
bGxbYmRdID0gJ0BweCBAIHJnYihALCBALCBAKSc7XG5cdHZhciBiZHcgPSBiZCArICdXaWR0aCcs
IGJkcyA9IGJkICsgJ1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3InO1xuXHRTaG9ydFtiZF0gPSB7
fTtcblx0U2hvcnQuYm9yZGVyV2lkdGhbYmR3XSA9IFNob3J0W2JkXVtiZHddID0gQWxsW2Jkd10g
PSAnQHB4Jztcblx0U2hvcnQuYm9yZGVyU3R5bGVbYmRzXSA9IFNob3J0W2JkXVtiZHNdID0gQWxs
W2Jkc10gPSAnQCc7XG5cdFNob3J0LmJvcmRlckNvbG9yW2JkY10gPSBTaG9ydFtiZF1bYmRjXSA9
IEFsbFtiZGNdID0gJ3JnYihALCBALCBAKSc7XG59KTtcblxuaWYgKGhhc0JhY2tncm91bmRQb3Np
dGlvblhZKSBFbGVtZW50LlNob3J0U3R5bGVzLmJhY2tncm91bmRQb3NpdGlvbiA9IHtiYWNrZ3Jv
dW5kUG9zaXRpb25YOiAnQCcsIGJhY2tncm91bmRQb3NpdGlvblk6ICdAJ307XG59KSgpO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRGltZW5zaW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFp
bnMgbWV0aG9kcyB0byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3NpdGlvbmluZyBvZiBF
bGVtZW50cyBhbmQgdGhlIHdpbmRvdyBvYmplY3QuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5jcmVkaXRzOlxuICAtIEVsZW1lbnQgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIFtx
b294ZG9vXShodHRwOi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBzbWFydCBicm93c2VyIGZpeGVz
LCBbTEdQTCBMaWNlbnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sKS5c
biAgLSBWaWV3cG9ydCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIu
eWFob28uY29tL3l1aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhv
by5jb20veXVpL2xpY2Vuc2UuaHRtbCkuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgRWxlbWVudC5T
dHlsZV1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNdXG5cbi4uLlxuKi9cblxuKGZ1
bmN0aW9uKCl7XG5cbnZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyks
XG5cdGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbGVtZW50LnN0eWxl
LmhlaWdodCA9ICcwJztcbmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xudmFyIGJyb2tlbk9m
ZnNldFBhcmVudCA9IChjaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQpO1xuZWxlbWVudCA9
IGNoaWxkID0gbnVsbDtcblxudmFyIGhlaWdodENvbXBvbmVudHMgPSBbJ2hlaWdodCcsICdwYWRk
aW5nVG9wJywgJ3BhZGRpbmdCb3R0b20nLCAnYm9yZGVyVG9wV2lkdGgnLCAnYm9yZGVyQm90dG9t
V2lkdGgnXSxcblx0d2lkdGhDb21wb25lbnRzID0gWyd3aWR0aCcsICdwYWRkaW5nTGVmdCcsICdw
YWRkaW5nUmlnaHQnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnXTtcblxu
dmFyIHN2Z0NhbGN1bGF0ZVNpemUgPSBmdW5jdGlvbihlbCl7XG5cblx0dmFyIGdDUyA9IHdpbmRv
dy5nZXRDb21wdXRlZFN0eWxlKGVsKSxcblx0XHRib3VuZHMgPSB7eDogMCwgeTogMH07XG5cblx0
aGVpZ2h0Q29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnkgKz0gcGFy
c2VGbG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xuXHR3aWR0aENvbXBvbmVudHMuZWFjaChmdW5jdGlv
bihjc3Mpe1xuXHRcdGJvdW5kcy54ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0
cmV0dXJuIGJvdW5kcztcbn07XG5cbnZhciBpc09mZnNldCA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0
dXJuIHN0eWxlU3RyaW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3RhdGljJyB8fCBpc0JvZHkoZWwp
O1xufTtcblxudmFyIGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gaXNP
ZmZzZXQoZWwpIHx8ICgvXig/OnRhYmxlfHRkfHRoKSQvaSkudGVzdChlbC50YWdOYW1lKTtcbn07
XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzY3JvbGxUbzogZnVuY3Rpb24oeCwgeSl7XG5c
dFx0aWYgKGlzQm9keSh0aGlzKSl7XG5cdFx0XHR0aGlzLmdldFdpbmRvdygpLnNjcm9sbFRvKHgs
IHkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNjcm9sbExlZnQgPSB4O1xuXHRcdFx0dGhp
cy5zY3JvbGxUb3AgPSB5O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRT
aXplOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdp
bmRvdygpLmdldFNpemUoKTtcblxuXHRcdC8vPGx0SUU5PlxuXHRcdC8vIFRoaXMgaWYgY2xhdXNl
IGlzIGJlY2F1c2UgSUU4LSBjYW5ub3QgY2FsY3VsYXRlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBv
ZiBlbGVtZW50cyB3aXRoIHZpc2liaWxpdHkgaGlkZGVuLlxuXHRcdGlmICghd2luZG93LmdldENv
bXB1dGVkU3R5bGUpIHJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0aCwgeTogdGhpcy5vZmZzZXRI
ZWlnaHR9O1xuXHRcdC8vPC9sdElFOT5cblxuXHRcdC8vIFRoaXMgc3ZnIHNlY3Rpb24gdW5kZXIs
IGNhbGxpbmcgYHN2Z0NhbGN1bGF0ZVNpemUoKWAsIGNhbiBiZSByZW1vdmVkIHdoZW4gRkYgZml4
ZWQgdGhlIHN2ZyBzaXplIGJ1Zy5cblx0XHQvLyBCdWcgaW5mbzogaHR0cHM6Ly9idWd6aWxsYS5t
b3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMwOTg1XG5cdFx0aWYgKHRoaXMuZ2V0KCd0YWcn
KSA9PSAnc3ZnJykgcmV0dXJuIHN2Z0NhbGN1bGF0ZVNpemUodGhpcyk7XG5cblx0XHR0cnkge1xu
XHRcdFx0dmFyIGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRy
ZXR1cm4ge3g6IGJvdW5kcy53aWR0aCwgeTogYm91bmRzLmhlaWdodH07XG5cdFx0fSBjYXRjaCAo
ZSl7XG5cdFx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHRcdH1cblx0fSxcblxuXHRnZXRTY3Jv
bGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdl
dFdpbmRvdygpLmdldFNjcm9sbFNpemUoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsV2lk
dGgsIHk6IHRoaXMuc2Nyb2xsSGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0aW9u
KCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Ny
b2xsKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNjcm9sbExlZnQsIHk6IHRoaXMuc2Nyb2xsVG9w
fTtcblx0fSxcblxuXHRnZXRTY3JvbGxzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0g
dGhpcy5wYXJlbnROb2RlLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHR3aGlsZSAoZWxl
bWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVudC5z
Y3JvbGxMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50LnNjcm9sbFRvcDtcblx0XHRc
dGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlv
bjtcblx0fSxcblxuXHRnZXRPZmZzZXRQYXJlbnQ6IGJyb2tlbk9mZnNldFBhcmVudCA/IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkg
fHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51
bGw7XG5cblx0XHR2YXIgaXNPZmZzZXRDaGVjayA9IChzdHlsZVN0cmluZyhlbGVtZW50LCAncG9z
aXRpb24nKSA9PSAnc3RhdGljJykgPyBpc09mZnNldFN0YXRpYyA6IGlzT2Zmc2V0O1xuXHRcdHdo
aWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpe1xuXHRcdFx0aWYgKGlzT2Zmc2V0
Q2hlY2soZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtc
blx0fSA6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0Jv
ZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVk
JykgcmV0dXJuIG51bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQub2Zmc2V0
UGFyZW50O1xuXHRcdH0gY2F0Y2ggKGUpe31cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRn
ZXRPZmZzZXRzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3Qg
PSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdDtcblxuXHRcdGlmIChoYXNHZXRCb3VuZGluZ0Ns
aWVudFJlY3Qpe1xuXHRcdFx0dmFyIGJvdW5kID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KSxcblx0XHRcdFx0aHRtbCA9IGRvY3VtZW50LmlkKHRoaXMuZ2V0RG9jdW1lbnQoKS5kb2N1bWVu
dEVsZW1lbnQpLFxuXHRcdFx0XHRodG1sU2Nyb2xsID0gaHRtbC5nZXRTY3JvbGwoKSxcblx0XHRc
dFx0ZWxlbVNjcm9sbHMgPSB0aGlzLmdldFNjcm9sbHMoKSxcblx0XHRcdFx0aXNGaXhlZCA9IChz
dHlsZVN0cmluZyh0aGlzLCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKTtcblxuXHRcdFx0cmV0dXJu
IHtcblx0XHRcdFx0eDogYm91bmQubGVmdC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy54ICsgKChp
c0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLngpIC0gaHRtbC5jbGllbnRMZWZ0LFxuXHRcdFx0XHR5
OiBib3VuZC50b3AudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueSArICgoaXNGaXhlZCkgPyAwIDog
aHRtbFNjcm9sbC55KSAtIGh0bWwuY2xpZW50VG9wXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZh
ciBlbGVtZW50ID0gdGhpcywgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0aWYgKGlzQm9k
eSh0aGlzKSkgcmV0dXJuIHBvc2l0aW9uO1xuXG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9k
eShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQub2Zmc2V0TGVmdDtcblx0
XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5vZmZzZXRUb3A7XG5cblx0XHRcdGVsZW1lbnQgPSBl
bGVtZW50Lm9mZnNldFBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0s
XG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKHJlbGF0aXZlKXtcblx0XHR2YXIgb2Zmc2V0ID0g
dGhpcy5nZXRPZmZzZXRzKCksXG5cdFx0XHRzY3JvbGwgPSB0aGlzLmdldFNjcm9sbHMoKTtcblx0
XHR2YXIgcG9zaXRpb24gPSB7XG5cdFx0XHR4OiBvZmZzZXQueCAtIHNjcm9sbC54LFxuXHRcdFx0
eTogb2Zmc2V0LnkgLSBzY3JvbGwueVxuXHRcdH07XG5cblx0XHRpZiAocmVsYXRpdmUgJiYgKHJl
bGF0aXZlID0gZG9jdW1lbnQuaWQocmVsYXRpdmUpKSl7XG5cdFx0XHR2YXIgcmVsYXRpdmVQb3Np
dGlvbiA9IHJlbGF0aXZlLmdldFBvc2l0aW9uKCk7XG5cdFx0XHRyZXR1cm4ge3g6IHBvc2l0aW9u
LnggLSByZWxhdGl2ZVBvc2l0aW9uLnggLSBsZWZ0Qm9yZGVyKHJlbGF0aXZlKSwgeTogcG9zaXRp
b24ueSAtIHJlbGF0aXZlUG9zaXRpb24ueSAtIHRvcEJvcmRlcihyZWxhdGl2ZSl9O1xuXHRcdH1c
blx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9u
KGVsZW1lbnQpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygp
LmdldENvb3JkaW5hdGVzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihl
bGVtZW50KSxcblx0XHRcdHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHR2YXIgb2JqID0ge1xu
XHRcdFx0bGVmdDogcG9zaXRpb24ueCxcblx0XHRcdHRvcDogcG9zaXRpb24ueSxcblx0XHRcdHdp
ZHRoOiBzaXplLngsXG5cdFx0XHRoZWlnaHQ6IHNpemUueVxuXHRcdH07XG5cdFx0b2JqLnJpZ2h0
ID0gb2JqLmxlZnQgKyBvYmoud2lkdGg7XG5cdFx0b2JqLmJvdHRvbSA9IG9iai50b3AgKyBvYmou
aGVpZ2h0O1xuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Y29tcHV0ZVBvc2l0aW9uOiBmdW5j
dGlvbihvYmope1xuXHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBvYmoueCAtIHN0eWxlTnVtYmVy
KHRoaXMsICdtYXJnaW4tbGVmdCcpLFxuXHRcdFx0dG9wOiBvYmoueSAtIHN0eWxlTnVtYmVyKHRo
aXMsICdtYXJnaW4tdG9wJylcblx0XHR9O1xuXHR9LFxuXG5cdHNldFBvc2l0aW9uOiBmdW5jdGlv
bihvYmope1xuXHRcdHJldHVybiB0aGlzLnNldFN0eWxlcyh0aGlzLmNvbXB1dGVQb3NpdGlvbihv
YmopKTtcblx0fVxuXG59KTtcblxuXG5bRG9jdW1lbnQsIFdpbmRvd10uaW52b2tlKCdpbXBsZW1l
bnQnLCB7XG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0
RWxlbWVudCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IGRvYy5jbGllbnRXaWR0aCwgeTogZG9jLmNs
aWVudEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdHZhciB3
aW4gPSB0aGlzLmdldFdpbmRvdygpLCBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRc
dHJldHVybiB7eDogd2luLnBhZ2VYT2Zmc2V0IHx8IGRvYy5zY3JvbGxMZWZ0LCB5OiB3aW4ucGFn
ZVlPZmZzZXQgfHwgZG9jLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKSxcblx0XHRcdG1p
biA9IHRoaXMuZ2V0U2l6ZSgpLFxuXHRcdFx0Ym9keSA9IHRoaXMuZ2V0RG9jdW1lbnQoKS5ib2R5
O1xuXG5cdFx0cmV0dXJuIHt4OiBNYXRoLm1heChkb2Muc2Nyb2xsV2lkdGgsIGJvZHkuc2Nyb2xs
V2lkdGgsIG1pbi54KSwgeTogTWF0aC5tYXgoZG9jLnNjcm9sbEhlaWdodCwgYm9keS5zY3JvbGxI
ZWlnaHQsIG1pbi55KX07XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24o
KXtcblx0XHR2YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHJldHVybiB7dG9wOiAwLCBs
ZWZ0OiAwLCBib3R0b206IHNpemUueSwgcmlnaHQ6IHNpemUueCwgaGVpZ2h0OiBzaXplLnksIHdp
ZHRoOiBzaXplLnh9O1xuXHR9XG5cbn0pO1xuXG4vLyBwcml2YXRlIG1ldGhvZHNcblxudmFyIHN0
eWxlU3RyaW5nID0gRWxlbWVudC5nZXRDb21wdXRlZFN0eWxlO1xuXG5mdW5jdGlvbiBzdHlsZU51
bWJlcihlbGVtZW50LCBzdHlsZSl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbGVtZW50LCBzdHls
ZSkudG9JbnQoKSB8fCAwO1xufVxuXG5cblxuZnVuY3Rpb24gdG9wQm9yZGVyKGVsZW1lbnQpe1xu
XHRyZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbn1cblxu
ZnVuY3Rpb24gbGVmdEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1l
bnQsICdib3JkZXItbGVmdC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7
XG5cdHJldHVybiAoL14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGVsZW1lbnQudGFnTmFtZSk7XG59
XG5cbmZ1bmN0aW9uIGdldENvbXBhdEVsZW1lbnQoZWxlbWVudCl7XG5cdHZhciBkb2MgPSBlbGVt
ZW50LmdldERvY3VtZW50KCk7XG5cdHJldHVybiAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21w
YXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xufVxuXG59KSgp
O1xuXG4vL2FsaWFzZXNcbkVsZW1lbnQuYWxpYXMoe3Bvc2l0aW9uOiAnc2V0UG9zaXRpb24nfSk7
IC8vY29tcGF0YWJpbGl0eVxuXG5bV2luZG93LCBEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdp
bXBsZW1lbnQnLCB7XG5cblx0Z2V0SGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LmdldFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzLmdldFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbFRvcDogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbExlZnQ6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDtcblx0fSxcblxuXHRn
ZXRTY3JvbGxIZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6
ZSgpLnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsV2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0VG9wOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueTtcblx0fSxcblxuXHRnZXRMZWZ0OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueDtcblx0fVxuXG59KTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBGeFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGJhc2ljIGFu
aW1hdGlvbiBsb2dpYyB0byBiZSBleHRlbmRlZCBieSBhbGwgb3RoZXIgRnggQ2xhc3Nlcy5cblxu
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQ2hhaW4sIEV2ZW50cywg
T3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdXG5cbnByb3ZpZGVzOiBGeFxuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG52YXIgRnggPSB0aGlzLkZ4ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1l
bnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlv
bnM6IHtcblx0XHQvKlxuXHRcdG9uU3RhcnQ6IG5pbCxcblx0XHRvbkNhbmNlbDogbmlsLFxuXHRc
dG9uQ29tcGxldGU6IG5pbCxcblx0XHQqL1xuXHRcdGZwczogNjAsXG5cdFx0dW5pdDogZmFsc2Us
XG5cdFx0ZHVyYXRpb246IDUwMCxcblx0XHRmcmFtZXM6IG51bGwsXG5cdFx0ZnJhbWVTa2lwOiB0
cnVlLFxuXHRcdGxpbms6ICdpZ25vcmUnXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24o
b3B0aW9ucyl7XG5cdFx0dGhpcy5zdWJqZWN0ID0gdGhpcy5zdWJqZWN0IHx8IHRoaXM7XG5cdFx0
dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHApe1xuXHRcdFx0cmV0dXJuIC0oTWF0aC5jb3Mo
TWF0aC5QSSAqIHApIC0gMSkgLyAyO1xuXHRcdH07XG5cdH0sXG5cblx0c3RlcDogZnVuY3Rpb24o
bm93KXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7XG5cdFx0XHR2YXIgZGlmZiA9
ICh0aGlzLnRpbWUgIT0gbnVsbCkgPyAobm93IC0gdGhpcy50aW1lKSA6IDAsIGZyYW1lcyA9IGRp
ZmYgLyB0aGlzLmZyYW1lSW50ZXJ2YWw7XG5cdFx0XHR0aGlzLnRpbWUgPSBub3c7XG5cdFx0XHR0
aGlzLmZyYW1lICs9IGZyYW1lcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSsrO1xu
XHRcdH1cblxuXHRcdGlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpe1xuXHRcdFx0dmFyIGRl
bHRhID0gdGhpcy50cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlzLmZyYW1lcyk7XG5cdFx0XHR0
aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCBkZWx0YSkpO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLnNldCh0
aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCAxKSk7XG5cdFx0XHR0aGlzLnN0b3AoKTtc
blx0XHR9XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdHJldHVybiBub3c7XG5c
dH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRyZXR1cm4g
RnguY29tcHV0ZShmcm9tLCB0bywgZGVsdGEpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigp
e1xuXHRcdGlmICghdGhpcy5pc1J1bm5pbmcoKSkgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0
aGlzLm9wdGlvbnMubGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyBy
ZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5w
YXNzKGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBm
YWxzZTtcblx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24oZnJvbSwgdG8pe1xuXHRcdGlmICghdGhp
cy5jaGVjayhmcm9tLCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuZnJvbSA9IGZyb207XG5c
dFx0dGhpcy50byA9IHRvO1xuXHRcdHRoaXMuZnJhbWUgPSAodGhpcy5vcHRpb25zLmZyYW1lU2tp
cCkgPyAwIDogLTE7XG5cdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHR0aGlzLnRyYW5zaXRpb24g
PSB0aGlzLmdldFRyYW5zaXRpb24oKTtcblx0XHR2YXIgZnJhbWVzID0gdGhpcy5vcHRpb25zLmZy
YW1lcywgZnBzID0gdGhpcy5vcHRpb25zLmZwcywgZHVyYXRpb24gPSB0aGlzLm9wdGlvbnMuZHVy
YXRpb247XG5cdFx0dGhpcy5kdXJhdGlvbiA9IEZ4LkR1cmF0aW9uc1tkdXJhdGlvbl0gfHwgZHVy
YXRpb24udG9JbnQoKTtcblx0XHR0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXHRc
dHRoaXMuZnJhbWVzID0gZnJhbWVzIHx8IE1hdGgucm91bmQodGhpcy5kdXJhdGlvbiAvIHRoaXMu
ZnJhbWVJbnRlcnZhbCk7XG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVu
ZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5hYmxlKHRoaXMuc3ViamVjdCk7XG5cdFx0fVxu
XHRcdHRoaXMuZmlyZUV2ZW50KCdzdGFydCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0cHVzaEluc3Rh
bmNlLmNhbGwodGhpcywgZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdG9wOiBm
dW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9
IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtc
blx0XHRcdGlmICh0aGlzLmZyYW1lcyA9PSB0aGlzLmZyYW1lKXtcblx0XHRcdFx0dGhpcy5maXJl
RXZlbnQoJ2NvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdFx0aWYgKCF0aGlzLmNhbGxD
aGFpbigpKSB0aGlzLmZpcmVFdmVudCgnY2hhaW5Db21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5c
dFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnc3RvcCcsIHRoaXMuc3ViamVj
dCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJlc29sdmUodGhpcy5zdWJqZWN0ID09PSB0aGlzID8g
bnVsbCA6IHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGNhbmNlbDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0
aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRp
b25zLmZwcyk7XG5cdFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLmZp
cmVFdmVudCgnY2FuY2VsJywgdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7XG5cdFx0XHR0aGlz
LnJlamVjdCh0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRwYXVzZTogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0
aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRp
b25zLmZwcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlc3VtZTogZnVu
Y3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1BhdXNlZCgpKSBwdXNoSW5zdGFuY2UuY2FsbCh0aGlz
LCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpc1J1bm5p
bmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbdGhpcy5vcHRpb25zLmZw
c107XG5cdFx0cmV0dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0aGlzKTtcblx0fSxcblxuXHRp
c1BhdXNlZDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1l
cykgJiYgIXRoaXMuaXNSdW5uaW5nKCk7XG5cdH1cblxufSk7XG5cbkZ4LmNvbXB1dGUgPSBmdW5j
dGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRyZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZy
b207XG59O1xuXG5GeC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAn
bG9uZyc6IDEwMDB9O1xuXG4vLyBnbG9iYWwgdGltZXJzXG5cbnZhciBpbnN0YW5jZXMgPSB7fSwg
dGltZXJzID0ge307XG5cbnZhciBsb29wID0gZnVuY3Rpb24oKXtcblx0dmFyIG5vdyA9IERhdGUu
bm93KCk7XG5cdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGluc3Rh
bmNlID0gdGhpc1tpXTtcblx0XHRpZiAoaW5zdGFuY2UpIGluc3RhbmNlLnN0ZXAobm93KTtcblx0
fVxufTtcblxudmFyIHB1c2hJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0g
aW5zdGFuY2VzW2Zwc10gfHwgKGluc3RhbmNlc1tmcHNdID0gW10pO1xuXHRsaXN0LnB1c2godGhp
cyk7XG5cdGlmICghdGltZXJzW2Zwc10pIHRpbWVyc1tmcHNdID0gbG9vcC5wZXJpb2RpY2FsKE1h
dGgucm91bmQoMTAwMCAvIGZwcyksIGxpc3QpO1xufTtcblxudmFyIHB1bGxJbnN0YW5jZSA9IGZ1
bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc107XG5cdGlmIChsaXN0KXtc
blx0XHRsaXN0LmVyYXNlKHRoaXMpO1xuXHRcdGlmICghbGlzdC5sZW5ndGggJiYgdGltZXJzW2Zw
c10pe1xuXHRcdFx0ZGVsZXRlIGluc3RhbmNlc1tmcHNdO1xuXHRcdFx0dGltZXJzW2Zwc10gPSBj
bGVhckludGVydmFsKHRpbWVyc1tmcHNdKTtcblx0XHR9XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8q
XG4tLS1cblxubmFtZTogRnguQ1NTXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ1NTIGFu
aW1hdGlvbiBsb2dpYy4gVXNlZCBieSBGeC5Ud2VlbiwgRnguTW9ycGgsIEZ4LkVsZW1lbnRzLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtGeCwgRWxlbWVudC5T
dHlsZV1cblxucHJvdmlkZXM6IEZ4LkNTU1xuXG4uLi5cbiovXG5cbkZ4LkNTUyA9IG5ldyBDbGFz
cyh7XG5cblx0RXh0ZW5kczogRngsXG5cblx0Ly9wcmVwYXJlcyB0aGUgYmFzZSBmcm9tL3RvIG9i
amVjdFxuXG5cdHByZXBhcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZXMpe1xu
XHRcdHZhbHVlcyA9IEFycmF5LmNvbnZlcnQodmFsdWVzKTtcblx0XHR2YXIgZnJvbSA9IHZhbHVl
c1swXSwgdG8gPSB2YWx1ZXNbMV07XG5cdFx0aWYgKHRvID09IG51bGwpe1xuXHRcdFx0dG8gPSBm
cm9tO1xuXHRcdFx0ZnJvbSA9IGVsZW1lbnQuZ2V0U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0dmFy
IHVuaXQgPSB0aGlzLm9wdGlvbnMudW5pdDtcblx0XHRcdC8vIGFkYXB0ZWQgZnJvbTogaHR0cHM6
Ly9naXRodWIuY29tL3J5YW5tb3JyL2Z4L2Jsb2IvbWFzdGVyL2Z4LmpzI0wyOTlcblx0XHRcdGlm
ICh1bml0ICYmIGZyb20gJiYgdHlwZW9mIGZyb20gPT0gJ3N0cmluZycgJiYgZnJvbS5zbGljZSgt
dW5pdC5sZW5ndGgpICE9IHVuaXQgJiYgcGFyc2VGbG9hdChmcm9tKSAhPSAwKXtcblx0XHRcdFx0
ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdG8gKyB1bml0KTtcblx0XHRcdFx0dmFyIHZhbHVl
ID0gZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHRcdFx0Ly8gSUUgYW5k
IE9wZXJhIHN1cHBvcnQgcGl4ZWxMZWZ0IG9yIHBpeGVsV2lkdGhcblx0XHRcdFx0aWYgKCEoL3B4
JC8udGVzdCh2YWx1ZSkpKXtcblx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbKCdwaXhl
bC0nICsgcHJvcGVydHkpLmNhbWVsQ2FzZSgpXTtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT0gbnVs
bCl7XG5cdFx0XHRcdFx0XHQvLyBhZGFwdGVkIGZyb20gRGVhbiBFZHdhcmRzJyBodHRwOi8vZXJp
ay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxXG5c
dFx0XHRcdFx0XHR2YXIgbGVmdCA9IGVsZW1lbnQuc3R5bGUubGVmdDtcblx0XHRcdFx0XHRcdGVs
ZW1lbnQuc3R5bGUubGVmdCA9IHRvICsgdW5pdDtcblx0XHRcdFx0XHRcdHZhbHVlID0gZWxlbWVu
dC5zdHlsZS5waXhlbExlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0
O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmcm9tID0gKHRvIHx8IDEpIC8gKHBh
cnNlRmxvYXQodmFsdWUpIHx8IDEpICogKHBhcnNlRmxvYXQoZnJvbSkgfHwgMCk7XG5cdFx0XHRc
dGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIGZyb20gKyB1bml0KTtcblx0XHRcdH1cblx0XHR9
XG5cdFx0cmV0dXJuIHtmcm9tOiB0aGlzLnBhcnNlKGZyb20pLCB0bzogdGhpcy5wYXJzZSh0byl9
O1xuXHR9LFxuXG5cdC8vcGFyc2VzIGEgdmFsdWUgaW50byBhbiBhcnJheVxuXG5cdHBhcnNlOiBm
dW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFsdWUgPSBGdW5jdGlvbi5jb252ZXJ0KHZhbHVlKSgpO1xu
XHRcdHZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1ZS5zcGxpdCgnICcp
IDogQXJyYXkuY29udmVydCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbih2
YWwpe1xuXHRcdFx0dmFsID0gU3RyaW5nKHZhbCk7XG5cdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtc
blx0XHRcdE9iamVjdC5lYWNoKEZ4LkNTUy5QYXJzZXJzLCBmdW5jdGlvbihwYXJzZXIpe1xuXHRc
dFx0XHRpZiAoZm91bmQpIHJldHVybjtcblx0XHRcdFx0dmFyIHBhcnNlZCA9IHBhcnNlci5wYXJz
ZSh2YWwpO1xuXHRcdFx0XHRpZiAocGFyc2VkIHx8IHBhcnNlZCA9PT0gMCkgZm91bmQgPSB7dmFs
dWU6IHBhcnNlZCwgcGFyc2VyOiBwYXJzZXJ9O1xuXHRcdFx0fSk7XG5cdFx0XHRmb3VuZCA9IGZv
dW5kIHx8IHt2YWx1ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJzZXJzLlN0cmluZ307XG5cdFx0
XHRyZXR1cm4gZm91bmQ7XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly9jb21wdXRlcyBieSBhIGZyb20g
YW5kIHRvIHByZXBhcmVkIG9iamVjdHMsIHVzaW5nIHRoZWlyIHBhcnNlcnMuXG5cblx0Y29tcHV0
ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgY29tcHV0ZWQgPSBbXTtcblx0
XHQoTWF0aC5taW4oZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGkpe1xu
XHRcdFx0Y29tcHV0ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFyc2VyLmNvbXB1dGUoZnJvbVtp
XS52YWx1ZSwgdG9baV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBmcm9tW2ldLnBhcnNlcn0pO1xu
XHRcdH0pO1xuXHRcdGNvbXB1dGVkLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdmeDpjc3M6
dmFsdWUnKTtcblx0XHRyZXR1cm4gY29tcHV0ZWQ7XG5cdH0sXG5cblx0Ly9zZXJ2ZXMgdGhlIHZh
bHVlIGFzIHNldHRhYmxlXG5cblx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRp
ZiAodHlwZU9mKHZhbHVlKSAhPSAnZng6Y3NzOnZhbHVlJykgdmFsdWUgPSB0aGlzLnBhcnNlKHZh
bHVlKTtcblx0XHR2YXIgcmV0dXJuZWQgPSBbXTtcblx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKGJp
dCl7XG5cdFx0XHRyZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChiaXQucGFyc2VyLnNlcnZlKGJp
dC52YWx1ZSwgdW5pdCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXR1cm5lZDtcblx0fSxcblxu
XHQvL3JlbmRlcnMgdGhlIGNoYW5nZSB0byBhbiBlbGVtZW50XG5cblx0cmVuZGVyOiBmdW5jdGlv
bihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUsIHVuaXQpe1xuXHRcdGVsZW1lbnQuc2V0U3R5bGUo
cHJvcGVydHksIHRoaXMuc2VydmUodmFsdWUsIHVuaXQpKTtcblx0fSxcblxuXHQvL3NlYXJjaGVz
IGluc2lkZSB0aGUgcGFnZSBjc3MgdG8gZmluZCB0aGUgdmFsdWVzIGZvciBhIHNlbGVjdG9yXG5c
blx0c2VhcmNoOiBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdFx0aWYgKEZ4LkNTUy5DYWNoZVtzZWxl
Y3Rvcl0pIHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdO1xuXHRcdHZhciB0byA9IHt9LCBz
ZWxlY3RvclRlc3QgPSBuZXcgUmVnRXhwKCdeJyArIHNlbGVjdG9yLmVzY2FwZVJlZ0V4cCgpICsg
JyQnKTtcblxuXHRcdHZhciBzZWFyY2hTdHlsZXMgPSBmdW5jdGlvbihydWxlcyl7XG5cdFx0XHRB
cnJheS5lYWNoKHJ1bGVzLCBmdW5jdGlvbihydWxlKXtcblx0XHRcdFx0aWYgKHJ1bGUubWVkaWEp
e1xuXHRcdFx0XHRcdHNlYXJjaFN0eWxlcyhydWxlLnJ1bGVzIHx8IHJ1bGUuY3NzUnVsZXMpO1xu
XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGUpIHJl
dHVybjtcblx0XHRcdFx0dmFyIHNlbGVjdG9yVGV4dCA9IChydWxlLnNlbGVjdG9yVGV4dCkgPyBy
dWxlLnNlbGVjdG9yVGV4dC5yZXBsYWNlKC9eXFx3Ky8sIGZ1bmN0aW9uKG0pe1xuXHRcdFx0XHRc
dHJldHVybiBtLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pIDogbnVsbDtcblx0XHRcdFx0aWYg
KCFzZWxlY3RvclRleHQgfHwgIXNlbGVjdG9yVGVzdC50ZXN0KHNlbGVjdG9yVGV4dCkpIHJldHVy
bjtcblx0XHRcdFx0T2JqZWN0LmVhY2goRWxlbWVudC5TdHlsZXMsIGZ1bmN0aW9uKHZhbHVlLCBz
dHlsZSl7XG5cdFx0XHRcdFx0aWYgKCFydWxlLnN0eWxlW3N0eWxlXSB8fCBFbGVtZW50LlNob3J0
U3R5bGVzW3N0eWxlXSkgcmV0dXJuO1xuXHRcdFx0XHRcdHZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5
bGVbc3R5bGVdKTtcblx0XHRcdFx0XHR0b1tzdHlsZV0gPSAoKC9ecmdiLykudGVzdCh2YWx1ZSkp
ID8gdmFsdWUucmdiVG9IZXgoKSA6IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRc
dH07XG5cblx0XHRBcnJheS5lYWNoKGRvY3VtZW50LnN0eWxlU2hlZXRzLCBmdW5jdGlvbihzaGVl
dCl7XG5cdFx0XHR2YXIgaHJlZiA9IHNoZWV0LmhyZWY7XG5cdFx0XHRpZiAoaHJlZiAmJiBocmVm
LmluZGV4T2YoJzovLycpID4gLTEgJiYgaHJlZi5pbmRleE9mKGRvY3VtZW50LmRvbWFpbikgPT0g
LTEpIHJldHVybjtcblx0XHRcdHZhciBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1
bGVzO1xuXHRcdFx0c2VhcmNoU3R5bGVzKHJ1bGVzKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gRngu
Q1NTLkNhY2hlW3NlbGVjdG9yXSA9IHRvO1xuXHR9XG5cbn0pO1xuXG5GeC5DU1MuQ2FjaGUgPSB7
fTtcblxuRnguQ1NTLlBhcnNlcnMgPSB7XG5cblx0Q29sb3I6IHtcblx0XHRwYXJzZTogZnVuY3Rp
b24odmFsdWUpe1xuXHRcdFx0aWYgKHZhbHVlLm1hdGNoKC9eI1swLTlhLWZdezMsNn0kL2kpKSBy
ZXR1cm4gdmFsdWUuaGV4VG9SZ2IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gKCh2YWx1ZSA9IHZhbHVl
Lm1hdGNoKC8oXFxkKyksXFxzKihcXGQrKSxcXHMqKFxcZCspLykpKSA/IFt2YWx1ZVsxXSwgdmFs
dWVbMl0sIHZhbHVlWzNdXSA6IGZhbHNlO1xuXHRcdH0sXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24o
ZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRcdHJldHVybiBmcm9tLm1hcChmdW5jdGlvbih2YWx1ZSwg
aSl7XG5cdFx0XHRcdHJldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoZnJvbVtpXSwgdG9baV0s
IGRlbHRhKSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSl7
XG5cdFx0XHRyZXR1cm4gdmFsdWUubWFwKE51bWJlcik7XG5cdFx0fVxuXHR9LFxuXG5cdE51bWJl
cjoge1xuXHRcdHBhcnNlOiBwYXJzZUZsb2F0LFxuXHRcdGNvbXB1dGU6IEZ4LmNvbXB1dGUsXG5c
dFx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRcdHJldHVybiAodW5pdCkgPyB2
YWx1ZSArIHVuaXQgOiB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cblx0U3RyaW5nOiB7XG5cdFx0cGFy
c2U6IEZ1bmN0aW9uLmNvbnZlcnQoZmFsc2UpLFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKHplcm8s
IG9uZSl7XG5cdFx0XHRyZXR1cm4gb25lO1xuXHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHpl
cm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5cdFx0fVxuXHR9XG5cbn07XG5cblxuXG4vKlxuLS0t
XG5cbm5hbWU6IEZ4Lk1vcnBoXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZXMsIGVm
ZmVjdCB0byB0cmFuc2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVs
ZW1lbnQgdXNpbmcgYW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVs
ZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NTXG5c
bnByb3ZpZGVzOiBGeC5Nb3JwaFxuXG4uLi5cbiovXG5cbkZ4Lk1vcnBoID0gbmV3IENsYXNzKHtc
blxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwg
b3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQo
ZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5j
dGlvbihub3cpe1xuXHRcdGlmICh0eXBlb2Ygbm93ID09ICdzdHJpbmcnKSBub3cgPSB0aGlzLnNl
YXJjaChub3cpO1xuXHRcdGZvciAodmFyIHAgaW4gbm93KSB0aGlzLnJlbmRlcih0aGlzLmVsZW1l
bnQsIHAsIG5vd1twXSwgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIG5vdyA9
IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gZnJvbSkgbm93W3BdID0gdGhpcy5wYXJlbnQoZnJvbVtw
XSwgdG9bcF0sIGRlbHRhKTtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5j
dGlvbihwcm9wZXJ0aWVzKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVydGllcykpIHJldHVy
biB0aGlzO1xuXHRcdGlmICh0eXBlb2YgcHJvcGVydGllcyA9PSAnc3RyaW5nJykgcHJvcGVydGll
cyA9IHRoaXMuc2VhcmNoKHByb3BlcnRpZXMpO1xuXHRcdHZhciBmcm9tID0ge30sIHRvID0ge307
XG5cdFx0Zm9yICh2YXIgcCBpbiBwcm9wZXJ0aWVzKXtcblx0XHRcdHZhciBwYXJzZWQgPSB0aGlz
LnByZXBhcmUodGhpcy5lbGVtZW50LCBwLCBwcm9wZXJ0aWVzW3BdKTtcblx0XHRcdGZyb21bcF0g
PSBwYXJzZWQuZnJvbTtcblx0XHRcdHRvW3BdID0gcGFyc2VkLnRvO1xuXHRcdH1cblx0XHRyZXR1
cm4gdGhpcy5wYXJlbnQoZnJvbSwgdG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRp
ZXMubW9ycGggPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgn
bW9ycGgnKS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbW9ycGggPSB0aGlzLnJldHJpZXZl
KCdtb3JwaCcpO1xuXHRcdGlmICghbW9ycGgpe1xuXHRcdFx0bW9ycGggPSBuZXcgRnguTW9ycGgo
dGhpcywge2xpbms6ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdtb3JwaCcsIG1vcnBo
KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1vcnBoO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVt
ZW50KHtcblxuXHRtb3JwaDogZnVuY3Rpb24ocHJvcHMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcp
LnN0YXJ0KHByb3BzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxu
XG5uYW1lOiBGeC5UcmFuc2l0aW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBzZXQgb2Yg
YWR2YW5jZWQgdHJhbnNpdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGFueSBvZiB0aGUgRnggQ2xhc3Nl
cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWFzaW5n
IEVxdWF0aW9ucyBieSBSb2JlcnQgUGVubmVyLCA8aHR0cDovL3d3dy5yb2JlcnRwZW5uZXIuY29t
L2Vhc2luZy8+LCBtb2RpZmllZCBhbmQgb3B0aW1pemVkIHRvIGJlIHVzZWQgd2l0aCBNb29Ub29s
cy5cblxucmVxdWlyZXM6IEZ4XG5cbnByb3ZpZGVzOiBGeC5UcmFuc2l0aW9uc1xuXG4uLi5cbiov
XG5cbkZ4LmltcGxlbWVudCh7XG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHR2
YXIgdHJhbnMgPSB0aGlzLm9wdGlvbnMudHJhbnNpdGlvbiB8fCBGeC5UcmFuc2l0aW9ucy5TaW5l
LmVhc2VJbk91dDtcblx0XHRpZiAodHlwZW9mIHRyYW5zID09ICdzdHJpbmcnKXtcblx0XHRcdHZh
ciBkYXRhID0gdHJhbnMuc3BsaXQoJzonKTtcblx0XHRcdHRyYW5zID0gRnguVHJhbnNpdGlvbnM7
XG5cdFx0XHR0cmFucyA9IHRyYW5zW2RhdGFbMF1dIHx8IHRyYW5zW2RhdGFbMF0uY2FwaXRhbGl6
ZSgpXTtcblx0XHRcdGlmIChkYXRhWzFdKSB0cmFucyA9IHRyYW5zWydlYXNlJyArIGRhdGFbMV0u
Y2FwaXRhbGl6ZSgpICsgKGRhdGFbMl0gPyBkYXRhWzJdLmNhcGl0YWxpemUoKSA6ICcnKV07XG5c
dFx0fVxuXHRcdHJldHVybiB0cmFucztcblx0fVxuXG59KTtcblxuRnguVHJhbnNpdGlvbiA9IGZ1
bmN0aW9uKHRyYW5zaXRpb24sIHBhcmFtcyl7XG5cdHBhcmFtcyA9IEFycmF5LmNvbnZlcnQocGFy
YW1zKTtcblx0dmFyIGVhc2VJbiA9IGZ1bmN0aW9uKHBvcyl7XG5cdFx0cmV0dXJuIHRyYW5zaXRp
b24ocG9zLCBwYXJhbXMpO1xuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFwcGVuZChlYXNlSW4sIHtc
blx0XHRlYXNlSW46IGVhc2VJbixcblx0XHRlYXNlT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0
cmV0dXJuIDEgLSB0cmFuc2l0aW9uKDEgLSBwb3MsIHBhcmFtcyk7XG5cdFx0fSxcblx0XHRlYXNl
SW5PdXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gKHBvcyA8PSAwLjUgPyB0cmFuc2l0
aW9uKDIgKiBwb3MsIHBhcmFtcykgOiAoMiAtIHRyYW5zaXRpb24oMiAqICgxIC0gcG9zKSwgcGFy
YW1zKSkpIC8gMjtcblx0XHR9XG5cdH0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMgPSB7XG5cblx0
bGluZWFyOiBmdW5jdGlvbih6ZXJvKXtcblx0XHRyZXR1cm4gemVybztcblx0fVxuXG59O1xuXG5c
blxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kID0gZnVuY3Rpb24odHJhbnNpdGlvbnMpe1xuXHRmb3Ig
KHZhciB0cmFuc2l0aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9u
XSA9IG5ldyBGeC5UcmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5zaXRpb25dKTtcbn07XG5cbkZ4
LlRyYW5zaXRpb25zLmV4dGVuZCh7XG5cblx0UG93OiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1
cm4gTWF0aC5wb3cocCwgeCAmJiB4WzBdIHx8IDYpO1xuXHR9LFxuXG5cdEV4cG86IGZ1bmN0aW9u
KHApe1xuXHRcdHJldHVybiBNYXRoLnBvdygyLCA4ICogKHAgLSAxKSk7XG5cdH0sXG5cblx0Q2ly
YzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocCkpO1xu
XHR9LFxuXG5cdFNpbmU6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5jb3MocCAq
IE1hdGguUEkgLyAyKTtcblx0fSxcblxuXHRCYWNrOiBmdW5jdGlvbihwLCB4KXtcblx0XHR4ID0g
eCAmJiB4WzBdIHx8IDEuNjE4O1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCAyKSAqICgoeCArIDEp
ICogcCAtIHgpO1xuXHR9LFxuXG5cdEJvdW5jZTogZnVuY3Rpb24ocCl7XG5cdFx0dmFyIHZhbHVl
O1xuXHRcdGZvciAodmFyIGEgPSAwLCBiID0gMTsgMTsgYSArPSBiLCBiIC89IDIpe1xuXHRcdFx0
aWYgKHAgPj0gKDcgLSA0ICogYSkgLyAxMSl7XG5cdFx0XHRcdHZhbHVlID0gYiAqIGIgLSBNYXRo
LnBvdygoMTEgLSA2ICogYSAtIDExICogcCkgLyA0LCAyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0
XHR9XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblxuXHRFbGFzdGljOiBmdW5jdGlv
bihwLCB4KXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAtLXApICogTWF0aC5jb3MoMjAg
KiBwICogTWF0aC5QSSAqICh4ICYmIHhbMF0gfHwgMSkgLyAzKTtcblx0fVxuXG59KTtcblxuWydR
dWFkJywgJ0N1YmljJywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChmdW5jdGlvbih0cmFuc2l0aW9u
LCBpKXtcblx0RnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbihm
dW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgaSArIDIpO1xuXHR9KTtcbn0pO1xu
XG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlR3ZWVuXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5T
dHlsZSwgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55IENTUyBwcm9wZXJ0eSBmb3IgYW4gZWxlbWVu
dC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1Ncblxu
cHJvdmlkZXM6IFtGeC5Ud2VlbiwgRWxlbWVudC5mYWRlLCBFbGVtZW50LmhpZ2hsaWdodF1cblxu
Li4uXG4qL1xuXG5GeC5Ud2VlbiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxu
XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxl
bWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFy
ZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcGVydHksIG5vdyl7XG5c
dFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0XHRub3cgPSBwcm9wZXJ0eTtcblx0
XHRcdHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9wdGlvbnMucHJvcGVydHk7XG5c
dFx0fVxuXHRcdHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcHJvcGVydHksIG5vdywgdGhpcy5v
cHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlv
bihwcm9wZXJ0eSwgZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhwcm9wZXJ0eSwgZnJv
bSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR2YXIgYXJncyA9IEFycmF5LmZsYXR0ZW4oYXJndW1l
bnRzKTtcblx0XHR0aGlzLnByb3BlcnR5ID0gdGhpcy5vcHRpb25zLnByb3BlcnR5IHx8IGFyZ3Mu
c2hpZnQoKTtcblx0XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgdGhp
cy5wcm9wZXJ0eSwgYXJncyk7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KHBhcnNlZC5mcm9tLCBw
YXJzZWQudG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMudHdlZW4gPSB7XG5c
blx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5jYW5jZWwo
KS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgdHdlZW4gPSB0aGlzLnJldHJpZXZlKCd0d2VlbicpO1xuXHRc
dGlmICghdHdlZW4pe1xuXHRcdFx0dHdlZW4gPSBuZXcgRnguVHdlZW4odGhpcywge2xpbms6ICdj
YW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCd0d2VlbicsIHR3ZWVuKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHR3ZWVuO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHR0d2Vl
bjogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5z
dGFydChwcm9wZXJ0eSwgZnJvbSwgdG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZh
ZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGZhZGUgPSB0aGlzLmdldCgndHdlZW4nKSwgbWV0aG9k
LCBhcmdzID0gWydvcGFjaXR5J10uYXBwZW5kKGFyZ3VtZW50cyksIHRvZ2dsZTtcblx0XHRpZiAo
YXJnc1sxXSA9PSBudWxsKSBhcmdzWzFdID0gJ3RvZ2dsZSc7XG5cdFx0c3dpdGNoIChhcmdzWzFd
KXtcblx0XHRcdGNhc2UgJ2luJzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDE7IGJyZWFr
O1xuXHRcdFx0Y2FzZSAnb3V0JzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDA7IGJyZWFr
O1xuXHRcdFx0Y2FzZSAnc2hvdyc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMTsgYnJlYWs7
XG5cdFx0XHRjYXNlICdoaWRlJzogbWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAwOyBicmVhaztc
blx0XHRcdGNhc2UgJ3RvZ2dsZSc6XG5cdFx0XHRcdHZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgn
ZmFkZTpmbGFnJywgdGhpcy5nZXRTdHlsZSgnb3BhY2l0eScpID09IDEpO1xuXHRcdFx0XHRtZXRo
b2QgPSAnc3RhcnQnO1xuXHRcdFx0XHRhcmdzWzFdID0gZmxhZyA/IDAgOiAxO1xuXHRcdFx0XHR0
aGlzLnN0b3JlKCdmYWRlOmZsYWcnLCAhZmxhZyk7XG5cdFx0XHRcdHRvZ2dsZSA9IHRydWU7XG5c
dFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogbWV0aG9kID0gJ3N0YXJ0Jztcblx0XHR9XG5c
dFx0aWYgKCF0b2dnbGUpIHRoaXMuZWxpbWluYXRlKCdmYWRlOmZsYWcnKTtcblx0XHRmYWRlW21l
dGhvZF0uYXBwbHkoZmFkZSwgYXJncyk7XG5cdFx0dmFyIHRvID0gYXJnc1thcmdzLmxlbmd0aCAt
IDFdO1xuXG5cdFx0aWYgKG1ldGhvZCA9PSAnc2V0Jyl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCd2
aXNpYmlsaXR5JywgdG8gPT0gMCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnKTtcblx0XHR9IGVsc2Ug
aWYgKHRvICE9IDApe1xuXHRcdFx0aWYgKGZhZGUuJGNoYWluLmxlbmd0aCl7XG5cdFx0XHRcdGZh
ZGUuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zp
c2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0
XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0
eScsICd2aXNpYmxlJyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZhZGUuY2hhaW4o
ZnVuY3Rpb24oKXtcblx0XHRcdFx0aWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScp
KSByZXR1cm47XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICdo
aWRkZW4nKTtcblx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdH0pO1xuXHRcdH1cblxu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhpZ2hsaWdodDogZnVuY3Rpb24oc3RhcnQsIGVu
ZCl7XG5cdFx0aWYgKCFlbmQpe1xuXHRcdFx0ZW5kID0gdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0
Om9yaWdpbmFsJywgdGhpcy5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpKTtcblx0XHRcdGVu
ZCA9IChlbmQgPT0gJ3RyYW5zcGFyZW50JykgPyAnI2ZmZicgOiBlbmQ7XG5cdFx0fVxuXHRcdHZh
ciB0d2VlbiA9IHRoaXMuZ2V0KCd0d2VlbicpO1xuXHRcdHR3ZWVuLnN0YXJ0KCdiYWNrZ3JvdW5k
LWNvbG9yJywgc3RhcnQgfHwgJyNmZmZmODgnLCBlbmQpLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0
XHR0aGlzLnNldFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy5yZXRyaWV2ZSgnaGlnaGxp
Z2h0Om9yaWdpbmFsJykpO1xuXHRcdFx0dHdlZW4uY2FsbENoYWluKCk7XG5cdFx0fS5iaW5kKHRo
aXMpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBS
ZXF1ZXN0XG5cbmRlc2NyaXB0aW9uOiBQb3dlcmZ1bCBhbGwgcHVycG9zZSBSZXF1ZXN0IENsYXNz
LiBVc2VzIFhNTEhUVFBSZXF1ZXN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxu
cmVxdWlyZXM6IFtPYmplY3QsIEVsZW1lbnQsIENoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNz
LlRoZW5hYmxlLCBCcm93c2VyXVxuXG5wcm92aWRlczogUmVxdWVzdFxuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG52YXIgZW1wdHkgPSBmdW5jdGlvbigpe30sXG5cdHByb2dyZXNzU3VwcG9y
dCA9ICgnb25wcm9ncmVzcycgaW4gbmV3IEJyb3dzZXIuUmVxdWVzdCk7XG5cbnZhciBSZXF1ZXN0
ID0gdGhpcy5SZXF1ZXN0ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2
ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHsvKlxuXHRcdG9u
UmVxdWVzdDogZnVuY3Rpb24oKXt9LFxuXHRcdG9uTG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCwg
eGhyKXt9LFxuXHRcdG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25D
b21wbGV0ZTogZnVuY3Rpb24oKXt9LFxuXHRcdG9uQ2FuY2VsOiBmdW5jdGlvbigpe30sXG5cdFx0
b25TdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKXt9LFxuXHRcdG9u
RmFpbHVyZTogZnVuY3Rpb24oeGhyKXt9LFxuXHRcdG9uRXhjZXB0aW9uOiBmdW5jdGlvbihoZWFk
ZXJOYW1lLCB2YWx1ZSl7fSxcblx0XHRvblRpbWVvdXQ6IGZ1bmN0aW9uKCl7fSxcblx0XHR1c2Vy
OiAnJyxcblx0XHRwYXNzd29yZDogJycsXG5cdFx0d2l0aENyZWRlbnRpYWxzOiBmYWxzZSwqL1xu
XHRcdHVybDogJycsXG5cdFx0ZGF0YTogJycsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0J1gtUmVx
dWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxuXHRcdFx0J0FjY2VwdCc6ICd0ZXh0L2ph
dmFzY3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRc
dH0sXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Zm9ybWF0OiBmYWxzZSxcblx0XHRtZXRob2Q6ICdw
b3N0Jyxcblx0XHRsaW5rOiAnaWdub3JlJyxcblx0XHRpc1N1Y2Nlc3M6IG51bGwsXG5cdFx0ZW11
bGF0aW9uOiB0cnVlLFxuXHRcdHVybEVuY29kZWQ6IHRydWUsXG5cdFx0ZW5jb2Rpbmc6ICd1dGYt
OCcsXG5cdFx0ZXZhbFNjcmlwdHM6IGZhbHNlLFxuXHRcdGV2YWxSZXNwb25zZTogZmFsc2UsXG5c
dFx0dGltZW91dDogMCxcblx0XHRub0NhY2hlOiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6
IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgp
O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR0aGlzLmhlYWRlcnMgPSB0aGlz
Lm9wdGlvbnMuaGVhZGVycztcblx0fSxcblxuXHRvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpe1xu
XHRcdHZhciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT0gNCB8fCAh
dGhpcy5ydW5uaW5nKSByZXR1cm47XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dGhp
cy5zdGF0dXMgPSAwO1xuXHRcdEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHZh
ciBzdGF0dXMgPSB4aHIuc3RhdHVzO1xuXHRcdFx0dGhpcy5zdGF0dXMgPSAoc3RhdHVzID09IDEy
MjMpID8gMjA0IDogc3RhdHVzO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0eGhyLm9ucmVhZHlz
dGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dy
ZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRc
dFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5c
dFx0fVxuXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt0ZXh0OiB0aGlzLnhoci5yZXNwb25zZVRleHQg
fHwgJycsIHhtbDogdGhpcy54aHIucmVzcG9uc2VYTUx9O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMu
aXNTdWNjZXNzLmNhbGwodGhpcywgdGhpcy5zdGF0dXMpKVxuXHRcdFx0dGhpcy5zdWNjZXNzKHRo
aXMucmVzcG9uc2UudGV4dCwgdGhpcy5yZXNwb25zZS54bWwpO1xuXHRcdGVsc2Vcblx0XHRcdHRo
aXMuZmFpbHVyZSgpO1xuXHR9LFxuXG5cdGlzU3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR2YXIg
c3RhdHVzID0gdGhpcy5zdGF0dXM7XG5cdFx0cmV0dXJuIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1
cyA8IDMwMCk7XG5cdH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAh
IXRoaXMucnVubmluZztcblx0fSxcblxuXHRwcm9jZXNzU2NyaXB0czogZnVuY3Rpb24odGV4dCl7
XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ldmFsUmVzcG9uc2UgfHwgKC8oZWNtYXxqYXZhKXNjcmlw
dC8pLnRlc3QodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpKSkgcmV0dXJuIEJyb3dzZXIu
ZXhlYyh0ZXh0KTtcblx0XHRyZXR1cm4gdGV4dC5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2
YWxTY3JpcHRzKTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0LCB4bWwpe1xuXHRc
dHRoaXMub25TdWNjZXNzKHRoaXMucHJvY2Vzc1NjcmlwdHModGV4dCksIHhtbCk7XG5cdFx0dGhp
cy5yZXNvbHZlKHt0ZXh0OiB0ZXh0LCB4bWw6IHhtbH0pO1xuXHR9LFxuXG5cdG9uU3VjY2Vzczog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBhcmd1bWVudHMpLmZp
cmVFdmVudCgnc3VjY2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWluKCk7XG5cdH0sXG5cblx0ZmFp
bHVyZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLm9uRmFpbHVyZSgpO1xuXHRcdHRoaXMucmVqZWN0
KHtyZWFzb246ICdmYWlsdXJlJywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdG9uRmFpbHVy
ZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnKS5maXJlRXZlbnQo
J2ZhaWx1cmUnLCB0aGlzLnhocik7XG5cdH0sXG5cblx0bG9hZHN0YXJ0OiBmdW5jdGlvbihldmVu
dCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2xvYWRzdGFydCcsIFtldmVudCwgdGhpcy54aHJdKTtc
blx0fSxcblxuXHRwcm9ncmVzczogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50
KCdwcm9ncmVzcycsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHR0aW1lb3V0OiBmdW5j
dGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCd0aW1lb3V0JywgdGhpcy54aHIpO1xuXHRcdHRo
aXMucmVqZWN0KHtyZWFzb246ICd0aW1lb3V0JywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5c
dHNldEhlYWRlcjogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHRoaXMuaGVhZGVyc1tuYW1l
XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldEhlYWRlcjogZnVuY3Rp
b24obmFtZSl7XG5cdFx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRc
dHJldHVybiB0aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTtcblx0XHR9LmJpbmQodGhp
cykpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5n
KSByZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNh
c2UgJ2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hh
aW4nOiB0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVy
biBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHNlbmQ6IGZ1bmN0
aW9uKG9wdGlvbnMpe1xuXHRcdGlmICghdGhpcy5jaGVjayhvcHRpb25zKSkgcmV0dXJuIHRoaXM7
XG5cblx0XHR0aGlzLm9wdGlvbnMuaXNTdWNjZXNzID0gdGhpcy5vcHRpb25zLmlzU3VjY2VzcyB8
fCB0aGlzLmlzU3VjY2Vzcztcblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXG5cdFx0dmFyIHR5
cGUgPSB0eXBlT2Yob3B0aW9ucyk7XG5cdFx0aWYgKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9
PSAnZWxlbWVudCcpIG9wdGlvbnMgPSB7ZGF0YTogb3B0aW9uc307XG5cblx0XHR2YXIgb2xkID0g
dGhpcy5vcHRpb25zO1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXBwZW5kKHtkYXRhOiBvbGQuZGF0
YSwgdXJsOiBvbGQudXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBvcHRpb25zKTtcblx0XHR2YXIg
ZGF0YSA9IG9wdGlvbnMuZGF0YSwgdXJsID0gU3RyaW5nKG9wdGlvbnMudXJsKSwgbWV0aG9kID0g
b3B0aW9ucy5tZXRob2QudG9Mb3dlckNhc2UoKTtcblxuXHRcdHN3aXRjaCAodHlwZU9mKGRhdGEp
KXtcblx0XHRcdGNhc2UgJ2VsZW1lbnQnOiBkYXRhID0gZG9jdW1lbnQuaWQoZGF0YSkudG9RdWVy
eVN0cmluZygpOyBicmVhaztcblx0XHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOiBkYXRh
ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcoZGF0YSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0
aW9ucy5mb3JtYXQpe1xuXHRcdFx0dmFyIGZvcm1hdCA9ICdmb3JtYXQ9JyArIHRoaXMub3B0aW9u
cy5mb3JtYXQ7XG5cdFx0XHRkYXRhID0gKGRhdGEpID8gZm9ybWF0ICsgJyYnICsgZGF0YSA6IGZv
cm1hdDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmVtdWxhdGlvbiAmJiAhWydnZXQn
LCAncG9zdCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIF9tZXRob2QgPSAnX21ldGhv
ZD0nICsgbWV0aG9kO1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRh
IDogX21ldGhvZDtcblx0XHRcdG1ldGhvZCA9ICdwb3N0Jztcblx0XHR9XG5cblx0XHRpZiAodGhp
cy5vcHRpb25zLnVybEVuY29kZWQgJiYgWydwb3N0JywgJ3B1dCddLmNvbnRhaW5zKG1ldGhvZCkp
e1xuXHRcdFx0dmFyIGVuY29kaW5nID0gKHRoaXMub3B0aW9ucy5lbmNvZGluZykgPyAnOyBjaGFy
c2V0PScgKyB0aGlzLm9wdGlvbnMuZW5jb2RpbmcgOiAnJztcblx0XHRcdHRoaXMuaGVhZGVyc1sn
Q29udGVudC10eXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyArIGVu
Y29kaW5nO1xuXHRcdH1cblxuXHRcdGlmICghdXJsKSB1cmwgPSBkb2N1bWVudC5sb2NhdGlvbi5w
YXRobmFtZTtcblxuXHRcdHZhciB0cmltUG9zaXRpb24gPSB1cmwubGFzdEluZGV4T2YoJy8nKTtc
blx0XHRpZiAodHJpbVBvc2l0aW9uID4gLTEgJiYgKHRyaW1Qb3NpdGlvbiA9IHVybC5pbmRleE9m
KCcjJykpID4gLTEpIHVybCA9IHVybC5zdWJzdHIoMCwgdHJpbVBvc2l0aW9uKTtcblxuXHRcdGlm
ICh0aGlzLm9wdGlvbnMubm9DYWNoZSlcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+
IC0xID8gJyYnIDogJz8nKSArIFN0cmluZy51bmlxdWVJRCgpO1xuXG5cdFx0aWYgKGRhdGEgJiYg
KG1ldGhvZCA9PSAnZ2V0JyB8fCBtZXRob2QgPT0gJ2RlbGV0ZScpKXtcblx0XHRcdHVybCArPSAo
dXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArIGRhdGE7XG5cdFx0XHRkYXRhID0g
bnVsbDtcblx0XHR9XG5cblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHByb2dyZXNz
U3VwcG9ydCl7XG5cdFx0XHR4aHIub25sb2Fkc3RhcnQgPSB0aGlzLmxvYWRzdGFydC5iaW5kKHRo
aXMpO1xuXHRcdFx0eGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLmJpbmQodGhpcyk7XG5c
dFx0fVxuXG5cdFx0eGhyLm9wZW4obWV0aG9kLnRvVXBwZXJDYXNlKCksIHVybCwgdGhpcy5vcHRp
b25zLmFzeW5jLCB0aGlzLm9wdGlvbnMudXNlciwgdGhpcy5vcHRpb25zLnBhc3N3b3JkKTtcblx0
XHRpZiAoKHRoaXMub3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpICYmICd3aXRoQ3JlZGVudGlhbHMn
IGluIHhocikgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cblx0XHR4aHIub25yZWFkeXN0
YXRlY2hhbmdlID0gdGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7XG5cblx0XHRPYmplY3Qu
ZWFjaCh0aGlzLmhlYWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0dHJ5IHtcblx0
XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGNhdGNoIChl
KXtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbicsIFtrZXksIHZhbHVlXSk7XG5c
dFx0XHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdleGNlcHRpb24nLCB4aHI6IHhociwgZXhjZXB0
aW9uOiBlfSk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcyk7XG5cblx0XHRpZiAodGhpcy5nZXRUaGVu
YWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUoe3Jl
YXNvbjogJ3NlbmQnfSk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0Jyk7XG5c
dFx0eGhyLnNlbmQoZGF0YSk7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuYXN5bmMpIHRoaXMub25T
dGF0ZUNoYW5nZSgpO1xuXHRcdGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aW1lb3V0KSB0aGlzLnRp
bWVyID0gdGhpcy50aW1lb3V0LmRlbGF5KHRoaXMub3B0aW9ucy50aW1lb3V0LCB0aGlzKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0
aGlzLnJ1bm5pbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRc
dHZhciB4aHIgPSB0aGlzLnhocjtcblx0XHR4aHIuYWJvcnQoKTtcblx0XHRpZiAodGhpcy50aW1l
cil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50
aW1lcjtcblx0XHR9XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlm
IChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1w
dHk7XG5cdFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5maXJl
RXZlbnQoJ2NhbmNlbCcpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdjYW5jZWwnLCB4aHI6
IHhocn0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgbWV0aG9kcyA9IHt9
O1xuWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ2hlYWQnLCAnR0VU
JywgJ1BPU1QnLCAnUFVUJywgJ0RFTEVURScsICdQQVRDSCcsICdIRUFEJ10uZWFjaChmdW5jdGlv
bihtZXRob2Qpe1xuXHRtZXRob2RzW21ldGhvZF0gPSBmdW5jdGlvbihkYXRhKXtcblx0XHR2YXIg
b2JqZWN0ID0ge1xuXHRcdFx0bWV0aG9kOiBtZXRob2Rcblx0XHR9O1xuXHRcdGlmIChkYXRhICE9
IG51bGwpIG9iamVjdC5kYXRhID0gZGF0YTtcblx0XHRyZXR1cm4gdGhpcy5zZW5kKG9iamVjdCk7
XG5cdH07XG59KTtcblxuUmVxdWVzdC5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbkVsZW1lbnQuUHJv
cGVydGllcy5zZW5kID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIHNl
bmQgPSB0aGlzLmdldCgnc2VuZCcpLmNhbmNlbCgpO1xuXHRcdHNlbmQuc2V0T3B0aW9ucyhvcHRp
b25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIHNlbmQgPSB0aGlzLnJldHJpZXZlKCdzZW5kJyk7XG5cdFx0aWYgKCFzZW5kKXtcblx0XHRc
dHNlbmQgPSBuZXcgUmVxdWVzdCh7XG5cdFx0XHRcdGRhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwn
LCBtZXRob2Q6IHRoaXMuZ2V0KCdtZXRob2QnKSB8fCAncG9zdCcsIHVybDogdGhpcy5nZXQoJ2Fj
dGlvbicpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3NlbmQnLCBzZW5kKTtcblx0XHR9
XG5cdFx0cmV0dXJuIHNlbmQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dHNlbmQ6IGZ1bmN0aW9uKHVybCl7XG5cdFx0dmFyIHNlbmRlciA9IHRoaXMuZ2V0KCdzZW5kJyk7
XG5cdFx0c2VuZGVyLnNlbmQoe2RhdGE6IHRoaXMsIHVybDogdXJsIHx8IHNlbmRlci5vcHRpb25z
LnVybH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0t
XG5cbm5hbWU6IFJlcXVlc3QuSFRNTFxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMg
UmVxdWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0
aCBIVE1MIHJlc3BvbnNlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBbRWxlbWVudCwgUmVxdWVzdF1cblxucHJvdmlkZXM6IFJlcXVlc3QuSFRNTFxuXG4uLi5c
biovXG5cblJlcXVlc3QuSFRNTCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxc
blxuXHRvcHRpb25zOiB7XG5cdFx0dXBkYXRlOiBmYWxzZSxcblx0XHRhcHBlbmQ6IGZhbHNlLFxu
XHRcdGV2YWxTY3JpcHRzOiB0cnVlLFxuXHRcdGZpbHRlcjogZmFsc2UsXG5cdFx0aGVhZGVyczog
e1xuXHRcdFx0QWNjZXB0OiAndGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAq
LyonXG5cdFx0fVxuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBv
cHRpb25zID0gdGhpcy5vcHRpb25zLCByZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRy
ZXNwb25zZS5odG1sID0gdGV4dC5zdHJpcFNjcmlwdHMoZnVuY3Rpb24oc2NyaXB0KXtcblx0XHRc
dHJlc3BvbnNlLmphdmFzY3JpcHQgPSBzY3JpcHQ7XG5cdFx0fSk7XG5cblx0XHR2YXIgbWF0Y2gg
PSByZXNwb25zZS5odG1sLm1hdGNoKC88Ym9keVtePl0qPihbXFxzXFxTXSo/KTxcXC9ib2R5Pi9p
KTtcblx0XHRpZiAobWF0Y2gpIHJlc3BvbnNlLmh0bWwgPSBtYXRjaFsxXTtcblx0XHR2YXIgdGVt
cCA9IG5ldyBFbGVtZW50KCdkaXYnKS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblxuXHRc
dHJlc3BvbnNlLnRyZWUgPSB0ZW1wLmNoaWxkTm9kZXM7XG5cdFx0cmVzcG9uc2UuZWxlbWVudHMg
PSB0ZW1wLmdldEVsZW1lbnRzKG9wdGlvbnMuZmlsdGVyIHx8ICcqJyk7XG5cblx0XHRpZiAob3B0
aW9ucy5maWx0ZXIpIHJlc3BvbnNlLnRyZWUgPSByZXNwb25zZS5lbGVtZW50cztcblx0XHRpZiAo
b3B0aW9ucy51cGRhdGUpe1xuXHRcdFx0dmFyIHVwZGF0ZSA9IGRvY3VtZW50LmlkKG9wdGlvbnMu
dXBkYXRlKS5lbXB0eSgpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSB1cGRhdGUuYWRvcHQo
cmVzcG9uc2UuZWxlbWVudHMpO1xuXHRcdFx0ZWxzZSB1cGRhdGUuc2V0KCdodG1sJywgcmVzcG9u
c2UuaHRtbCk7XG5cdFx0fSBlbHNlIGlmIChvcHRpb25zLmFwcGVuZCl7XG5cdFx0XHR2YXIgYXBw
ZW5kID0gZG9jdW1lbnQuaWQob3B0aW9ucy5hcHBlbmQpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmls
dGVyKSByZXNwb25zZS5lbGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0KGFwcGVuZCk7XG5cdFx0XHRl
bHNlIGFwcGVuZC5hZG9wdCh0ZW1wLmdldENoaWxkcmVuKCkpO1xuXHRcdH1cblx0XHRpZiAob3B0
aW9ucy5ldmFsU2NyaXB0cykgQnJvd3Nlci5leGVjKHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXG5c
dFx0dGhpcy5vblN1Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9uc2UuZWxlbWVudHMsIHJlc3Bv
bnNlLmh0bWwsIHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dHJlZTog
cmVzcG9uc2UudHJlZSwgZWxlbWVudHM6IHJlc3BvbnNlLmVsZW1lbnRzLCBodG1sOiByZXNwb25z
ZS5odG1sLCBqYXZhc2NyaXB0OiByZXNwb25zZS5qYXZhc2NyaXB0fSk7XG5cdH1cblxufSk7XG5c
bkVsZW1lbnQuUHJvcGVydGllcy5sb2FkID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7
XG5cdFx0dmFyIGxvYWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNlbCgpO1xuXHRcdGxvYWQuc2V0
T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGxvYWQgPSB0aGlzLnJldHJpZXZlKCdsb2FkJyk7XG5cdFx0aWYgKCFs
b2FkKXtcblx0XHRcdGxvYWQgPSBuZXcgUmVxdWVzdC5IVE1MKHtkYXRhOiB0aGlzLCBsaW5rOiAn
Y2FuY2VsJywgdXBkYXRlOiB0aGlzLCBtZXRob2Q6ICdnZXQnfSk7XG5cdFx0XHR0aGlzLnN0b3Jl
KCdsb2FkJywgbG9hZCk7XG5cdFx0fVxuXHRcdHJldHVybiBsb2FkO1xuXHR9XG5cbn07XG5cbkVs
ZW1lbnQuaW1wbGVtZW50KHtcblxuXHRsb2FkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZ2V0KCds
b2FkJykuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6IFR5cGUuaXNPYmplY3QsIHVy
bDogVHlwZS5pc1N0cmluZ30pKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypc
bi0tLVxuXG5uYW1lOiBKU09OXG5cbmRlc2NyaXB0aW9uOiBKU09OIGVuY29kZXIgYW5kIGRlY29k
ZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5TZWVBbHNvOiA8aHR0cDovL3d3
dy5qc29uLm9yZy8+XG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgTnVtYmVyLCBGdW5jdGlv
bl1cblxucHJvdmlkZXM6IEpTT05cblxuLi4uXG4qL1xuXG5pZiAodHlwZW9mIEpTT04gPT0gJ3Vu
ZGVmaW5lZCcpIHRoaXMuSlNPTiA9IHt9O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBzcGVj
aWFsID0geydcXGInOiAnXFxcXGInLCAnXFx0JzogJ1xcXFx0JywgJ1xcbic6ICdcXFxcbicsICdc
XGYnOiAnXFxcXGYnLCAnXFxyJzogJ1xcXFxyJywgJ1wiJyA6ICdcXFxcXCInLCAnXFxcXCc6ICdc
XFxcXFxcXCd9O1xuXG52YXIgZXNjYXBlID0gZnVuY3Rpb24oY2hyKXtcblx0cmV0dXJuIHNwZWNp
YWxbY2hyXSB8fCAnXFxcXHUnICsgKCcwMDAwJyArIGNoci5jaGFyQ29kZUF0KDApLnRvU3RyaW5n
KDE2KSkuc2xpY2UoLTQpO1xufTtcblxuSlNPTi52YWxpZGF0ZSA9IGZ1bmN0aW9uKHN0cmluZyl7
XG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXFxcKD86W1wiXFxcXFxcL2JmbnJ0XXx1WzAt
OWEtZkEtRl17NH0pL2csICdAJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXCJbXlwiXFxcXFxcblxc
cl0qXCJ8dHJ1ZXxmYWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxk
Kyk/L2csICddJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvKD86Xnw6fCwpKD86XFxzKlxcWykrL2cs
ICcnKTtcblxuXHRyZXR1cm4gKC9eW1xcXSw6e31cXHNdKiQvKS50ZXN0KHN0cmluZyk7XG59O1xu
XG5KU09OLmVuY29kZSA9IEpTT04uc3RyaW5naWZ5ID8gZnVuY3Rpb24ob2JqKXtcblx0cmV0dXJu
IEpTT04uc3RyaW5naWZ5KG9iaik7XG59IDogZnVuY3Rpb24ob2JqKXtcblx0aWYgKG9iaiAmJiBv
YmoudG9KU09OKSBvYmogPSBvYmoudG9KU09OKCk7XG5cblx0c3dpdGNoICh0eXBlT2Yob2JqKSl7
XG5cdFx0Y2FzZSAnc3RyaW5nJzpcblx0XHRcdHJldHVybiAnXCInICsgb2JqLnJlcGxhY2UoL1tc
XHgwMC1cXHgxZlxcXFxcIl0vZywgZXNjYXBlKSArICdcIic7XG5cdFx0Y2FzZSAnYXJyYXknOlxu
XHRcdFx0cmV0dXJuICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkgKyAnXSc7XG5c
dFx0Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6XG5cdFx0XHR2YXIgc3RyaW5nID0gW107XG5c
dFx0XHRPYmplY3QuZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0XHR2YXIg
anNvbiA9IEpTT04uZW5jb2RlKHZhbHVlKTtcblx0XHRcdFx0aWYgKGpzb24pIHN0cmluZy5wdXNo
KEpTT04uZW5jb2RlKGtleSkgKyAnOicgKyBqc29uKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJu
ICd7JyArIHN0cmluZyArICd9Jztcblx0XHRjYXNlICdudW1iZXInOiBjYXNlICdib29sZWFuJzog
cmV0dXJuICcnICsgb2JqO1xuXHRcdGNhc2UgJ251bGwnOiByZXR1cm4gJ251bGwnO1xuXHR9XG5c
blx0cmV0dXJuIG51bGw7XG59O1xuXG5KU09OLnNlY3VyZSA9IHRydWU7XG5cblxuSlNPTi5kZWNv
ZGUgPSBmdW5jdGlvbihzdHJpbmcsIHNlY3VyZSl7XG5cdGlmICghc3RyaW5nIHx8IHR5cGVPZihz
dHJpbmcpICE9ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcblxuXHRpZiAoc2VjdXJlID09IG51bGwp
IHNlY3VyZSA9IEpTT04uc2VjdXJlO1xuXHRpZiAoc2VjdXJlKXtcblx0XHRpZiAoSlNPTi5wYXJz
ZSkgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcblx0XHRpZiAoIUpTT04udmFsaWRhdGUoc3Ry
aW5nKSkgdGhyb3cgbmV3IEVycm9yKCdKU09OIGNvdWxkIG5vdCBkZWNvZGUgdGhlIGlucHV0OyBz
ZWN1cml0eSBpcyBlbmFibGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90IHNlY3VyZS4nKTtcblx0fVxu
XG5cdHJldHVybiBldmFsKCcoJyArIHN0cmluZyArICcpJyk7XG59O1xuXG59KSgpO1xuXG4vKlxu
LS0tXG5cbm5hbWU6IFJlcXVlc3QuSlNPTlxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFz
aWMgUmVxdWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3Igc2VuZGluZyBhbmQg
cmVjZWl2aW5nIEpTT04gZGF0YS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBbUmVxdWVzdCwgSlNPTl1cblxucHJvdmlkZXM6IFJlcXVlc3QuSlNPTlxuXG4uLi5c
biovXG5cblJlcXVlc3QuSlNPTiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxc
blxuXHRvcHRpb25zOiB7XG5cdFx0LypvbkVycm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcil7fSwq
L1xuXHRcdHNlY3VyZTogdHJ1ZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlv
bnMpe1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHRcdE9iamVjdC5hcHBlbmQodGhpcy5o
ZWFkZXJzLCB7XG5cdFx0XHQnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0J1gt
UmVxdWVzdCc6ICdKU09OJ1xuXHRcdH0pO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRl
eHQpe1xuXHRcdHZhciBqc29uO1xuXHRcdHRyeSB7XG5cdFx0XHRqc29uID0gdGhpcy5yZXNwb25z
ZS5qc29uID0gSlNPTi5kZWNvZGUodGV4dCwgdGhpcy5vcHRpb25zLnNlY3VyZSk7XG5cdFx0fSBj
YXRjaCAoZXJyb3Ipe1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2Vycm9yJywgW3RleHQsIGVycm9y
XSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChqc29uID09IG51bGwpe1xuXHRcdFx0
dGhpcy5mYWlsdXJlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub25TdWNjZXNzKGpzb24s
IHRleHQpO1xuXHRcdFx0dGhpcy5yZXNvbHZlKHtqc29uOiBqc29uLCB0ZXh0OiB0ZXh0fSk7XG5c
dFx0fVxuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENvb2tpZVxuXG5kZXNjcmlwdGlv
bjogQ2xhc3MgZm9yIGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgZGVsZXRpbmcgYnJvd3NlciBDb29r
aWVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBCYXNl
ZCBvbiB0aGUgZnVuY3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAoaHR0cDovL3F1aXJrc21vZGUu
b3JnKS5cblxucmVxdWlyZXM6IFtPcHRpb25zLCBCcm93c2VyXVxuXG5wcm92aWRlczogQ29va2ll
XG5cbi4uLlxuKi9cblxudmFyIENvb2tpZSA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czog
T3B0aW9ucyxcblxuXHRvcHRpb25zOiB7XG5cdFx0cGF0aDogJy8nLFxuXHRcdGRvbWFpbjogZmFs
c2UsXG5cdFx0ZHVyYXRpb246IGZhbHNlLFxuXHRcdHNlY3VyZTogZmFsc2UsXG5cdFx0ZG9jdW1l
bnQ6IGRvY3VtZW50LFxuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRodHRwT25seTogZmFsc2Vcblx0
fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRcdHRoaXMua2V5
ID0ga2V5O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHR3cml0ZTog
ZnVuY3Rpb24odmFsdWUpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW5jb2RlKSB2YWx1ZSA9IGVu
Y29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kb21haW4pIHZh
bHVlICs9ICc7IGRvbWFpbj0nICsgdGhpcy5vcHRpb25zLmRvbWFpbjtcblx0XHRpZiAodGhpcy5v
cHRpb25zLnBhdGgpIHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMub3B0aW9ucy5wYXRoO1xuXHRc
dGlmICh0aGlzLm9wdGlvbnMuZHVyYXRpb24pe1xuXHRcdFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSgp
O1xuXHRcdFx0ZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgdGhpcy5vcHRpb25zLmR1cmF0
aW9uICogMjQgKiA2MCAqIDYwICogMTAwMCk7XG5cdFx0XHR2YWx1ZSArPSAnOyBleHBpcmVzPScg
KyBkYXRlLnRvR01UU3RyaW5nKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm9wdGlvbnMuc2VjdXJl
KSB2YWx1ZSArPSAnOyBzZWN1cmUnO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaHR0cE9ubHkpIHZh
bHVlICs9ICc7IEh0dHBPbmx5Jztcblx0XHR0aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llID0g
dGhpcy5rZXkgKyAnPScgKyB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWFk
OiBmdW5jdGlvbigpe1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29r
aWUubWF0Y2goJyg/Ol58OylcXFxccyonICsgdGhpcy5rZXkuZXNjYXBlUmVnRXhwKCkgKyAnPShb
XjtdKiknKTtcblx0XHRyZXR1cm4gKHZhbHVlKSA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZVsx
XSkgOiBudWxsO1xuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0bmV3IENvb2tp
ZSh0aGlzLmtleSwgT2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHtkdXJhdGlvbjogLTF9
KSkud3JpdGUoJycpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5Db29raWUud3Jp
dGUgPSBmdW5jdGlvbihrZXksIHZhbHVlLCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUo
a2V5LCBvcHRpb25zKS53cml0ZSh2YWx1ZSk7XG59O1xuXG5Db29raWUucmVhZCA9IGZ1bmN0aW9u
KGtleSl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSkucmVhZCgpO1xufTtcblxuQ29va2llLmRp
c3Bvc2UgPSBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXks
IG9wdGlvbnMpLmRpc3Bvc2UoKTtcbn07XG5cbi8qXG4tLS1cblxubmFtZTogRE9NUmVhZHlcblxu
ZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQgZG9tcmVhZHkuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Jyb3dzZXIsIEVsZW1lbnQsIEVs
ZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRE9NUmVhZHksIERvbVJlYWR5XVxuXG4uLi5cbiov
XG5cbihmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50KXtcblxudmFyIHJlYWR5LFxuXHRsb2FkZWQs
XG5cdGNoZWNrcyA9IFtdLFxuXHRzaG91bGRQb2xsLFxuXHR0aW1lcixcblx0dGVzdEVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxudmFyIGRvbXJlYWR5ID0gZnVuY3Rp
b24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFyZWFkeSl7XG5cdFx0QnJvd3Nl
ci5sb2FkZWQgPSByZWFkeSA9IHRydWU7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlTGlzdGVuZXIoJ0RP
TUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSkucmVtb3ZlTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFu
Z2UnLCBjaGVjayk7XG5cdFx0ZG9jdW1lbnQuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHRcdHdp
bmRvdy5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdH1cblx0Ly8gY2xlYW51cCBzY29wZSB2YXJz
XG5cdGRvY3VtZW50ID0gd2luZG93ID0gdGVzdEVsZW1lbnQgPSBudWxsO1xufTtcblxudmFyIGNo
ZWNrID0gZnVuY3Rpb24oKXtcblx0Zm9yICh2YXIgaSA9IGNoZWNrcy5sZW5ndGg7IGktLTspIGlm
IChjaGVja3NbaV0oKSl7XG5cdFx0ZG9tcmVhZHkoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxu
XHRyZXR1cm4gZmFsc2U7XG59O1xuXG52YXIgcG9sbCA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGlt
ZW91dCh0aW1lcik7XG5cdGlmICghY2hlY2soKSkgdGltZXIgPSBzZXRUaW1lb3V0KHBvbGwsIDEw
KTtcbn07XG5cbmRvY3VtZW50LmFkZExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVh
ZHkpO1xuXG4vKjxsdElFOD4qL1xuLy8gZG9TY3JvbGwgdGVjaG5pcXVlIGJ5IERpZWdvIFBlcmlu
aSBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkL1xuLy8gdGVzdEVs
ZW1lbnQuZG9TY3JvbGwoKSB0aHJvd3Mgd2hlbiB0aGUgRE9NIGlzIG5vdCByZWFkeSwgb25seSBp
biB0aGUgdG9wIHdpbmRvd1xudmFyIGRvU2Nyb2xsV29ya3MgPSBmdW5jdGlvbigpe1xuXHR0cnkg
e1xuXHRcdHRlc3RFbGVtZW50LmRvU2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0
Y2ggKGUpe31cblx0cmV0dXJuIGZhbHNlO1xufTtcbi8vIElmIGRvU2Nyb2xsIHdvcmtzIGFscmVh
ZHksIGl0IGNhbid0IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGRvbXJlYWR5XG4vLyAgIGUuZy4gaW4g
YW4gaWZyYW1lXG5pZiAodGVzdEVsZW1lbnQuZG9TY3JvbGwgJiYgIWRvU2Nyb2xsV29ya3MoKSl7
XG5cdGNoZWNrcy5wdXNoKGRvU2Nyb2xsV29ya3MpO1xuXHRzaG91bGRQb2xsID0gdHJ1ZTtcbn1c
bi8qPC9sdElFOD4qL1xuXG5pZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSkgY2hlY2tzLnB1c2goZnVu
Y3Rpb24oKXtcblx0dmFyIHN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtcblx0cmV0dXJuIChz
dGF0ZSA9PSAnbG9hZGVkJyB8fCBzdGF0ZSA9PSAnY29tcGxldGUnKTtcbn0pO1xuXG5pZiAoJ29u
cmVhZHlzdGF0ZWNoYW5nZScgaW4gZG9jdW1lbnQpIGRvY3VtZW50LmFkZExpc3RlbmVyKCdyZWFk
eXN0YXRlY2hhbmdlJywgY2hlY2spO1xuZWxzZSBzaG91bGRQb2xsID0gdHJ1ZTtcblxuaWYgKHNo
b3VsZFBvbGwpIHBvbGwoKTtcblxuRWxlbWVudC5FdmVudHMuZG9tcmVhZHkgPSB7XG5cdG9uQWRk
OiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKHJlYWR5KSBmbi5jYWxsKHRoaXMpO1xuXHR9XG59O1xu
XG4vLyBNYWtlIHN1cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZvcmUgbG9hZFxuRWxlbWVudC5F
dmVudHMubG9hZCA9IHtcblx0YmFzZTogJ2xvYWQnLFxuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xu
XHRcdGlmIChsb2FkZWQgJiYgdGhpcyA9PSB3aW5kb3cpIGZuLmNhbGwodGhpcyk7XG5cdH0sXG5c
dGNvbmRpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcyA9PSB3aW5kb3cpe1xuXHRcdFx0
ZG9tcmVhZHkoKTtcblx0XHRcdGRlbGV0ZSBFbGVtZW50LkV2ZW50cy5sb2FkO1xuXHRcdH1cblx0
XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxuLy8gVGhpcyBpcyBiYXNlZCBvbiB0aGUgY3VzdG9t
IGxvYWQgZXZlbnRcbndpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGZ1bmN0aW9uKCl7XG5cdGxvYWRl
ZCA9IHRydWU7XG59KTtcblxufSkod2luZG93LCBkb2N1bWVudCk7XG4iCittb2R1bGUuZXhwb3J0
cyA9ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNyBbVmFsZXJp
byBQcm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBcbi8qIVxuV2ViIEJ1aWxkOiBo
dHRwczovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5YWU3MTY3YzU4MDdiMTczZDVk
ZWZmNjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxuZGVzY3JpcHRpb246IFRoZSBo
ZWFydCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNvcHly
aWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8v
Z2l0aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUgTW9vVG9vbHMgcHJvZHVjdGlv
biB0ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMvKVxuXG5pbnNwaXJhdGlvbjpc
biAgLSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFzZS5qc10oaHR0cDovL2Rl
YW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5cmlnaHQgKGMpIDIwMDYg
RGVhbiBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXShodHRwOi8v
b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocClcbiAgLSBTb21lIGZ1bmN0
aW9uYWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDovL3Byb3RvdHlwZWpzLm9y
ZykgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24sIFtNSVQgTGljZW5zZV0o
aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcblxucHJvdmlk
ZXM6IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0YW5jZU9mLCBOYXRpdmVdXG5c
bi4uLlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBb
VmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLykuKi9cbihmdW5j
dGlvbigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9uOiAnMS42LjAnLFxuXHRidWls
ZDogJzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVlOTVlMmInXG59O1xuXG4vLyB0
eXBlT2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMudHlwZU9mID0gZnVuY3Rpb24o
aXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cdGlmIChpdGVtLiRm
YW1pbHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xuXG5cdGlmIChpdGVtLm5vZGVO
YW1lKXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gJ2VsZW1lbnQnO1xuXHRc
dGlmIChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8pLnRlc3QoaXRlbS5ub2RlVmFs
dWUpID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBlbHNlIGlmICh0eXBlb2YgaXRl
bS5sZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVlJyBpbiBpdGVtKSByZXR1cm4g
J2FyZ3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1cm4gJ2NvbGxlY3Rpb24n
O1xuXHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxudmFyIGluc3RhbmNlT2YgPSB0
aGlzLmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qpe1xuXHRpZiAoaXRlbSA9PSBu
dWxsKSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9IGl0ZW0uJGNvbnN0cnVjdG9y
IHx8IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1Y3Rvcil7XG5cdFx0aWYgKGNv
bnN0cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRcdGNvbnN0cnVjdG9yID0gY29u
c3RydWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5cdGlmICghaXRlbS5oYXNPd25Q
cm9wZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9cblx0cmV0dXJuIGl0ZW0gaW5z
dGFuY2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFyIGVudW1lcmFibGVzID0gdHJ1
ZTtcbmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVyYWJsZXMgPSBudWxsO1xuaWYg
KGVudW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJvcGVydHknLCAndmFsdWVPZics
ICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5n
JywgJ3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlvbiBmb3JFYWNoT2JqZWN0RW51
bWJlcmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChlbnVtZXJhYmxlcykgZm9yICh2
YXIgaSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGsgPSBlbnVtZXJhYmxl
c1tpXTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28gb3ZlcmxvYWRTZXR0ZXIg
Y2FuIGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1bmN0aW9uLCB3aXRob3V0IHN3
YXBwaW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGsp
KSBmbi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1cbi8qPC9sdElFOD4qL1xuXG4v
LyBGdW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24gPSB0aGlzLkZ1bmN0aW9uO1xu
XG5GdW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwp
e1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAo
YSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1cmFsIHx8IHR5cGVvZiBhICE9
ICdzdHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2VsZi5jYWxsKHRoaXMsIGssIGFb
a10pO1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtl
eShhLCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHRzZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xu
fTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24odXNlUGx1
cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSl7XG5cdFx0dmFy
IGFyZ3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0cmluZycpIGFyZ3MgPSBhO1xu
XHRcdGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdzID0gYXJndW1lbnRzO1xuXHRc
dGVsc2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRpZiAoYXJncyl7XG5cdFx0XHRy
ZXN1bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykg
cmVzdWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdH0gZWxzZSB7
XG5cdFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5cdFx0fVxuXHRcdHJldHVybiBy
ZXN1bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24o
a2V5LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xu
XG5GdW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5c
dHRoaXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuLy8g
RnJvbVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbkFycmF5LmNvbnZl
cnQgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIFtdO1xuXHRy
ZXR1cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVvZiBpdGVtICE9ICdzdHJpbmcn
KSA/ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDogc2xpY2UuY2FsbChpdGVtKSA6
IFtpdGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0
dXJuICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNvbnZlcnQgPSBmdW5jdGlvbihp
dGVtKXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7XG5cdHJldHVybiBpc0Zpbml0
ZShudW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmluZy5jb252ZXJ0ID0gZnVuY3Rp
b24oaXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5cblxuRnVuY3Rpb24uZnJvbSA9
IEZ1bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJlci5jb252ZXJ0O1xuU3RyaW5n
LmZyb20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJvdGVjdFxuXG5GdW5jdGlvbi5p
bXBsZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kaGlkZGVuID0gdHJ1
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0OiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bi8vIFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlvbihuYW1lLCBvYmplY3Qp
e1xuXHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRc
dHZhciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiAodHlwZU9mKGl0
ZW0pID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMnICsgbmFtZV0gPSB0eXBlQ2hl
Y2s7XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9iamVjdC5wcm90b3R5cGUuJGZh
bWlseSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93ZXI7XG5cdFx0XHR9KS5oaWRl
KCk7XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiBu
dWxsO1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVjdC4kY29uc3RydWN0b3IgPSBU
eXBlO1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG9iamVjdDtcblxuXHRyZXR1
cm4gb2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmlu
ZztcblxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIChpdGVt
ICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYmIHRvU3RyaW5nLmNh
bGwoaXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtcblxudmFyIGhvb2tzID0ge307
XG5cbnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0dmFyIHR5cGUgPSB0eXBlT2Yo
b2JqZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBlXSB8fCAoaG9va3NbdHlwZV0g
PSBbXSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0
aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXG5cdHZhciBob29rcyA9IGhv
b2tzT2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKyl7
XG5cdFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlwZU9mKGhvb2spID09ICd0eXBl
JykgaW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtcblx0XHRlbHNlIGhvb2suY2Fs
bCh0aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHByZXZpb3VzID0gdGhpcy5wcm90
b3R5cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVj
dGVkKSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxuXHRpZiAodGhpc1tuYW1lXSA9
PSBudWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxsKHRoaXMs
IG5hbWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRob2QuYXBwbHkoaXRlbSwgc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52YXIgZXh0ZW5kID0gZnVuY3Rp
b24obmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJu
O1xuXHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8
fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDtcbn07XG5cblR5cGUu
aW1wbGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpLFxu
XG5cdGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5cblx0YWxpYXM6IGZ1bmN0aW9u
KG5hbWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0aGlzLCBuYW1lLCB0aGlzLnBy
b3RvdHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0bWlycm9yOiBm
dW5jdGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2goaG9vayk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywgVHlwZSk7XG5cbi8vIERlZmF1
bHQgVHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0LCBtZXRob2RzKXtc
blx0dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0XHRwcm90b3R5cGUgPSBvYmpl
Y3QucHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9IG5ldyBUeXBlKG5hbWUsIG9i
amVjdCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkr
Kyl7XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRnZW5lcmljID0gb2JqZWN0W2tl
eV0sXG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5cdFx0aWYgKGdlbmVyaWMpIGdl
bmVyaWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJvdG8pIG9iamVjdC5pbXBsZW1l
bnQoa2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYgKGlzVHlwZSl7XG5cdFx0dmFy
IG1ldGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKG1ldGhv
ZHNbMF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVuY3Rpb24oZm4pe1xuXHRcdFx0
aWYgKCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVbbWV0
aG9kc1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIHBy
b3RvdHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXldLCBrZXkpO1xuXHRcdH07
XG5cdH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgnU3RyaW5nJywgU3RyaW5nLCBb
XG5cdCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAnY29udGFpbnMnLCAnaW5kZXhP
ZicsICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdyZXBsYWNlJywgJ3NlYXJjaCcs
XG5cdCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5nJywgJ3RyaW0nLCAndG9M
b3dlckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBBcnJheSwgW1xuXHQncG9wJywg
J3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0Jywg
J2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAn
ZmlsdGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUnLCAncmVkdWNlJywgJ3Jl
ZHVjZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51bWJlciwgW1xuXHQndG9FeHBv
bmVudGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvUHJlY2lzaW9uJ1xuXSko
J0Z1bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2NhbGwnLCAnYmluZCdcbl0pKCdS
ZWdFeHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0pKCdPYmplY3QnLCBPYmplY3Qs
IFtcblx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2tl
eXMnLFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgJ2dl
dE93blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lvbnMnLCAnaXNFeHRlbnNpYmxl
JywgJ3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVuJ1xuXSkoJ0RhdGUnLCBE
YXRlLCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5vdmVybG9hZFNldHRlcigp
O1xuXG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0cmV0dXJuICsobmV3IERhdGUp
O1xufSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7XG5cbi8vIGZpeGVzIE5hTiBy
ZXR1cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUuJGZhbWlseSA9IGZ1bmN0aW9u
KCl7XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXInIDogJ251bGwnO1xufS5oaWRl
KCk7XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVuZCgncmFuZG9tJywgZnVuY3Rp
b24obWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAt
IG1pbiArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBlYWNoLCBrZXlzXG5cbkFycmF5
LmltcGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNoOiBmdW5jdGlvbihmbiwgYmlu
ZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRc
dH1cblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7XG5c
dFx0QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dFx0dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9iamVjdCl7XG5cdFx0XHRpZiAo
aGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2goayk7XG5cdFx0fVxuXHRc
dC8qPGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZnVu
Y3Rpb24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7XG5cdFx0Lyo8L2x0SUU4Piov
XG5cdFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDogZnVuY3Rpb24ob2JqZWN0LCBm
biwgYmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7
XG5cdFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fSk7
XG5cdH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZvckVhY2g7XG5cblxuLy8gQXJy
YXkgJiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFwcGVuZGluZ1xuXG52YXIg
Y2xvbmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5cGVPZihpdGVtKSl7XG5cdFx0
Y2FzZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRcdGNhc2UgJ29iamVjdCc6IHJl
dHVybiBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIGl0ZW07XG5cdH1c
bn07XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigpe1xuXHR2YXIgaSA9IHRo
aXMubGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hpbGUgKGktLSkgY2xvbmVbaV0g
PSBjbG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59KTtcblxudmFyIG1lcmdlT25l
ID0gZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRzd2l0Y2ggKHR5cGVPZihjdXJy
ZW50KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0eXBlT2Yoc291cmNlW2tleV0p
ID09ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1cnJlbnQpO1xuXHRcdFx0
ZWxzZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTtcblx0XHRcdGJyZWFrO1xu
XHRcdGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50LmNsb25lKCk7IGJyZWFrO1xu
XHRcdGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0fVxuXHRyZXR1cm4gc291cmNl
O1xufTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1bmN0aW9uKHNvdXJjZSwgaywg
dil7XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1lcmdlT25lKHNvdXJj
ZSwgaywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwg
bDsgaSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRmb3IgKHZh
ciBrZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwgb2JqZWN0W2tleV0pO1xuXHRc
dH1cblx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihvYmplY3Qp
e1xuXHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIGNsb25l
W2tleV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5c
blx0YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBh
cmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBleHRlbmRlZCA9IGFyZ3Vt
ZW50c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBleHRlbmRlZCkgb3JpZ2luYWxb
a2V5XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbDtcblx0fVxu
XG59KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmplY3QnLCAnV2hpdGVTcGFjZScs
ICdUZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cyddLmVhY2goZnVuY3Rpb24obmFt
ZSl7XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1ZSBJRFxuXG52YXIgVUlEID0g
RGF0ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5jdGlvbigpe1xuXHRy
ZXR1cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1c
blxubmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEFycmF5IFByb3RvdHlwZXMg
bGlrZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczogQXJyYXlcblxuLi4uXG4qL1xu
XG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0ZXZlcnk6IGZ1bmN0aW9uKGZu
LCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwg
bDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2FsbChiaW5kLCB0aGlzW2ld
LCBpLCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxc
blxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdO1xu
XHRcdGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhpc1tpXTtcblx0XHRcdGlmIChm
bi5jYWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcblx0XHR9
XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhPZjogZnVuY3Rpb24oaXRlbSwg
ZnJvbSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwO1xuXHRcdGZvciAodmFy
IGkgPSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsgZnJvbSkgOiBmcm9tIHx8IDA7
IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7
XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKGZuLCBiaW5k
KXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJlc3VsdHMgPSBBcnJheShs
ZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYg
KGkgaW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7
XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKGZu
LCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwg
bDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5jYWxsKGJpbmQsIHRoaXNbaV0s
IGksIHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxu
XHQvKjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmZp
bHRlcihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtICE9IG51bGw7XG5cdFx0fSk7
XG5cdH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXtcblx0XHR2YXIgYXJncyA9
IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9u
KGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBwbHkoaXRlbSwgYXJncyk7
XG5cdFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlvbihrZXlzKXtcblx0XHR2YXIg
b2JqID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBrZXlzLmxlbmd0aCk7XG5c
dFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tleXNbaV1dID0gdGhpc1tp
XTtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5cdFx0XHRcdGlm
IChvYmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzW2ld
O1xuXHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRc
dFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdGNvbnRh
aW5zOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4gdGhpcy5pbmRleE9mKGl0ZW0s
IGZyb20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHRo
aXMucHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
Z2V0TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbdGhp
cy5sZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFuZG9tOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIucmFuZG9tKDAsIHRoaXMubGVu
Z3RoIC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBmdW5jdGlvbihpdGVtKXtcblx0
XHRpZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVtKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0Zm9yICh2YXIg
aSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuaW5jbHVkZShhcnJheVtp
XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKGl0ZW0pe1xu
XHRcdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9
PT0gaXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVuZ3RoID0gMDtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcnJheSA9
IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xu
XHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0XHRpZiAodHlwZSA9PSAnbnVs
bCcpIGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25jYXQoKHR5cGUgPT0gJ2FycmF5
JyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1bWVudHMnIHx8IGluc3Rh
bmNlT2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0aGlzW2ld
KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5cdHBpY2s6IGZ1bmN0aW9uKCl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHRpZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtcblx0XHR9XG5cdFx0cmV0dXJu
IG51bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhp
cy5sZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJnYiA9IHRoaXMubWFwKGZ1bmN0
aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0gMSkgdmFsdWUgKz0gdmFsdWU7
XG5cdFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0XHR9KTtcblx0XHRyZXR1cm4g
KGFycmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0fSxcblxuXHRyZ2JUb0hleDog
ZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsO1xu
XHRcdGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAhYXJyYXkpIHJldHVy
biAndHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsg
aSA8IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0gLSAwKS50b1N0cmluZygxNik7
XG5cdFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyArIGJpdCA6IGJpdCk7XG5c
dFx0fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4LmpvaW4oJycpO1xuXHR9
XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlvblxuXG5kZXNjcmlwdGlvbjog
Q29udGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0ZSwgYmluZCwgcGFzcywgYW5k
IGRlbGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVc
blxucHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVuY3Rpb24uZXh0ZW5kKHtcblxu
XHRhdHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXJndW1l
bnRzW2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xu
XHR9XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9u
KGFyZ3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcHBseShiaW5kLCBB
cnJheS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRyZXR1cm4gbnVs
bDtcblx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDogZnVuY3Rpb24odGhhdCl7XG5c
dFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8g
QXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0XHRGID0gZnVuY3Rpb24oKXt9
O1xuXG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBjb250ZXh0ID0gdGhh
dCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlmICh0aGlzIGluc3RhbmNlb2Yg
Ym91bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJvdG90eXBlO1xuXHRcdFx0XHRj
b250ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gKCFhcmdzICYmICFs
ZW5ndGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5cdFx0XHRcdDogc2VsZi5hcHBs
eShjb250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0KEFycmF5LnNsaWNlKGFyZ3Vt
ZW50cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGNvbnRleHQgPT0gdGhh
dCA/IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gYm91bmQ7XG5cdH0sXG5c
dC8qPC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR2
YXIgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmNvbnZl
cnQoYXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gc2VsZi5hcHBs
eShiaW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fSxcblxuXHRkZWxheTogZnVu
Y3Rpb24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KHRoaXMucGFz
cygoYXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRlbGF5KTtcblx0fSxcblxuXHRw
ZXJpb2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4g
c2V0SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwg
cGVyaW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IE51bWJlclxu
XG5kZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMgbGlrZSBsaW1pdCwgcm91
bmQsIHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4uXG4qL1xuXG5OdW1iZXIuaW1w
bGVtZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgpe1xuXHRcdHJldHVybiBNYXRo
Lm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxuXG5cdHJvdW5kOiBmdW5jdGlv
bihwcmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwg
MCkudG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6IDApO1xuXHRcdHJldHVybiBN
YXRoLnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuXHR9LFxuXG5cdHRpbWVz
OiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzOyBpKysp
IGZuLmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24o
YmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9XG5cbn0p
O1xuXG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxuKGZ1bmN0aW9uKG1hdGgpe1xu
XG52YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdGlmICgh
TnVtYmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gTWF0
aFtuYW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5LmNvbnZlcnQoYXJndW1lbnRz
KSkpO1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbn0pKFsnYWJz
JywgJ2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAnY29zJywgJ2V4cCcs
ICdmbG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywgJ3NxcnQnLCAndGFu
J10pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMg
U3RyaW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUsIHRlc3QsIGFuZCB0
b0ludC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZSwg
QXJyYXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xuXG5TdHJpbmcuaW1wbGVtZW50
KHtcblxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24oc3RyaW5nLCBpbmRleCl7XG5c
dFx0cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShpbmRleCkgOiBTdHJpbmcodGhp
cykpLmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwvIUVTNj5cblxuXHR0ZXN0OiBm
dW5jdGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0eXBlT2YocmVnZXgpID09ICdy
ZWdleHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBwYXJhbXMpKS50ZXN0KHRo
aXMpO1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlz
KS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5cblx0Y2xlYW46IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgp
O1xuXHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRo
aXMpLnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNo
LmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGh5cGhlbmF0ZTog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1tBLVpdL2csIGZ1
bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0Y2guY2hhckF0KDApLnRvTG93
ZXJDYXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxpemU6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16XS9nLCBmdW5jdGlvbihtYXRj
aCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxu
XHRlc2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBs
YWNlKC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9LFxuXG5c
dHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8
fCAxMCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VG
bG9hdCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZh
ciBoZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwyfSkoXFx3ezEsMn0pKFxcd3sx
LDJ9KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSkuaGV4VG9SZ2IoYXJyYXkp
IDogbnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciBy
Z2IgPSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xuXHRcdHJldHVybiAocmdiKSA/
IHJnYi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHN1YnN0aXR1dGU6IGZ1bmN0
aW9uKG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UocmVn
ZXhwIHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rpb24obWF0Y2gsIG5hbWUpe1xu
XHRcdFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJldHVybiBtYXRjaC5zbGljZSgx
KTtcblx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8gb2JqZWN0W25hbWVdIDog
Jyc7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEJyb3dzZXJc
blxuZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFpbnMgQnJvd3NlciBpbml0
aWFsaXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93c2VyIEhhc2guXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBGdW5jdGlv
biwgTnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3NlciwgV2luZG93LCBEb2N1bWVu
dF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1
bWVudDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlzO1xuXG52YXIgcGFyc2Ug
PSBmdW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRvTG93ZXJDYXNlKCk7XG5cdHBs
YXRmb3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNhc2UoKSA6ICcnKTtcblxuXHQv
LyBjaHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5lZWQgdG8gY2hlY2sgZm9y
IGVkZ2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBpdCdzIGNocm9tZS5cblx0dmFy
IFVBID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxkXFwuXSspLyk7XG5cdGlmICgh
VUEpe1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94fGNocm9tZXx0cmlkZW50
fGNyaW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/Lio/KHNhZmFyaXwoPzpydltc
XHNcXC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSspfCQpLykgfHwgW251bGwsICd1
bmtub3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3RyaWRlbnQnKXtcblx0XHRVQVsx
XSA9ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRdO1xuXHR9IGVsc2UgaWYgKFVB
WzFdID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7XG5cdH1cblxuXHRwbGF0Zm9y
bSA9IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6ICh1YS5tYXRjaCgvKD86
d2Vib3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51eC8pIHx8IFsnb3RoZXIn
XSlbMF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZvcm0gPSAnd2luZG93cyc7XG5c
blx0cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQsXG5cdFx0
bmFtZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLFxuXHRcdHZlcnNpb246
IHBhcnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0pID8gVUFbNF0gOiBVQVsyXSks
XG5cdFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52YXIgQnJvd3NlciA9IHRoaXMu
QnJvd3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5hdmlnYXRvci5wbGF0Zm9ybSk7
XG5cbmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUpe1xu
XHRCcm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbkJyb3dzZXIu
ZXh0ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEoZG9jdW1lbnQuZXZhbHVhdGUp
LFxuXHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1ZXJ5OiAhIShkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNPTilcblx0fSxcblx0cGFyc2VV
QTogcGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93c2VyLlJlcXVlc3QgPSAoZnVu
Y3Rpb24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBY
TUxIdHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIgPSBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTtcblx0fTtcblxuXHR2
YXIgTVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTWlj
cm9zb2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5j
dGlvbigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1MSFRUUDtcblx0fSwgZnVuY3Rp
b24oKXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwyO1xuXHR9LCBmdW5jdGlvbigp
e1xuXHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9KTtcblxufSkoKTtcblxuQnJv
d3Nlci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpO1xuXG5cblxuLy8gU3RyaW5n
IHNjcmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7XG5cdGlmICghdGV4dCkg
cmV0dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7XG5cdFx0d2luZG93LmV4ZWNT
Y3JpcHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4
dC9qYXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0O1xuXHRcdGRvY3VtZW50Lmhl
YWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNj
cmlwdCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJpbmcuaW1wbGVtZW50KCdzdHJp
cFNjcmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlwdHMgPSAnJztcblx0dmFyIHRl
eHQgPSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPyk8XFwvc2NyaXB0Pi9n
aSwgZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9IGNvZGUgKyAnXFxuJztcblx0
XHRyZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1ZSkgQnJvd3Nlci5leGVjKHNj
cmlwdHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhlYyhzY3Jp
cHRzLCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8gV2luZG93LCBEb2N1bWVudFxu
XG5Ccm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRvY3VtZW50LFxuXHRXaW5kb3c6
IHRoaXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQsXG5cdEV2ZW50OiB0aGlzLkV2
ZW50XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdX
aW5kb3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0
KCd3aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9k
KXtcblx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRoaXMuRG9jdW1lbnQgPSBkb2N1
bWVudC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigpe30pO1xu
XG5kb2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9jdW1lbnQnKS5oaWRlKCk7
XG5cbkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRkb2N1bWVudFtu
YW1lXSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0gZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5k
KSB0cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dyb3VuZEltYWdlQ2FjaGUnLCBm
YWxzZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5PiovXG5pZiAodGhpcy5hdHRh
Y2hFdmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIHVubG9hZEV2ZW50ID0g
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50
KTtcblx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LndpbmRvdyA9
IG51bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVudCA9IG51bGw7XG5cdH07
XG5cdHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xufVxuXG4vLyBJ
RSBmYWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9ucyAocmVmZXJzIHRvIDxz
ZWxlY3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7XG50cnkge1xuXHRhcnJheUZy
b20oZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2ggKGUpe1xuXHRBcnJheS5jb252
ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnICYm
IFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAhPSAnYXJyYXknKXtcblx0
XHRcdHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkpO1xuXHRcdFx0d2hp
bGUgKGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0dXJuIGFycmF5O1xuXHRcdH1c
blx0XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5cdHZhciBwcm90b3R5cGUgPSBB
cnJheS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUuc2xpY2U7XG5cdFsncG9wJywg
J3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0Jywg
J2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIg
bWV0aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25hbWVdID0gZnVuY3Rpb24oaXRl
bSl7XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNvbnZlcnQoaXRlbSksIHNsaWNl
LmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59XG4vKjwvbHRJRTk+Ki9cblxu
XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3NcblxuZGVzY3JpcHRpb246IENvbnRh
aW5zIHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0aW5nLCBleHRlbmRpbmcsIGFu
ZCBpbXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE51bWJlcl1cblxu
cHJvdmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBDbGFzcyA9
IHRoaXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlvbihwYXJhbXMpe1xuXHRpZiAo
aW5zdGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0ge2luaXRpYWxpemU6IHBhcmFt
c307XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0XHRyZXNldCh0aGlzKTtcblx0
XHRpZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLiRjYWxs
ZXIgPSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5cdFx0dmFyIHZhbHVlID0gKHRo
aXMuaW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6
IHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxsO1xuXHRcdHJldHVy
biB2YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7XG5cblx0bmV3Q2xh
c3MuJGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS4kY29uc3RydWN0
b3IgPSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9IHBhcmVudDtcblxu
XHRyZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9IGZ1bmN0aW9uKCl7XG5cdGlm
ICghdGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCJwYXJlbnRcIiBj
YW5ub3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMuJGNhbGxlci4kbmFtZSxcblx0
XHRwYXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxcblx0XHRwcmV2aW91cyA9IChw
YXJlbnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7XG5cdGlmICghcHJldmlvdXMp
IHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1lICsgJ1wiIGhhcyBubyBwYXJl
bnQuJyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxu
dmFyIHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7
XG5cdFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dpdGNoICh0eXBlT2YodmFsdWUp
KXtcblx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBGID0gZnVuY3Rpb24oKXt9O1xu
XHRcdFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRvYmplY3Rba2V5XSA9IHJlc2V0
KG5ldyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhcnJheSc6IG9iamVjdFtrZXld
ID0gdmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmplY3Q7XG59
O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9kKXtcblx0aWYgKG1ldGhv
ZC4kb3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0dmFyIHdyYXBwZXIgPSBmdW5j
dGlvbigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlzLiRjYWxsZXIgPT0gbnVs
bCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtleSArICdcIiBjYW5ub3QgYmUg
Y2FsbGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxlciwgY3VycmVudCA9IHRoaXMu
JGNhbGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuJGNhbGxlciA9IHdyYXBw
ZXI7XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRc
dHRoaXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0gY2FsbGVyO1xuXHRcdHJldHVy
biByZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRvcmlnaW46IG1ldGhvZCwgJG5h
bWU6IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5j
dGlvbihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3MuTXV0YXRvcnMuaGFzT3duUHJv
cGVydHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9yc1trZXldLmNhbGwodGhpcywg
dmFsdWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0fVxuXG5cdGlm
ICh0eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlmICh2YWx1ZS4kaGlkZGVuKSBy
ZXR1cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0gKHJldGFpbikgPyB2YWx1ZSA6
IHdyYXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0Lm1lcmdlKHRo
aXMucHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxu
dmFyIGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRrbGFzcy4kcHJvdG90eXBpbmcg
PSB0cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRlbGV0ZSBrbGFzcy4kcHJvdG90
eXBpbmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmltcGxlbWVudCgnaW1wbGVtZW50
JywgaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFzcy5NdXRhdG9ycyA9IHtcblxu
XHRFeHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMucGFyZW50ID0gcGFyZW50O1xu
XHRcdHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTtcblx0fSxcblxuXHRJbXBs
ZW1lbnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29udmVydChpdGVtcykuZWFjaChm
dW5jdGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5ldyBpdGVtO1xuXHRcdFx0Zm9y
ICh2YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0aGlzLCBrZXksIGluc3RhbmNl
W2tleV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0t
XG5cbm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgVXRpbGl0eSBD
bGFzc2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBl
YXNlIHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5FeHRy
YXMsIENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnRoaXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjogW10sXG5cblx0Y2hhaW46IGZ1
bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5LmZsYXR0ZW4oYXJndW1lbnRz
KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENoYWluOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMuJGNoYWluLnNoaWZ0KCkuYXBw
bHkodGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5cdGNsZWFyQ2hhaW46IGZ1bmN0
aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxu
XG59KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0cmV0dXJuIHN0cmlu
Zy5yZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmlyc3Qpe1xuXHRcdHJldHVy
biBmaXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRoaXMuRXZlbnRzID0gbmV3IENs
YXNzKHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4s
IGludGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cblx0XHRcblxuXHRcdHRo
aXMuJGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwgW10pLmluY2x1ZGUoZm4p
O1xuXHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciB0
eXBlIGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVs
YXkpe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4k
ZXZlbnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0g
QXJyYXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0
XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4u
YXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR0eXBlID0gcmVtb3Zl
T24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAo
ZXZlbnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5kZXggPSBldmVudHMuaW5kZXhP
Zihmbik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBldmVudHNbaW5kZXhdO1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2
ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3Qn
KXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZl
bnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoZXZlbnRzKSBl
dmVudHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlwZSBpbiB0aGlzLiRldmVudHMp
e1xuXHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkgY29udGludWU7XG5cdFx0XHR2
YXIgZm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IGZucy5sZW5n
dGg7IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQodHlwZSwg
Zm5zW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bnRoaXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0aW9uczogZnVuY3Rpb24oKXtc
blx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVjdC5tZXJnZS5hcHBseShudWxs
LCBbe30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykpO1xuXHRcdGlmICh0aGlzLmFk
ZEV2ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5cdFx0XHRpZiAodHlwZU9mKG9w
dGlvbnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25bQS1aXS8pLnRlc3Qob3B0aW9u
KSkgY29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlvbiwgb3B0aW9uc1tvcHRpb25d
KTtcblx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLlRoZW5hYmxl
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3MgdGhhdCBjYW4gYmUgaW1w
bGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhlbSBcInRoZW5hYmxlXCIu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJv
dmlkZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFy
IFNUQVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQgPSAxLFxuXHRTVEFURV9SRUpF
Q1RFRCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5hYmxlID0gbmV3IENsYXNzKHtc
blxuXHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0JHRoZW5hYmxlUmVzdWx0OiBu
dWxsLFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZh
bHVlKXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFibGVTdGF0ZTogZnVuY3Rpb24o
KXtcblx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xuXHRcdFx0Y2FzZSBTVEFURV9Q
RU5ESU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX0ZV
TEZJTExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xuXG5cdFx0XHRjYXNlIFNUQVRF
X1JFSkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztcblx0XHR9XG5cdH0sXG5cblx0
cmVzZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29u
KTtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0aGVuOiBm
dW5jdGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0aWYgKHR5cGVvZiBvbkZ1bGZp
bGxlZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRpdHknO1xuXHRcdGlmICh0
eXBlb2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWplY3RlZCA9ICdUaHJvd2VyJztc
blxuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXG5cdFx0dGhpcy4kdGhlbmFi
bGVSZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhlbmFibGUsXG5cdFx0XHRmdWxm
aWxsSGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RIYW5kbGVyOiBvblJlamVjdGVk
XG5cdFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElO
Ryl7XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5c
dH0sXG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5cdFx0cmV0dXJuIHRoaXMu
dGhlbihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxuVGhlbmFibGUuZXh0ZW5kKHtc
blx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0aGVuYWJsZTtcblx0XHRpZiAo
dmFsdWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVuYWJsZSA9IHZhbHVlO1xuXHRc
dH0gZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdFx0cmVzb2x2
ZSh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5c
dHJlamVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFi
bGUoKTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoZW5hYmxl
O1xuXHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gcmVzb2x2ZSh0
aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRF
X1BFTkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUpe1xuXHRcdFx0cmVqZWN0KHRo
ZW5hYmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEgdGhlbmFibGUgd2l0aCBp
dHNlbGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29i
amVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7XG5cdFx0XHR2YXIgdGhlbjtc
blx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVuO1xuXHRcdFx0fSBjYXRjaCAo
ZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0
fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKXtcblx0XHRcdFx0dmFyIHJl
c29sdmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dHJ5
IHtcblx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRc
dFx0XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZl
ZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0
XHRyZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRc
dFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVhc29uKXtcblx0XHRcdFx0XHRc
dFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtc
blx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRcdFx0XHRc
dFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRj
aCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0
XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0
aW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBl
bHNlIHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0g
ZWxzZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5c
bmZ1bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVu
YWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1
bHQgPSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX0ZVTEZJTExF
RDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWplY3QodGhl
bmFibGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVf
UEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gcmVhc29uO1xuXHRcdHRo
ZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7XG5cblx0XHRyZWFjdCh0aGVu
YWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFibGUpe1xuXHRpZiAodGhlbmFi
bGUuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVu
YWJsZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9Q
RU5ESU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5hYmxlKXtcblx0dmFyIHN0YXRl
ID0gdGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0ID0gdGhlbmFibGUuJHRoZW5h
YmxlUmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyxc
blx0XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVEKXtcblx0XHR0aGVu
YWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ2Z1bGZpbGxIYW5kbGVy
Jztcblx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7XG5cdFx0dGhlbmFibGUu
JHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdyZWplY3RIYW5kbGVyJztcblx0
fVxuXG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFzcyhbcmVzdWx0LCByZWFjdGlv
bnMsIHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlKHJlc3VsdCwgcmVhY3Rpb25z
LCB0eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlvbnMubGVuZ3RoOyBpIDwgbDsg
KytpKXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sXG5cdFx0XHRoYW5kbGVyID0g
cmVhY3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0gJ0lkZW50aXR5Jyl7XG5cdFx0
XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBpZiAoaGFu
ZGxlciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgcmVz
dWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShyZWFjdGlv
bi50aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7
XG5cdFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1c
blx0XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5k
ZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJyl7XG5cdGRl
ZmVyID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAh
PT0gJ3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0ZTtcbn0gZWxzZSB7XG5cdGRl
ZmVyID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4sIDApO1xuXHR9O1xufVxuXG59
KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNjcmlwdGlvbjogT2JqZWN0IGdl
bmVyaWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6
IFR5cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9u
KCl7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVuY3Rpb24ob2JqZWN0LCBrZXlz
KXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5s
ZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGsg
aW4gb2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVz
dWx0cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZh
ciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRc
dGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0g
a2V5c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0s
IGtleSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0Zmls
dGVyOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xu
XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsg
aSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV0sIHZhbHVlID0g
b2JqZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwga2V5LCBvYmplY3Qp
KSByZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0s
XG5cblx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0g
T2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3Ro
OyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAoIWZuLmNhbGwoYmlu
ZCwgb2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRy
dWU7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFy
IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5
cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChmbi5j
YWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0
dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIg
dmFsdWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNb
aV07XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFs
dWVzO1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHRyZXR1cm4g
T2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0a2V5T2Y6IGZ1bmN0aW9uKG9i
amVjdCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRm
b3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtl
eXNbaV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVlKSByZXR1cm4ga2V5O1xuXHRc
dH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24ob2JqZWN0
LCB2YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmplY3QsIHZhbHVlKSAhPSBudWxs
O1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7XG5cdFx0
dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFjaChvYmplY3QsIGZ1bmN0aW9u
KHZhbHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJhc2UgKyAnWycgKyBrZXkgKyAn
XSc7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtcblx0
XHRcdFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcodmFsdWUs
IGtleSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRcdFx0dmFyIHFzID0g
e307XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRcdFx0
cXNbaV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gT2JqZWN0LnRv
UXVlcnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6
IHJlc3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0XHR9
XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVzaChyZXN1bHQpO1xuXHRc
dH0pO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxu
fSkoKTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNlclxuZGVzY3JpcHRpb246IFN0
YW5kYWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVzOiBTbGljay5QYXJzZXJcbi4u
LlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxuXHRzZXBhcmF0b3JJbmRleCxc
blx0Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2FjaGUgPSB7fSxcblx0cmV2ZXJz
ZUNhY2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xuXG52YXIgcGFyc2UgPSBmdW5j
dGlvbihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4cHJlc3Npb24gPT0gbnVsbCkg
cmV0dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09PSB0cnVlKSByZXR1cm4gZXhw
cmVzc2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJlcGxhY2UoL15cXHMr
fFxccyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7XG5cdHZhciBjdXJyZW50
Q2FjaGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2FjaGU7XG5cdGlmIChjdXJyZW50
Q2FjaGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl07XG5cdHBh
cnNlZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNzaW9uczogW10sXG5cdFx0cmF3
OiBleHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gcGFy
c2UodGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2VwYXJhdG9ySW5kZXggPSAtMTtc
blx0d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2Uo
cmVnZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBwYXJzZWQuZXhwcmVzc2lvbnMu
bGVuZ3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0gKHJldmVyc2VkKSA/
IHJldmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciByZXZlcnNlQ29tYmluYXRvciA9
IGZ1bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRvciA9PT0gJyEnKSByZXR1cm4g
JyAnO1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJldHVybiAnISc7XG5cdGVsc2Ug
aWYgKCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRvci5yZXBsYWNlKC9e
IS8sICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRvcjtcbn07XG5cbnZhciByZXZl
cnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Np
b24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3Ro
OyBpKyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtcblx0XHR2YXIgbGFzdCA9IHtw
YXJ0czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNlQ29tYmluYXRvcihleHBbMF0u
Y29tYmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBleHAubGVuZ3RoOyBqKysp
e1xuXHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAoIWNleHAucmV2ZXJzZUNvbWJp
bmF0b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5cdFx0XHRjZXhwLmNvbWJpbmF0
b3IgPSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVsZXRlIGNleHAucmV2ZXJzZUNv
bWJpbmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5wdXNoKGxhc3QpO1xuXHR9XG5c
dHJldHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0
cmluZyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDggU3RldmVuIExldml0
aGFuIDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAvPiBNSVQgTGljZW5z
ZVxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uXFxcXF4kfCwjXFxzXS9n
LCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyArIG1hdGNoO1xuXHR9KTtcbn07
XG5cbnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vzci9iaW4vZW52IHJ1YnlcbnB1
dHMgXCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94XFwpfFxccysjLiokfFxccyt8
XFxcXCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86XFxcblx0ICBcXFxccyogKCAs
ICkgXFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAgICAgICAgXFxuXFxcblx0fCBc
XFxccyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21iaW5hdG9yICAgICAgICAgXFxu
XFxcblx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAgICMgQ29tYmluYXRvckNoaWxk
cmVuIFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxcKiApICAgICAjIFRhZyAgICAg
ICAgICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBJ
RCAgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8dW5pY29kZT4rICAgICAgICkg
ICAgICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0XFxcXFsgIFxcXG5cdFx0XFxc
XHMqICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxzKiAoWypeJCF+fF0/PSkgICg/
OiAgXFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0KFtcXFwiJ10/KSguKj8pXFxc
XDkgXFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/ICBcXFxccyogIFxcXG5cdFxc
XFxdKD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2RlPisgKSg/OlxcXG5cdFxcXFwo
ICg/OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxcXDEyKXwoKD86XFxcXChbXild
K1xcXFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xcXG5cdClcIlxuKi9cblx0XCJe
KD86XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4rKVxcXFxzKnwoXFxcXHMrKXwo
PHVuaWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxcXC4oPHVuaWNvZGU+Kyl8XFxc
XFtcXFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxdPz0pKD86XFxcXHMqKD86KFtc
XFwiJ10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxcXSl8KDorKSg8dW5pY29kZT4r
KSg/OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxcXDEzKXwoKD86XFxcXChbXild
K1xcXFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNlKC88Y29tYmluYXRvcj4vLCAn
WycgKyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwvJykgKyAnXScpXG5cdC5yZXBs
YWNlKC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxc
XFteXFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29kZTE+L2csICcoPzpbOlxcXFx3
XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcbik7XG5cbmZ1
bmN0aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJhdG9yLFxuXHRjb21iaW5hdG9y
LFxuXHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxcblx0aWQsXG5cdGNsYXNzTmFt
ZSxcblxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRhdHRyaWJ1dGVR
dW90ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFya2VyLFxuXHRwc2V1ZG9DbGFz
cyxcblx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVkVmFsdWUsXG5cdHBzZXVkb0Ns
YXNzVmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09IC0xKXtc
blx0XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRleF0gPSBbXTtcblx0XHRjb21i
aW5hdG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSByZXR1cm4gJyc7XG5cdH1cblxu
XHRpZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4gfHwgY29tYmluYXRvckluZGV4
ID09PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3IgfHwgJyAnO1xuXHRcdHZhciBj
dXJyZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XTtcblx0
XHRpZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdKVxuXHRc
dFx0Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJldmVyc2VDb21iaW5hdG9yID0g
cmV2ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3VycmVudFNlcGFyYXRvclsrK2Nv
bWJpbmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRvciwgdGFnOiAnKid9O1xuXHR9
XG5cblx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5k
ZXhdW2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUpe1xuXHRcdGN1cnJlbnRQYXJz
ZWQudGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYg
KGlkKXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7
XG5cblx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5y
ZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc0xp
c3QpIGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0aWYgKCFjdXJyZW50UGFyc2Vk
LmNsYXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQu
Y2xhc3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzZXMucHVz
aCh7XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVnZXhwOiBuZXcgUmVnRXhwKCco
XnxcXFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAnKFxcXFxzfCQpJylcblx0XHR9
KTtcblxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0g
cHNldWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlO1xuXHRcdHBzZXVkb0Ns
YXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xhc3NWYWx1ZS5yZXBsYWNlKHJl
VW5lc2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQucHNldWRvcykg
Y3VycmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5wc2V1ZG9zLnB1
c2goe1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSxcblx0
XHRcdHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlwZTogcHNldWRvTWFya2VyLmxl
bmd0aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAo
YXR0cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRyaWJ1dGVLZXkucmVwbGFjZShy
ZVVuZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlVmFsdWUgfHwg
JycpLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFyIHRlc3QsIHJlZ2V4cDtcblxu
XHRcdHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0Y2FzZSAnXj0nIDogcmVnZXhw
ID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICAg
ICAgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiByZWdleHAgPSBuZXcgUmVnRXhw
KCAgICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKyckJyAgICAgICApOyBi
cmVhaztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICcoXnxcXFxccykn
KyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxzfCQpJyApOyBicmVhaztcblx0
XHRcdGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVn
RXhwKGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAgJz0n
IDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVl
ID09IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICcqPScgOiB0ZXN0ID0gZnVu
Y3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZihhdHRy
aWJ1dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnIT0nIDogdGVz
dCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlICE9IHZh
bHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAgOiB0ZXN0ID0gZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0
aWYgKGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQvKS50ZXN0KGF0dHJpYnV0ZU9w
ZXJhdG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtc
blxuXHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2
YWx1ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxuXHRcdGlmICghY3VycmVudFBh
cnNlZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBbXTtcblx0XHRjdXJy
ZW50UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6IGF0dHJpYnV0ZUtleSxcblx0
XHRcdG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRcdHZhbHVlOiBhdHRyaWJ1dGVW
YWx1ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9XG5cblx0cmV0dXJuICcnO1xu
fTtcblxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5T
bGljay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRyZXR1cm4gcGFyc2UoZXhwcmVz
c2lvbik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG5cbmlmICgh
dGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4q
Lyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpT
PiovdGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRlclxuZGVzY3JpcHRpb246IFRo
ZSBuZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxucHJvdmlkZXM6IFNsaWNrLkZp
bmRlclxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5c
bnZhciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30sXG5cdHRvU3RyaW5nID0gT2Jq
ZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAvIEJ1ZyBkZXRlY3Rpb25cblxu
bG9jYWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRyZXR1cm4gKC9cXHtcXHMqXFxb
bmF0aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtcbn07XG5cbmxvY2FsLmlzWE1M
ID0gZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9jdW1lbnQueG1sVmVyc2lvbikg
fHwgKCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChkb2N1bWVudCkgPT0gJ1tvYmpl
Y3QgWE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVUeXBlID09IDkgJiYgZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7XG59O1xuXG5sb2NhbC5zZXRE
b2N1bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBjb252ZXJ0IGVsZW1lbnRzIC8g
d2luZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQgY2Fubm90IGJlIGV4dHJh
cG9sYXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBub2RlVHlwZSA9IGRvY3VtZW50
Lm5vZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3VtZW50XG5cdGVsc2UgaWYg
KG5vZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG5vZGVcblx0
ZWxzZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9IGRvY3VtZW50LmRvY3VtZW50
OyAvLyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hlY2sgaWYgaXQncyB0aGUgb2xk
IGRvY3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRvY3VtZW50KSByZXR1cm47XG5c
dHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVjayBpZiB3ZSBoYXZlIGRvbmUg
ZmVhdHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmVcblxuXHR2YXIgcm9vdCA9
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlkID0gdGhpcy5nZXRVSURYTUwo
cm9vdCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdLFxuXHRcdGZlYXR1
cmU7XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xu
XHRcdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHRcdH1cblx0XHRyZXR1
cm47XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0gPSB7fTtcblxu
XHRmZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNYTUxEb2N1bWVudCA9IHRoaXMu
aXNYTUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0YXJHRUJUTlxuXHQ9IGZlYXR1
cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMuaWRHZXRzTmFtZVxuXHQ9IGZl
YXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkdFQkNOXG5cdD0g
ZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmli
dXRlUVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0PSBmZWF0dXJlcy5uYXRpdmVN
YXRjaGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3RhclNlbGVjdHNDbG9zZWQsIHN0
YXJTZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04sIGNhY2hl
ZEdldEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcjtc
blxuXHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlkJztcblx0dmFyIHRlc3ROb2Rl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0dmFyIHRlc3RSb290ID0gZG9j
dW1lbnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdIHx8
IHJvb3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2RlKTtcblxuXHQvLyBvbiBub24t
SFRNTCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5SWQgZG9lc250IHdvcmsg
cHJvcGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgaWQ9XCInK2lk
KydcIj48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9ICEhZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0aWYgKGZlYXR1cmVzLmlzSFRN
TERvY3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0
XHQvLyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcq
JykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29tbWVudHMgPSAodGVzdE5vZGUu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtcblxuXHRcdC8vIElFIHJldHVy
bnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUo
JyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJI
VE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3NlZCA9IChzZWxlY3RlZCAmJiAh
IXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8n
KTtcblx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROID0g
c3RhclNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDtcblxuXHRcdC8vIElFIHJl
dHVybnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9mIGp1c3QgaWQgZm9yIGdldEVs
ZW1lbnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUu
aW5uZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48YiBpZD1cIicrIGlkICsnXCI+
PC9iPic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoaWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRc
dGlmICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtcblxuXHRcdFx0Ly8gU2FmYXJp
IDMuMiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzXG5cdFx0XHR0cnkge1xu
XHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJmXCI+PC9hPjxhIGNsYXNz
PVwiYlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdi
JykubGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxkLmNsYXNzTmFtZSA9ICdiJztc
blx0XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9ICh0ZXN0Tm9kZS5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtc
blxuXHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgZG9lc250IGRldGVj
dHMgdGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxuXHRcdFx0dHJ5IHtcblx0XHRc
dFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwiPjwvYT48YSBjbGFzcz1cImYg
YiBhXCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOID0gKHRlc3RO
b2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNh
dGNoIChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNOID0gY2FjaGVkR2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTjtcblx0XHR9XG5cblx0
XHRpZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0XHQvLyBJRSA4IHJldHVybnMg
Y2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlTZWxlY3RvckFsbCgnKicpIGZv
ciBzb21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1M
ID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUucXVlcnlTZWxlY3Rv
ckFsbCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSA9IChzZWxl
Y3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQo
MCkgPT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBx
dWVyeVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNlIG9uIHF1aXJrc21vZGVc
blx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIk1p
WFwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0EgPSAhdGVzdE5v
ZGUucXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0XHRcdH0gY2F0Y2ggKGUpe31c
blxuXHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBzZWxlY3RlZCBvcHRpb25z
IG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPmE8L29wdGlvbj48
L3NlbGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBID0gKHRlc3ROb2Rl
LnF1ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09IDApO1xuXHRcdFx0fSBjYXRj
aCAoZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgYXR0
clsqXiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5c
dFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIlwiPjwvYT4nO1xuXHRcdFx0
XHRmZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVj
dG9yQWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7
fVxuXG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBoYXMgYW4gaW5wdXQgb2YgaWQg
eCwgZm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW5wdXRc
blx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxmb3JtIGFjdGlvbj1cInNc
Ij48aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0XHRicm9rZW5Gb3JtQXR0cmli
dXRlR2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSAh
PSAncycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5hdGl2ZSBtYXRjaGVzU2VsZWN0
b3IgZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IHJvb3Qu
bWF0Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwqLyByb290Lm1vek1hdGNoZXNT
ZWxlY3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtcblx0XHRpZiAoZmVhdHVyZXMu
bmF0aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8gaWYgbWF0Y2hlc1NlbGVjdG9y
IHRyb3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVzZSBpdFxuXHRcdFx0
ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpzbGljaycpO1xuXHRc
dFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDtcblx0XHR9IGNhdGNoIChl
KXt9XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19leHBhbmRvID0gMTtcblx0XHRk
ZWxldGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0
VUlESFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRV
SURYTUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7XG5cdHRlc3RO
b2RlID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0Ly8gZ2V0QXR0cmlidXRlXG5c
blx0ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ICYmIGJy
b2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFy
IG1ldGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRpZiAobWV0aG9kKSBy
ZXR1cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSBub2RlLmdl
dEF0dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlKSA/IGF0dHJp
YnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xu
XHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0cmV0dXJu
IChtZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtc
blx0fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5oYXNBdHRyaWJ1dGUgPSAo
cm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJpYnV0ZSkpID8gZnVuY3Rpb24o
bm9kZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRl
KTtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0bm9kZSA9IG5vZGUuZ2V0
QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAhIShub2RlICYmIChub2RlLnNw
ZWNpZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5cdC8vIGNvbnRhaW5zXG5cdC8v
IEZJWE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9y
IHhtbCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVSb290Q29udGFpbnMgPSByb290
ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxuXHRcdG5hdGl2ZURvY3VtZW50
Q29udGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29kZShkb2N1bWVudC5jb250YWlu
cyk7XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENvbnRhaW5zICYmIG5hdGl2
ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJu
IGNvbnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZlUm9vdENvbnRhaW5zICYmICFu
YXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdC8v
IElFOCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVudC5cblx0XHRyZXR1cm4gY29u
dGV4dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50KSA/IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKHJvb3QgJiYgcm9v
dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0
XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0LmNvbXBhcmVEb2N1bWVudFBv
c2l0aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0
aWYgKG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250ZXh0KSByZXR1cm4gdHJ1ZTtc
blx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpO1xuXHRcdHJldHVybiBmYWxz
ZTtcblx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdC8vIGNyZWRpdHMgdG8g
U2l6emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0dXJlcy5kb2N1bWVudFNvcnRl
ciA9IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRc
dGlmICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikg
JiA0ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3NvdXJjZUluZGV4JyBpbiByb290
KSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJbmRleCB8fCAhYi5zb3VyY2VJ
bmRleCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4
O1xuXHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlm
ICghYS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVybiAwO1xuXHRcdHZh
ciBhUmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0gYi5vd25l
ckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNldFN0YXJ0KGEsIDApO1xuXHRc
dGFSYW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0YXJ0KGIsIDApO1xuXHRcdGJS
YW5nZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5jb21wYXJlQm91bmRhcnlQb2lu
dHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDogbnVsbDtcblxuXHRyb290ID0g
bnVsbDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdHRoaXNbZmVhdHVyZV0g
PSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFpbiBNZXRob2RcblxudmFyIHJl
U2ltcGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xcXCopKSQvLFxuXHRyZUVtcHR5
QXR0cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxdLyxcblx0cXNhRmFpbEV4cENh
Y2hlID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24s
IGFwcGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMuZm91bmQgPSAoZmlyc3QpID8g
bnVsbCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4dCkgcmV0dXJuIGZvdW5kO1xu
XHRlbHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9IGNvbnRleHQuZG9jdW1lbnQ7
IC8vIENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBhIGRvY3VtZW50XG5cdGVsc2Ug
aWYgKCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5cblx0Ly8gc2V0dXBcblxuXHR2
YXIgcGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVzID0gdGhpcy51bmlxdWVzID0g
e30sXG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5ndGgpLFxuXHRcdGNv
bnRleHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0gOSk7XG5cblx0aWYgKHRoaXMu
ZG9jdW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBjb250ZXh0Lm93bmVy
RG9jdW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xuXG5cdC8vIGF2b2lkIGR1cGxp
Y2F0aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJheVxuXHRpZiAoaGFzT3RoZXJz
KSBmb3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNbdGhpcy5nZXRVSUQoZm91bmRb
aV0pXSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3NcblxuXHRpZiAodHlwZW9mIGV4
cHJlc3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlzIGEgc3RyaW5nXG5cblx0XHQv
KjxzaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFyIHNpbXBsZVNlbGVjdG9yID0g
ZXhwcmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0XHRzaW1wbGVTZWxlY3RvcnM6
IGlmIChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1ib2wgPSBzaW1wbGVTZWxlY3Rv
clsxXSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJdO1xuXG5cdFx0XHRpZiAoIXN5
bWJvbCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRoaXMuYnJva2VuU3RhckdFQlRO
KSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVt
ZW50c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0g
fHwgbnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRc
dFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3Vu
ZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcj
Jyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICFjb250ZXh0SXNEb2N1
bWVudCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlID0gY29udGV4dC5nZXRF
bGVtZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSByZXR1cm4gZm91bmQ7XG5cdFx0
XHRcdGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5v
ZGVWYWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChmaXJz
dCkgcmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1
ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblxuXHRcdFx0fSBlbHNl
IGlmIChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQg
fHwgKCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRoaXMuYnJva2VuR0VCQ04p
ICYmIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0
XHRcdFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5H
RUJDTil7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUo
bmFtZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0
XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0aWYg
KCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChu
b2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNo
Q2xhc3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5lc2NhcGVSZWdFeHAobmFtZSkg
KycoXFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xu
XHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7XG5cdFx0XHRcdFx0XHRpZiAo
IShjbGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkpKSBjb250aW51ZTtcblx0
XHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNP
dGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xu
XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMp
IHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0KSA/IG51bGwgOiBmb3VuZDtc
blxuXHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXG5cdFx0Lyo8
cXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNlbGVjdG9yOiBpZiAoY29udGV4
dC5xdWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50XG5c
dFx0XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxuXHRcdFx0XHQvL1RPRE86IG9u
bHkgc2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4ZWQgY2FzZVxuXHRcdFx0XHR8
fCB0aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5DaGVja2Vk
UVNBICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0xKVxuXHRcdFx0XHR8fCAo
dGhpcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5QXR0cmlidXRlLnRlc3QoZXhw
cmVzc2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1lbnQgLy9BYm9ydCB3aGVuICFj
b250ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAgdGhlcmUgYXJlIG11bHRpcGxl
IGV4cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRcdC8vICBzaW5jZSB3ZSBjdXJy
ZW50bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9yIHNpbmdsZSBleHByZXNz
aW9uIHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24uaW5kZXhPZignLCcpID4gLTFc
blx0XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNBXG5cdFx0XHQpIGJyZWFrIHF1
ZXJ5U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24sIF9jb250
ZXh0ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7
XG5cdFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5cdFx0XHRcdC8vIGNyZWRpdHMg
dG8gQW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBfY29udGV4dC5nZXRBdHRyaWJ1
dGUoJ2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRcdFx0X2NvbnRleHQuc2V0QXR0
cmlidXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVzc2lvbiA9ICcjJyArIHNsaWNr
aWQgKyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0LnBhcmVu
dE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJu
IGNvbnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVsbDtcblx0XHRcdFx0ZWxz
ZSBub2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVzc2lvbik7XG5cdFx0XHR9
IGNhdGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dID0gMTtcblx0
XHRcdFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlm
ICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChjdXJyZW50SWQpIF9jb250ZXh0
LnNldEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0XHRcdGVsc2UgX2NvbnRleHQu
cmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRleHQgPSBfY29udGV4dDtcblx0
XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSkg
Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKG5vZGUubm9kZU5h
bWUgPiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBm
b3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tp
KytdOyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5v
ZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMp
IHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8
L3F1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJzZWQgPSB0aGlzLlNsaWNrLnBh
cnNlKGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZvdW5kO1xu
XHR9IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJlIGlzIG5vIGV4cHJlc3Np
b25cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5TbGljayl7IC8v
IGV4cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5cdFx0cGFyc2VkID0gZXhwcmVz
c2lvbjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQuZG9jdW1lbnRFbGVtZW50
IHx8IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBpcyBhIG5vZGVcblx0XHQo
Zm91bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0gZXhwcmVzc2lvbjtcblx0
XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1bmtcblx0XHRyZXR1cm4gZm91
bmQ7XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3Rv
cnM+Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50aCBzZWxlY3RvcnNcblxuXHR0
aGlzLnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7fTtcblx0dGhpcy5wb3NOVEhU
eXBlID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtcblxuXHQvKjwvbnRoLXBzZXVk
by1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGlmIGFwcGVuZCBp
cyBudWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGV4cHJl
c3Npb24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxuXHR0aGlzLnB1c2ggPSAoIWhh
c090aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAmJiBwYXJzZWQuZXhwcmVz
c2lvbnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6IHRoaXMucHVzaFVJRDtc
blxuXHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxuXHQvLyBkZWZhdWx0IGVuZ2lu
ZVxuXG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwgdGFnLCBpZCwgY2xhc3NMaXN0
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIgY3VycmVudEl0ZW1zLCBjdXJy
ZW50RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhwcmVzc2lvbnMgPSBwYXJzZWQu
ZXhwcmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24g
PSBleHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJlbnRCaXQgPSBjdXJyZW50
RXhwcmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9yID0gJ2NvbWJpbmF0b3I6JyAr
IGN1cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNbY29tYmluYXRvcl0pIGNvbnRp
bnVlIHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/IGN1
cnJlbnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2UoKTtcblx0XHRpZCAgICAg
ICAgID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0gY3VycmVudEJpdC5jbGFzc0xp
c3Q7XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nlcztcblx0XHRhdHRyaWJ1dGVz
ID0gY3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3MgICAgPSBjdXJyZW50Qml0LnBz
ZXVkb3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3Ro
IC0gMSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5cblx0XHRpZiAobGFzdEJpdCl7
XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0dGhpcy5mb3VuZCA9IGZvdW5k
O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7fTtcblx0XHRcdHRoaXMuZm91
bmQgPSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5cdFx0XHR0aGlzW2NvbWJpbmF0
b3JdKGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNz
TGlzdCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3VuZC5sZW5ndGgpIGJyZWFr
IHNlYXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQpIGZvciAo
bSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKXtcblx0XHRcdFx0dGhp
c1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChmb3VuZC5sZW5ndGgpIGJyZWFr
IHNlYXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0
aDsgbSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0fVxuXG5cdFx0
Y3VycmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8vIHNob3VsZCBzb3J0IGlmIHRo
ZXJlIGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNzIG11bHRpcGxlIGV4cHJlc3Np
b25zLlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoID4gMSkp
IHRoaXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkgPyAoZm91bmRbMF0gfHwgbnVs
bCkgOiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVpZHggPSAxO1xubG9jYWwudWlk
ayA9ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhNTCA9IGZ1bmN0aW9uKG5vZGUp
e1xuXHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51aWRrKTtcblx0aWYgKCF1aWQp
e1xuXHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKHRoaXMudWlk
aywgdWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9jYWwuZ2V0VUlESFRNTCA9IGZ1
bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIgfHwgKG5vZGUudW5pcXVl
TnVtYmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBiYXNlZCBvbiB0aGUgc2V0RG9j
dW1lbnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5zb3J0ID0gZnVuY3Rpb24ocmVz
dWx0cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0dXJuIHJlc3VsdHM7XG5cdHJl
c3VsdHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xu
XG4vKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9j
YWwuY2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAvXihbKy1dP1xcZCopPyhbYS16
XSspPyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJndW1lbnQgPSBmdW5jdGlvbihh
cmd1bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0aGlzLm1hdGNoTlRIKTtc
blx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNwZWNpYWwgPSBwYXJzZWRbMl0g
fHwgZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5cdGlmIChhID09ICctJykgYSA9
IC0xO1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFyc2VkID1cblx0XHQoc3BlY2lh
bCA9PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNpYWwgPT0gJ29kZCcpXHQ/IHth
OiAyLCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0PyB7YTogMiwgYjogMH0gOiB7
YTogMCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSA9IHBhcnNl
ZCk7XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5jdGlvbihjaGlsZCwgc2libGlu
ZywgcG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQp
e1xuXHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRpZiAoIXRoaXNbcG9zaXRp
b25zXVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRp
ZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVsID0gcGFyZW50W2NoaWxkXSwg
Y291bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRcdHZhciBub2RlTmFtZSA9IG5v
ZGUubm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZU5hbWUgIT0g
bm9kZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdldFVJ
RChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10pKTtc
blx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZVR5cGUg
IT0gMSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVs
KV0gPSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRc
dFx0fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICduJztcblx0XHR2YXIgcGFy
c2VkID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5wYXJzZU5USEFyZ3VtZW50KGFy
Z3VtZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBhID0gcGFy
c2VkLmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNdW3VpZF07XG5cdFx0aWYg
KGEgPT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4gMCl7XG5cdFx0XHRpZiAocG9z
IDwgYikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYiA8IHBvcykgcmV0
dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBiKSAlIGEpID09IDA7XG5cdH07
XG59O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4q
L1xuXG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5mb3VuZC5wdXNoKG5vZGUp
O1xufTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5c
dGlmICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0XHR0aGlzLnVuaXF1ZXNbdWlk
XSA9IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xuXHR9XG59O1xuXG5sb2NhbC5t
YXRjaE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICh0aGlzLmlzSFRNTERv
Y3VtZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtcblx0XHR0cnkge1xuXHRcdFx0
cmV0dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSwgc2VsZWN0b3IucmVw
bGFjZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypcXF0vZywgJ1skMT1cIiQyXCJd
JykpO1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxuXG5cdHZhciBwYXJzZWQgPSB0
aGlzLlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiB0cnVlO1xu
XG5cdC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFyIGV4cHJlc3Npb25zID0gcGFy
c2VkLmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwgY3VycmVudEV4cHJlc3Np
b247XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsg
aSsrKXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09IDEpe1xuXHRcdFx0dmFy
IGV4cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rv
cihub2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBleHAudGFnLnRvVXBwZXJD
YXNlKCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVzLCBleHAucHNldWRvcykp
IHJldHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisrO1xuXHRcdH1cblx0fVxuXG5c
dGlmIChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxu
XHR2YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBwYXJzZWQpLCBpdGVtO1xu
XHRmb3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRcdGlmIChpdGVtID09PSBub2Rl
KSByZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5sb2NhbC5tYXRjaFBz
ZXVkbyA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtcblx0dmFyIHBzZXVkb05hbWUg
PSAncHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9OYW1lXSkgcmV0dXJuIHRoaXNb
cHNldWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0cmlidXRlID0gdGhpcy5nZXRB
dHRyaWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1lbnQpID8gYXJndW1lbnQgPT0g
YXR0cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5tYXRjaFNlbGVjdG9yID0gZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlm
ICh0YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gbm9kZS5u
b2RlTmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRpZiAodGFnID09ICcq
Jyl7XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxzZTsgLy8gRml4IGZvciBj
b21tZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG5v
ZGVOYW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpZCAmJiBu
b2RlLmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBpLCBw
YXJ0LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2VzLmxlbmd0aDsgaS0tOyl7
XG5cdFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG5cdFx0aWYgKCEo
Y2xzICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVybiBmYWxzZTtcblx0fVxu
XHRpZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5ndGg7IGktLTspe1xuXHRc
dHBhcnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9wZXJhdG9yID8gIXBhcnQudGVz
dCh0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRoaXMuaGFzQXR0cmlidXRl
KG5vZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChwc2V1ZG9zKSBmb3Ig
KGkgPSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IHBzZXVkb3NbaV07XG5cdFx0
aWYgKCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0LnZhbHVlKSkgcmV0dXJu
IGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIGNvbWJpbmF0b3JzID0ge1xu
XG5cdCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkgbGV2ZWxcblxuXHRcdHZh
ciBpLCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlzSFRNTERvY3VtZW50KXtcblx0
XHRcdGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBub2RlLmFsbCkgfHwgKHRoaXMu
aWRHZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFs
dWUgIT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVybnMgYWxsIHRoZSBlbGVtZW50
cyB3aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRcdFx0XHRcdC8vIGlmIHRoZXJl
cyBqdXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwgZWxzZSBpdCB3aWxsIGJlIGEg
Y29sbGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5hbGxbaWRdO1xuXHRcdFx0XHRc
dGlmICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuWzBdKSBjaGls
ZHJlbiA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVu
W2krK107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVtLmdldEF0dHJpYnV0ZU5vZGUo
J2lkJyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9kZS5ub2RlVmFsdWUgPT0gaWQp
e1xuXHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5c
dFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWl0
ZW0pe1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGluIHRoZSBkb20gd2UgcmV0dXJu
LCBlbHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUgZ2V0QnlJZCBsYWJlbFxuXHRc
dFx0XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkpIHJldHVybjtcblx0XHRc
dFx0XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5kb2N1bWVu
dCAhPT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkgcmV0dXJuO1xuXHRcdFx0
XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0QnlDbGFzczogaWYgKGNsYXNz
ZXMgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtc
blx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NMaXN0
LmpvaW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkp
IGJyZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltp
KytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdldEJ5VGFnOiB7XG5cdFx0
XHRjaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcblx0XHRcdGlmICgh
KGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5VGFnO1xuXHRcdFx0aWYg
KCF0aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0XHRcdGZvciAoaSA9IDA7IGl0
ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnPic6IGZ1bmN0aW9uKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgY2hpbGRy
ZW5cblx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBkbyB7XG5cdFx0XHRpZiAobm9k
ZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSk7
XG5cdH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5u
ZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7
XG5cdFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUuZmly
c3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0
aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5c
dFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnfic6IGZ1bmN0aW9uKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdz
XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUu
bm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9k
ZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5i
aXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnKysnOiBmdW5j
dGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4
dCBzaWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhpc1snY29tYmluYXRvcjorJ10o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1sn
Y29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpO1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFuZCBwcmV2aW91cyBzaWJsaW5n
c1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6IX4nXShub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISc6IGZ1bmN0aW9u
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBhbGwgcGFy
ZW50IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnRO
b2RlKSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnIT4nOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0
IHBhcmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0aWYg
KG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsnOiBmdW5jdGlvbihub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGlu
Z1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9k
ZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0JyFeJzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IGxhc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xu
XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9y
OiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
fVxuXHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9
IG5vZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBj
b250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0
aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9
IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAodmFyIGMgaW4gY29tYmluYXRv
cnMpIGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3JzW2NdO1xuXG52YXIgcHNl
dWRvcyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2VtcHR5JzogZnVuY3Rp
b24obm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdHJldHVybiAh
KGNoaWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5pbm5lclRleHQgfHwgbm9k
ZS50ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5cdCdub3QnOiBmdW5jdGlvbihu
b2RlLCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0Y2hOb2RlKG5vZGUsIGV4cHJl
c3Npb24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9uKG5vZGUsIHRleHQpe1xuXHRc
dHJldHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykuaW5kZXhP
Zih0ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5
cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0
LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2li
bGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBw
cmV2ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlm
IChwcmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7
XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVUeXBl
ID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjxudGgt
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1
ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyksXG5cblx0J250aC1sYXN0
LWNoaWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJs
aW5nJywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQ
c2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIVHlwZScsIHRydWUpLFxu
XG5cdCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQn
LCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1ZSksXG5cblx0J2luZGV4
JzogZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNo
aWxkJ10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5cblx0J2V2ZW4nOiBmdW5jdGlv
bihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybicp
O1xuXHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNl
dWRvOm50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5cblx0Lyo8L250aC1wc2V1ZG8t
c2VsZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2Zp
cnN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5v
ZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5v
ZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtc
blx0fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVO
YW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5n
KSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0
dmFyIHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChw
cmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlTmFtZSA9PSBub2RlTmFt
ZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQg
PSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVy
biBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjwvb2YtdHlwZS1wc2V1ZG8t
c2VsZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3NcblxuXHQnZW5hYmxlZCc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQnZGlzYWJs
ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5kaXNhYmxlZDtcblx0fSxcblxu
XHQnY2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmNoZWNrZWQgfHwg
bm9kZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5jdGlvbihub2RlKXtcblx0XHRy
ZXR1cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQg
PT09IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhpcy5oYXNBdHRyaWJ1dGUo
bm9kZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290JzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxuXG5cdCdzZWxlY3RlZCc6IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVkO1xuXHR9XG5cblx0Lyo8L3Bz
ZXVkby1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4gcHNldWRvcykgbG9jYWxbJ3Bz
ZXVkbzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1dGVzIG1ldGhvZHNcblxudmFy
IGF0dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0ge1xuXG5cdCdmb3In
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGluIHRoaXMpID8gdGhpcy5odG1s
Rm9yIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxuXG5cdCdocmVmJzogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRoaXMuZ2V0QXR0cmlidXRlKCdo
cmVmJywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXHR9LFxuXG5cdCdzdHlsZSc6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/IHRoaXMuc3R5bGUuY3NzVGV4
dCA6IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxuXG5cdCd0YWJpbmRleCc6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUo
J3RhYmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUu
c3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSxcblxuXHQn
dHlwZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJyk7
XG5cdH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5v
ZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcpO1xuXHRcdHJldHVybiAoYXR0
cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5v
ZGVWYWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRlR2V0dGVycy5NQVhMRU5HVEgg
PSBhdHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4bGVuZ3Ro
O1xuXG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGljayA9ICh0aGlzLlNsaWNrIHx8
IHt9KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8vIFNsaWNrIGZpbmRlclxuXG5T
bGljay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpe1xuXHRy
ZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCk7XG59O1xuXG5T
bGljay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbil7XG5cdHJldHVybiBsb2Nh
bC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7XG59O1xuXG4vLyBTbGlj
ayBjb250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5zID0gZnVuY3Rpb24oY29udGFp
bmVyLCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFpbmVyKTtcblx0cmV0dXJuIGxv
Y2FsLmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUg
Z2V0dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRs
b2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmdldEF0dHJpYnV0ZShub2Rl
LCBuYW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUp
e1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmhhc0F0dHJpYnV0
ZShub2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJcblxuU2xpY2subWF0Y2ggPSBm
dW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUgJiYgc2VsZWN0b3IpKSByZXR1
cm4gZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IG5vZGUpIHJldHVybiB0
cnVlO1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLm1hdGNoTm9k
ZShub2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgYWNjZXNzb3Jcblxu
U2xpY2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2Nh
bC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xp
Y2subG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7XG5cdHJldHVybiBsb2Nh
bC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xpY2sgcHNldWRvIGFjY2Vzc29y
XG5cblNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWxbJ3Bz
ZXVkbzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0cmV0dXJuIGZu
LmNhbGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNr
Lmxvb2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIgcHNldWRvID0gbG9jYWxbJ3Bz
ZXVkbzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBmdW5jdGlvbihhcmd1bWVudCl7
XG5cdFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJu
IG51bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3JcblxuU2xpY2sub3ZlcnJp
ZGUgPSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3ZlcnJpZGUocmVnZXhwLCBmbik7
XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBsb2NhbC5pc1hNTDtcblxuU2xp
Y2sudWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxvY2FsLmdldFVJREhUTUwobm9k
ZSk7XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBw
bHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0
cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnRcblxu
ZGVzY3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRlbXMgaW4gTW9vVG9vbHMu
IENvbnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJzIGZ1bmN0aW9uLCBhbmQg
YW4gaGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1ldGhvZHMgdG8gbGV0IHlv
dSBlYXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBTdHJpbmcsIEZ1
bmN0aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGljay5GaW5kZXJdXG5cbnBy
b3ZpZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUsIFNlbGVjdG9yc11cblxu
Li4uXG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgcHJv
cHMpe1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0cnVjdG9yc1t0YWddO1xuXHRp
ZiAoa29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7XG5cdGlmICh0eXBlb2Yg
dGFnICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5zZXQocHJvcHMpO1xuXG5c
dGlmICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15bXFx3LV0rJC8pLnRlc3QodGFn
KSl7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhwcmVzc2lvbnNbMF1bMF07
XG5cdFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYnIDogcGFyc2VkLnRhZztcblx0
XHRpZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3BzLmlkID0gcGFyc2VkLmlk
O1xuXG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRlcztcblx0XHRpZiAoYXR0
cmlidXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8
IGw7IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtcblx0XHRcdGlmIChwcm9wc1th
dHRyLmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlmIChhdHRyLnZhbHVlICE9IG51
bGwgJiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIua2V5XSA9IGF0dHIudmFsdWU7
XG5cdFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5vcGVyYXRvcikgcHJvcHNbYXR0
ci5rZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2VkLmNsYXNzTGlzdCAmJiBwcm9w
c1snY2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBhcnNlZC5jbGFzc0xpc3Quam9p
bignICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1lbnQodGFnLCBwcm9wcyk7
XG59O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50LnByb3RvdHlwZSA9IEJy
b3dzZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQgSUU5IHJlcXVpcmUgdGhlIHdy
YXBwaW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50ID0gKGZ1bmN0aW9uKGZpcmVF
dmVudCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdHJldHVybiBm
aXJlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0fTtcblx0fSkoRWxlbWVudC5w
cm90b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVtZW50KS5t
aXJyb3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90b3R5cGVbbmFtZV0pIHJldHVy
bjtcblxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IHJlc3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVudHMgPSB0cnVlO1xuXHRcdGZv
ciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGVs
ZW1lbnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0gZWxlbWVudFtuYW1lXS5hcHBs
eShlbGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVsZW1lbnRzICYmIHR5cGVPZihy
ZXN1bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVybiAoZWxlbWVudHMpID8gbmV3
IEVsZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxuXHRFbGVtZW50cy5pbXBsZW1l
bnQob2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucGFyZW50
ID0gT2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xuXHRcdCckY29uc3RydWN0b3In
OiBFbGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29udmVydCgnZWxlbWVudCcpLmhp
ZGUoKVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5c
dFx0RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cdH0pO1xufVxuXG5FbGVtZW50
LkNvbnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9IG5ldyBUeXBlKCdJRnJhbWUn
LCBmdW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHtcblx0
XHRwcm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFtZTogZnVuY3Rpb24ob2JqKXtc
blx0XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIHByb3Bz
ID0gcGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0aWYgKHBhcmFtcy5pZnJhbWUp
IGlmcmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xuXHR2YXIgb25sb2FkID0gcHJv
cHMub25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHByb3BzLm9ubG9hZDtcblx0cHJv
cHMuaWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5uYW1lLCBpZnJhbWUgPyAoaWZy
YW1lLmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0cmluZy51bmlxdWVJRCgpXS5w
aWNrKCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAnaWZyYW1lJywgcHJvcHMp
O1xuXG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9ubG9hZC5jYWxsKGlmcmFtZS5j
b250ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZyYW1lc1twcm9wcy5pZF0pIG9u
TG9hZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG5cdHJl
dHVybiBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhpcy5FbGVtZW50cyA9IGZ1bmN0
aW9uKG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCl7XG5cdFx0dmFyIHVuaXF1
ZXMgPSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtc
blx0XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0XHRcdGlmICghdW5pcXVlc1t1
aWRdKXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5wdXNoKG5v
ZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVudHMucHJvdG90eXBlID0ge2xl
bmd0aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxubmV3IFR5cGUoJ0VsZW1lbnRz
JywgRWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIsIGJp
bmQpe1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0XHRyZXR1cm4gbmV3IEVsZW1l
bnRzKEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0gJ3N0cmluZycpID8gZnVu
Y3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChmaWx0ZXIpO1xuXHRcdH0gOiBm
aWx0ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVzaDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1
bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQo
YXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xlbmd0aCsrXSA9IGl0ZW07XG5c
dFx0fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpO1xuXHR9LnByb3RlY3QoKSxc
blxuXHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVtcyA9IFtdO1xuXHRcdGZvciAo
dmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIg
aXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgaXRlbXMu
cHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFw
cGx5KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0Y29uY2F0OiBmdW5jdGlvbigp
e1xuXHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlzKTtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0
ZW0gPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkpIG5l
d0VsZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3RWxlbWVudHMucHVzaChpdGVt
KTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRh
cHBlbmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY29s
bGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xsZWN0aW9uW2ldKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5c
dFx0d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMubGVuZ3RoXTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxuXG4oZnVuY3Rpb24oKXtcblxu
Ly8gRkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZSwgb2JqZWN0ID0g
eycwJzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2UuY2FsbChvYmplY3QsIDEsIDEp
O1xuaWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3NwbGljZScsIGZ1bmN0
aW9uKCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0dmFyIHJlc3VsdCA9IHNwbGlj
ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVuZ3RoID49IHRoaXMubGVuZ3Ro
KSBkZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1bHQ7XG59LnByb3RlY3QoKSk7
XG5cbkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9kLCBuYW1lKXtcblx0RWxlbWVu
dHMuaW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJyYXkubWlycm9yKEVsZW1lbnRz
KTtcblxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUw7XG50cnkge1xu
XHRjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGlu
cHV0IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChlKXt9XG5cbnZhciBlc2NhcGVR
dW90ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyArIGh0bWwpLnJlcGxhY2UoLyYv
ZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufTtcbi8qPC9sdElFOD4qL1xu
XG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVs
ZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0
cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5c
dFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxh
Zztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdF
bGVtZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAocHJvcHMpe1xuXHRcdFx0aWYg
KHByb3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBwcm9wcy5jaGVj
a2VkO1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9
PSAncmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52YWx1ZSA9ICdvbic7XG5c
dFx0XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBiZSBzZXQgYmVmb3JlIGNo
YW5naW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0aWYgKCFjYW5DaGFuZ2VTdHls
ZUhUTUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIgc3R5bGVFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0c3R5bGVFbGVtZW50LnNldEF0
dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkgZGVs
ZXRlIHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkKHN0eWxlRWxlbWVudCkuc2V0
KHByb3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0Lyo8bHRJRTg+Ki8v
LyBGaXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVydGllcyBpbiBJRSA8IDhcblx0
XHRcdGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRcdFx0XHR0YWcgPSAnPCcgKyB0
YWc7XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1lPVwiJyArIGVzY2FwZVF1
b3Rlcyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSB0YWcgKz0g
JyB0eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICdcIic7XG5cdFx0XHRcdHRh
ZyArPSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xuXHRcdFx0XHRkZWxldGUgcHJv
cHMudHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH1cblx0XHRyZXR1cm4g
dGhpcy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTtcblx0fVxuXG59KTtc
blxufSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9mKHdpbmRvdyk7XG5TbGljay51
aWRPZihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5cblx0bmV3VGV4dE5vZGU6
IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRleHROb2RlKHRleHQpO1xu
XHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy53aW5kb3c7XG5c
dH0sXG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5cGVzID0ge1xuXG5cdFx0XHRz
dHJpbmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlkID0gU2xpY2suZmlu
ZChkb2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSk7XG5cdFx0XHRcdHJl
dHVybiAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51bGw7XG5cdFx0XHR9LFxu
XG5cdFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtcblx0XHRcdFx0U2xpY2sudWlk
T2YoZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZhbWlseSAmJiAhKC9eKD86b2Jq
ZWN0fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0XHRcdFx0dmFyIGZpcmVFdmVu
dCA9IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGluZyBuZWVkZWQgaW4gSUU3LCBv
ciBlbHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9IGZ1bmN0aW9uKHR5cGUsIGV2
ZW50KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlwZSwgZXZlbnQpO1xuXHRcdFx0
XHRcdH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Qcm90b3R5cGUpO1xu
XHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0sXG5cblx0XHRcdG9iamVjdDog
ZnVuY3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlmIChvYmoudG9FbGVtZW50KSBy
ZXR1cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2FzaCk7XG5cdFx0XHRc
dHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHR5cGVzLnRleHRub2RlID0g
dHlwZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVzLmRvY3VtZW50ID0gZnVuY3Rp
b24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZ1bmN0
aW9uKGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYgZWwuJGZhbWlseSAmJiBlbC51
bmlxdWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKGVsKTtcblx0
XHRcdHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwgZG9jIHx8
IGRvY3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5cbn0pO1xuXG5pZiAod2luZG93
LiQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7XG5cdHJl
dHVybiBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQpO1xufSk7XG5cbldpbmRvdy5p
bXBsZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LmRvY3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVu
dCcsIHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJu
IFNsaWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMpO1xuXHR9LFxuXG5c
dGdldEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5p
ZChTbGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxuXG59KTtcblxudmFyIGNvbnRh
aW5zID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0cmV0dXJuIFNsaWNrLmNvbnRh
aW5zKHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1lbnQuY29udGFpbnMpIERvY3Vt
ZW50LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpLmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7XG5cblxuXG4vLyB0cmVl
IHdhbGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlvbihleHByZXNzaW9uLCBj
b21iaW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29tYmluYXRvcjtcblxuXHRl
eHByZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4cHJlc3Npb24pKTtcblxuXHR2
YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0g
ZXhwcmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Npb25zW2ldWzBdLmNvbWJpbmF0
b3IgPSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxuT2JqZWN0LmZv
ckVhY2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3VzOiAnIX4nLFxuXHRnZXRQYXJl
bnQ6ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBs
ZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRF
bGVtZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtc
bn0pO1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6ICd+Jyxcblx0Z2V0QWxsUHJl
dmlvdXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRnZXRDaGlsZHJlbjogJz4nLFxu
XHRnZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVs
ZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJu
IHRoaXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9y
KSk7XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRGaXJzdDogZnVu
Y3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0
aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpWzBdKTtcblx0fSxcblxuXHRn
ZXRMYXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xp
Y2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSkuZ2V0TGFz
dCgpKTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMu
b3duZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxcblxuXHRnZXRFbGVtZW50QnlJ
ZDogZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMs
ICcjJyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpKTtcblx0fSxcblxu
XHRtYXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICFleHByZXNzaW9uIHx8
IFNsaWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5cbn0pO1xuXG5cblxuaWYgKHdp
bmRvdy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcsIGZ1bmN0aW9uKHNlbGVjdG9y
KXtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0aWYgKHR5cGVvZiBzZWxlY3Rv
ciA9PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBzZWxlY3Rv
ciwgbmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlzRW51bWVyYWJsZShzZWxlY3Rv
cikpIHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9XG5cdHJldHVybiBuZXcgRWxl
bWVudHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNcblxudmFyIGluc2VydGVycyA9
IHtcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJl
bnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJl
Zm9yZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oY29udGV4
dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRp
ZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQubmV4dFNpYmxp
bmcpO1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0
ZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxuXHR0b3A6IGZ1bmN0aW9uKGNv
bnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1l
bnQuZmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJzLmluc2lkZSA9IGluc2VydGVy
cy5ib3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFByb3BlcnR5XG5cbnZhciBwcm9w
ZXJ0eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307XG5cbi8vIHByb3BlcnRpZXNc
blxudmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2goW1xuXHQndHlwZScsICd2YWx1
ZScsICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFj
aW5nJywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93U3BhbicsICd0YWJJbmRleCcs
ICd1c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHByb3BlcnRpZXNbcHJvcGVydHku
dG9Mb3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9wZXJ0aWVzLmh0bWwgPSAnaW5u
ZXJIVE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KS50ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAndGV4dENvbnRlbnQnO1xuXG5P
YmplY3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFsLCBrZXkpe1xuXHRwcm9wZXJ0
eVNldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW3JlYWxdID0g
dmFsdWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSl7XG5c
dFx0cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8bHRJRTk+Ki9cbnByb3BlcnR5
U2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCB2YWx1
ZSl7XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSBub2RlLnNldCgnaHRtbCcs
IHZhbHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9IHZhbHVlO1xuXHR9O1xu
fSkocHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdldHRlcnMudGV4dCA9IChmdW5j
dGlvbihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2Rl
LmdldCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRNTCA6IGdldHRlcihub2RlKTtc
blx0fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9sdElFOT4qL1xuXG4vLyBCb29s
ZWFuc1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcsICdk
ZWNsYXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNhYmxlZCcsICdyZWFkT25seScs
ICdtdWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5cdCdkZWZlcicsICdkZWZhdWx0
Q2hlY2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0b3BsYXknLFxuXHQnbG9vcCdc
bl07XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFjaChib29scywgZnVuY3Rpb24o
Ym9vbCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2UoKTtcblx0Ym9vbGVhbnNbbG93
ZXJdID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUsIHZh
bHVlKXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJz
W2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhIW5vZGVbYm9vbF07XG5cdH07
XG59KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBwZW5kKHByb3BlcnR5U2V0dGVy
cywge1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2NsYXNzTmFt
ZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8fCAnJykgOiBub2RlLnNldEF0
dHJpYnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zvcic6IGZ1bmN0aW9uKG5vZGUs
IHZhbHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9kZS5odG1sRm9yID0gdmFsdWUg
OiBub2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1
bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkgPyBub2RlLnN0eWxlLmNzc1Rl
eHQgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZhbHVlKTtcblx0fSxcblxu
XHQndmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZS52YWx1ZSA9ICh2YWx1
ZSAhPSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5cbnByb3BlcnR5R2V0dGVyc1sn
Y2xhc3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdjbGFzc05hbWUnIGluIG5vZGUp
ID8gbm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xu
fTtcblxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1
dHRvbicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0aHJvd3NcbnRyeSB7IGVs
LnR5cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVsLnR5cGUgIT0gJ2J1dHRvbicp
IHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRub2RlLnNl
dEF0dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51bGw7XG4vKiA8L3dlYmtpdD4g
Ki9cblxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQg
SFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9u
KCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZs
YWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21h
cmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUp
e31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbnZhciBpbnB1dCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxlSW5wdXRWYWx1ZSwgaHRtbDVJ
bnB1dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9ICd0JztcbmlucHV0LnR5cGUg
PSAnc3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlICE9ICd0Jztcblxu
Ly8gIzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50XCIgd2hlbiB0cnlpbmcgdG8g
dXNlIGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52YWx1ZSA9ICcnO1xuXHRpbnB1
dC50eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQgPSBpbnB1dC50eXBlID09ICdl
bWFpbCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtcblxuaWYgKHZvbGF0aWxlSW5w
dXRWYWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVu
Y3Rpb24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZhbHVlID0gbm9kZS52YWx1ZTtc
blx0XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBjYXRj
aCAoZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0eSwgc2V0UHJvcGVydHkgKi9c
blxuLyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmlidXRlID0gKGZ1bmN0aW9uKGRp
dil7XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0dXJuIChkaXYuZ2V0QXR0cmli
dXRlKCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlvbih0ZXN0KXtcblx0dGVzdC5p
bm5lckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3VsZF9maXhcIiB2YWx1ZT1cInRo
ZSB1bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVzdC5jbG9uZU5vZGUodHJ1ZSku
Zmlyc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSkoZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhhc0NsYXNzTGlzdCA9ICEhZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXG52YXIgY2xhc3NlcyA9IGZ1
bmN0aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0gKGNsYXNzTmFtZSB8fCAnJyku
Y2xlYW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJldHVybiBjbGFzc05hbWVzLmZp
bHRlcihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFzc05hbWUgIT09ICcnICYmICF1
bmlxdWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFtZV0gPSBjbGFzc05hbWU7
XG5cdH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRo
aXMuY2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1vdmVGcm9tQ2xhc3NMaXN0ID0g
ZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbn07XG5cbkVs
ZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSwgdmFsdWUp
e1xuXHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtc
blx0XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2YWx1ZSk7XG5cdFx0fSBlbHNl
IHtcblx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRyaWJ1dGVBbGxvd0xpc3Q7XG5c
dFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZUFsbG93TGlzdCA9IHRoaXMu
cmV0cmlldmUoJyRhdHRyaWJ1dGVBbGxvd0xpc3QnLCB7fSk7XG5cdFx0XHQvKiA8L2x0SUU5PiAq
L1xuXG5cdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmli
dXRlKG5hbWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRlc0dl
dEF0dHJpYnV0ZSkgZGVsZXRlIGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXTtcblx0XHRcdFx0Lyog
PC9sdElFOT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKG5h
bWUsICcnICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xs
dXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlQWxsb3dMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRc
dFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7XG5cdFx0Zm9yICh2YXIg
YXR0cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHkoYXR0cmlidXRlLCBhdHRy
aWJ1dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFByb3Bl
cnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJvcGVydHlHZXR0ZXJzW25h
bWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJuIGdldHRlcih0aGlzKTtc
blx0XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKXtcblx0XHRc
dHZhciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBhdHRyaWJ1dGVBbGxvd0xp
c3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywge30pO1xuXHRcdFx0aWYg
KCFhdHRyKSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFuZG8gJiYgIWF0dHJpYnV0
ZUFsbG93TGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRoaXMub3V0ZXJIVE1MO1xu
XHRcdFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQgZmluZCBtZW50aW9uIG9m
IGF0dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIoMCwgb3V0ZXIuc2VhcmNo
KC9cXC8/WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5hbWUpIDwgMCkgcmV0dXJu
IG51bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHR9
XG5cdFx0fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3VsdCA9IFNsaWNrLmdldEF0
dHJpYnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQgJiYgIVNsaWNrLmhhc0F0
dHJpYnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9LFxuXG5cdGdldFByb3Bl
cnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3VtZW50
cyk7XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHksIHRoaXMpLmFzc29jaWF0
ZShhcmdzKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0
cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0sXG5cblx0cmVtb3ZlUHJv
cGVydGllczogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3VtZW50cywgdGhpcy5yZW1v
dmVQcm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0OiBmdW5j
dGlvbihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVz
W3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8gcHJvcGVydHkuc2V0LmNh
bGwodGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG5cdH0ub3Zl
cmxvYWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0
eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4gKHByb3BlcnR5ICYmIHBy
b3BlcnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0aGlzLmdldFByb3BlcnR5
KHByb3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKHByb3Ap
e1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJv
cGVydHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2UuYXBwbHkodGhpcykgOiB0
aGlzLnJlbW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhh
c0NsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiB0
aGlzLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NO
YW1lKXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSkuY29udGFpbnMoY2xhc3NO
YW1lKTtcblx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NO
YW1lKXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRUb0NsYXNzTGlzdCwgdGhp
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHRo
aXMuY2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0aGlzLmNsYXNzTmFtZSku
am9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBoYXND
bGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5m
b3JFYWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1lcyA9IGNsYXNzZXModGhp
cy5jbGFzc05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGNsYXNzTmFtZXMu
ZXJhc2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5qb2lu
KCcgJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9u
KGNsYXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxsKSBmb3JjZSA9ICF0aGlz
Lmhhc0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkgPyB0aGlzLmFkZENsYXNz
KGNsYXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRv
cHQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZyYWdtZW50LCBlbGVtZW50
cyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xu
XHRcdGlmIChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
e1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50c1tpXSwgdHJ1ZSk7XG5c
dFx0XHRpZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHRcdH1cblxu
XHRcdGlmIChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVyZSl7XG5c
dFx0cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3VGV4dE5vZGUodGV4dCks
IHdoZXJlKTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2Vy
dGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUpLCB0aGlzKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5c
dFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1
ZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2VzOiBmdW5jdGlvbihlbCl7
XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwucGFyZW50Tm9kZS5yZXBs
YWNlQ2hpbGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBzOiBm
dW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRc
dHJldHVybiB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7XG5cdH0sXG5cblx0Z2V0
U2VsZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZEluZGV4OyAvLyBTYWZhcmkg
My4yLjFcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZlcnQodGhpcy5vcHRpb25z
KS5maWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQ7
XG5cdFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IHF1ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygnaW5wdXQsIHNlbGVjdCwg
dGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0eXBlID0gZWwudHlwZTtc
blx0XHRcdGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBlID09ICdzdWJtaXQnIHx8
IHR5cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBlID09ICdpbWFnZScpIHJl
dHVybjtcblxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykgPT0gJ3NlbGVjdCcpID8g
ZWwuZ2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRcdFx0Ly8gSUVcblx0XHRc
dFx0cmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xuXHRcdFx0fSkgOiAoKHR5
cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFlbC5jaGVja2VkKSA/IG51
bGwgOiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZlcnQodmFsdWUpLmVhY2go
ZnVuY3Rpb24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5lZCcpIHF1
ZXJ5U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUpICsgJz0nICsgZW5jb2Rl
VVJJQ29tcG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHF1ZXJ5
U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBlbmRIVE1MXG5cbnZhciBh
cHBlbmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2luJyxcblx0YWZ0ZXI6ICdh
ZnRlckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDogJ2FmdGVyQmVnaW4nLFxu
XHRpbnNpZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCgnYXBwZW5kSFRN
TCcsICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KSkgPyBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0QWRqYWNlbnRIVE1MKGFw
cGVuZEluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xuXHRyZXR1cm4gdGhpcztc
bn0gOiBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rp
dicsIHtodG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNoaWxkTm9kZXMsXG5cdFx0
ZnJhZ21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFnbWVudCkgcmV0dXJuIHRo
aXM7XG5cdGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFnbWVudCA9IGRvY3VtZW50
LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxk
cmVuLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChjaGls
ZHJlbltpXSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShm
cmFnbWVudCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZhciBjb2xsZWN0ZWQgPSB7
fSwgc3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlkKXtcblx0cmV0dXJuIChz
dG9yYWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xuXG52YXIgY2xlYW4gPSBm
dW5jdGlvbihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVtYmVyO1xuXHRpZiAoaXRl
bS5yZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlmIChpdGVtLmNsZWFyQXR0
cmlidXRlcykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVpZCAhPSBudWxsKXtcblx0
XHRkZWxldGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbdWlkXTtcblx0fVxu
XHRyZXR1cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5wdXQ6ICdjaGVja2VkJywg
b3B0aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5cbkVsZW1lbnQuaW1wbGVt
ZW50KHtcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBjaGlsZHJlbiA9IGNsZWFu
KHRoaXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJyYXkuZWFjaChjaGlsZHJl
biwgY2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0XHRyZXR1cm4gbnVsbDtc
blx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5jb252ZXJ0KHRoaXMuY2hp
bGROb2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnBhcmVudE5vZGUpID8g
dGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztcblx0fSxcblxuXHRjbG9u
ZTogZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVudHMgPSBjb250ZW50cyAh
PT0gZmFsc2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoY29udGVudHMpLCBjZSA9
IFtjbG9uZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRlbnRzKXtcblx0XHRcdGNl
LmFwcGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtc
blx0XHRcdHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
JyonKSkpO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHR2
YXIgbm9kZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRpZiAoIWtlZXBpZCkgbm9k
ZS5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKG5v
ZGUuY2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0
XHRcdFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0XHRcdG5vZGUucmVtb3Zl
QXR0cmlidXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5vZGUub3B0aW9ucyl7XG5c
dFx0XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1lbnQub3B0aW9ucztcblx0
XHRcdFx0XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tqXS5zZWxlY3RlZCA9IGVv
W2pdLnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0
XHRcdHZhciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTtc
blx0XHRcdGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJvcF0gPSBlbGVtZW50W3By
b3BdO1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhhc0Nsb25lQnVnKXtcblx0
XHRcdHZhciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKSwgdG8gPSB0
aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRcdGZvciAoaSA9IGNvLmxl
bmd0aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJIVE1MO1xuXHRcdH1cblx0
XHQvKjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xvbmUpO1xuXHR9XG5cbn0p
O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5c
blx0YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAod2luZG93LmF0dGFj
aEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0XHRjb2xsZWN0ZWRbU2xp
Y2sudWlkT2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnRMaXN0
ZW5lcikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5c
dFx0ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRp
ZiAodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlw
ZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0YWNoRXZlbnQoJ29uJyAr
IHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXRyaWV2ZTogZnVuY3Rp
b24ocHJvcGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRo
aXMpKSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChkZmx0ICE9IG51bGwgJiYg
cHJvcCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0O1xuXHRcdHJldHVy
biBwcm9wICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRzdG9yZTogZnVuY3Rpb24o
cHJvcGVydHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlz
KSk7XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHR2YXIgc3RvcmFnZSA9
IGdldChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbcHJvcGVydHldO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4qL1xuaWYgKHdpbmRvdy5h
dHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgZ2MgPSBmdW5j
dGlvbigpe1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4pO1xuXHRcdGlmICh3aW5k
b3cuQ29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0d2luZG93LnJlbW92ZUxp
c3RlbmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2Fk
JywgZ2MpO1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVydGllcyA9IHt9O1xuXG5c
blxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDogZnVuY3Rpb24oc3R5bGUp
e1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9LFxuXG5cdGVyYXNlOiBm
dW5jdGlvbigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xuXHR9XG5cbn07XG5cbkVs
ZW1lbnQuUHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3Bl
cnRpZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xuXHRcdGlmIChodG1sID09
IG51bGwpIGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRtbCkgPT0gJ2FycmF5Jykg
aHRtbCA9IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmICh0aGlzLnN0
eWxlU2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHlsZVNoZWV0LmNzc1RleHQg
PSBodG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHR9
LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRtbCcsICcnKTtcblx0fVxu
XG59O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwgc3VwcG9ydHNUYWJsZUlu
bmVySFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVlO1xuXG4vKjxsdElFOT4q
L1xuLy8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJhcnRsZXR0LmNvbS9pbm5l
cnNoaXYvXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgZnJh
Z21lbnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1cHBvcnRzSFRNTDVFbGVt
ZW50cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAoIXN1cHBvcnRzSFRNTDVF
bGVtZW50cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMg
ZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBt
YXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8n
LnNwbGl0KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpLCBsID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdtZW50LmNyZWF0ZUVsZW1l
bnQodGFnc1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5z
dXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHR2
YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuXHR0YWJsZS5pbm5l
ckhUTUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRydWU7XG59KTtcblxuLyo8
bHRGRjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksIGh0bWwgPSAn
PHRkPjwvdGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0c1RSSW5uZXJIVE1MID0g
KHRyLmlubmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9sdEZGND4qL1xuXG5pZiAo
IXN1cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5lckhUTUwgfHwgIXN1cHBv
cnRzSFRNTDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0ID0gKGZ1
bmN0aW9uKHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xuXHRcdFx0dGFibGU6IFsx
LCAnPHRhYmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBbMSwgJzxzZWxlY3Q+Jywg
Jzwvc2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9k
eT48L3RhYmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+
PC90Ym9keT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0aW9ucy50aGVhZCA9IHRy
YW5zbGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxuXHRcdHJldHVybiBmdW5j
dGlvbihodG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlmICh0aGlzLnN0eWxlU2hl
ZXQpIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8qPC9sdElFOT4qL1xuXHRc
dFx0dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTtcblx0XHRcdGlmICgh
d3JhcCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAsICcnLCAnJ107XG5cdFx0
XHRpZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblxuXHRcdFx0dmFyIGxl
dmVsID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCB0
YXJnZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdt
ZW50LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5pbm5lckhUTUwgPSBbd3Jh
cFsxXSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xuXHRcdFx0d2hpbGUgKGxl
dmVsLS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0dGhpcy5lbXB0eSgpLmFk
b3B0KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRz
KSBmcmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIgPSBudWxsO1xu
XHRcdH07XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0KTtcbn1cbi8qPC9JRT4q
L1xuXG4vKjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
Zm9ybScpO1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbj5zPC9vcHRpb24+
PC9zZWxlY3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFsdWUgIT0gJ3MnKSBFbGVt
ZW50LlByb3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
dmFyIHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9ICdzZWxlY3QnKSByZXR1
cm4gdGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0dmFyIG9wdGlvbnMgPSB0
aGlzLmdldEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5c
dFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBv
cHRpb24gPSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5v
ZGUoJ3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIgJiYgYXR0ci5zcGVjaWZp
ZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHRcdFx0aWYgKG9wdGlv
blZhbHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG5cdFx0fVxu
XHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9uID0gdGhpcywgdGFnID0g
b3B0aW9uLmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxlY3QnICYmIHRhZyAhPSAn
b3B0aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7XG5cblx0XHRpZiAodGFn
ID09ICdzZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVjdGVkKClbMF0pKSByZXR1
cm4gJyc7XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScp
O1xuXHRcdHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBv
cHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0gbnVsbDtcbi8qPC9sdElF
OT4qL1xuXG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmdldEF0
dHJpYnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9IHtcblx0c2V0OiBmdW5j
dGlvbihpZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1
ZSA9IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuaWQgfHwg
bnVsbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0
QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xuLyo8L0lFPiovXG5cbn0p
KCk7XG5cbi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRo
ZSBFdmVudCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jvc3MtYnJvd3Nlci5cblxu
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVu
dCwgQXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJvdmlkZXM6IEV2ZW50XG5c
bi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9O1xudmFyIG5vcm1hbGl6
ZVdoZWVsU3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3JtYWxpemVkO1xuXHRpZiAo
ZXZlbnQud2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50LndoZWVsRGVsdGEgJSAx
MjAgPT0gMCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53aGVlbERlbHRhIC8gMTI7
XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRlbHRhWSB8fCBldmVudC5k
ZXRhaWwgfHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQgJSAzID09IDAgPyByYXdB
bW91bnQgLyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVybiBub3JtYWxpemVkO1xu
fTtcblxudmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBUeXBlKCdET01FdmVudCcs
IGZ1bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0gd2luZG93O1xuXHRldmVu
dCA9IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRlbmRlZCkgcmV0dXJuIGV2
ZW50O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVuZGVkID0gdHJ1ZTtcblx0
dGhpcy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRyb2wgPSBldmVudC5jdHJs
S2V5O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5tZXRhID0gZXZlbnQubWV0
YUtleTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBlO1xuXHR2YXIgdGFyZ2V0
ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdoaWxlICh0YXJnZXQgJiYg
dGFyZ2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXHR0aGlz
LnRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5cGUuaW5kZXhPZigna2V5
JykgPT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZlbnQud2hpY2ggfHwgZXZl
bnQua2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUgIT0gJ2tleXByZXNzJykg
dGhpcy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAna2V5ZG93bicgfHwgdHlw
ZSA9PSAna2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNvZGUgPCAxMjQpIHRoaXMu
a2V5ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAoY29kZSA+IDk1ICYmIGNv
ZGUgPCAxMDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0XHRpZiAodGhpcy5rZXkg
PT0gbnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93ZXJDYXNl
KCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2RibGNsaWNrJyB8
fCB0eXBlID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ0RP
TU1vdXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0gMCl7XG5cdFx0dmFyIGRv
YyA9IHdpbi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21w
YXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xuXHRcdHRoaXMu
cGFnZSA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIDog
ZXZlbnQuY2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9
IG51bGwpID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9jLnNjcm9sbFRvcFxuXHRc
dH07XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkg
PyBldmVudC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNsaWVudFgsXG5cdFx0XHR5
OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdpbi5wYWdlWU9mZnNldCA6
IGV2ZW50LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdET01Nb3VzZVNjcm9sbCcg
fHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwnKSB0aGlzLndoZWVsID0g
bm9ybWFsaXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdodENsaWNrID0gKGV2ZW50
LndoaWNoID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlmICh0eXBlID09ICdtb3Vz
ZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdtb3VzZWVudGVyJyB8fCB0
eXBlID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdldCA9IHR5cGUgPT0gJ21v
dXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2YXIgcmVsYXRlZCA9IGV2
ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAnZnJvbScgOiAndG8nKSAr
ICdFbGVtZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxhdGVkLm5vZGVUeXBlID09
IDMpIHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0aGlzLnJlbGF0ZWRUYXJn
ZXQgPSBkb2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZS5pbmRl
eE9mKCd0b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJlJykgPT0gMCl7XG5cdFx0
dGhpcy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGUgPSBldmVudC5z
Y2FsZTtcblx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xuXHRc
dHRoaXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcblx0XHR2YXIgdG91
Y2hlcyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0aWYgKHRvdWNoZXMgJiYg
dG91Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBdO1xuXHRcdFx0dGhpcy5w
YWdlID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5cdFx0XHR0aGlzLmNsaWVu
dCA9IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtcblx0XHR9XG5cdH1cblxu
XHRpZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRpZiAoIXRoaXMucGFnZSkg
dGhpcy5wYWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50KHtcblxuXHRzdG9wOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCkuc3RvcFByb3BhZ2F0
aW9uKCk7XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0
aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtc
blx0XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5l
dmVudC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGVs
c2UgdGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
XG5cbn0pO1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihjb2RlLCBrZXkpe1xuXHRf
a2V5c1tjb2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5ET01FdmVudC5kZWZpbmVL
ZXlzID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRydWUpO1xuXG5ET01FdmVu
dC5kZWZpbmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24nLCAnMzcnOiAnbGVmdCcs
ICczOSc6ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3BhY2UnLCAnOCc6ICdiYWNr
c3BhY2UnLCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEzJzogJ2VudGVyJ1xufSk7
XG5cbn0pKCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkV2ZW50XG5cbmRl
c2NyaXB0aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBldmVu
dHMuIFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgY3Vz
dG9tIEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5wcm92aWRlczogRWxlbWVu
dC5FdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVtZW50LlByb3BlcnRpZXMu
ZXZlbnRzID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5hZGRFdmVudHMoZXZlbnRz
KTtcbn19O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQn
LCB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0g
dGhpcy5yZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZlbnRzW3R5cGVdKSBldmVu
dHNbdHlwZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlmIChldmVudHNbdHlwZV0u
a2V5cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLnB1
c2goZm4pO1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRjdXN0b20gPSBFbGVtZW50
LkV2ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRcdFx0c2VsZiA9IHRoaXM7
XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20ub25BZGQu
Y2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlvbil7XG5cdFx0
XHRcdGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRpZiAoY3VzdG9tLmNv
bmRpdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZl
bnQpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0
aWYgKGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2Up
LmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0gZnVuY3Rpb24oKXtcblx0
XHRcdHJldHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFyIG5hdGl2ZUV2ZW50ID0g
RWxlbWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChuYXRpdmVFdmVudCl7XG5c
dFx0XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4gPSBmdW5jdGlvbihldmVu
dCl7XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQsIHNlbGYuZ2V0V2luZG93
KCkpO1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBldmVudCkgPT09IGZhbHNl
KSBldmVudC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFkZExpc3Rl
bmVyKHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1cblx0XHRldmVudHNbdHlw
ZV0udmFsdWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3Zl
RXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2
ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRo
aXM7XG5cdFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFyIGluZGV4ID0gbGlzdC5r
ZXlzLmluZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHRoaXM7XG5cdFx0
dmFyIHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LmtleXNbaW5k
ZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0dmFyIGN1c3RvbSA9IEVs
ZW1lbnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5v
blJlbW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYg
KGN1c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0
aGlzLCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50c1t0eXBl
XSkgPyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0pIDogdGhp
cztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIg
ZXZlbnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVudHNbZXZlbnRdKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7
XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtcblx0
XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5
cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIgYXR0YWNoZWQgPSB0aGlz
LnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhpcztcblx0
XHRpZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNoZWQpIHRoaXMucmVtb3Zl
RXZlbnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50cycpO1xuXHRcdH0gZWxz
ZSBpZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtldmVudHNdLmtleXMuZWFj
aChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQoZXZlbnRzLCBmbik7XG5c
dFx0XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVudHNdO1xuXHRcdH1cblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFyZ3Ms
IGRlbGF5KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0
aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFy
cmF5LmNvbnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9u
KGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRc
dFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJvbSwgdHlwZSl7XG5cdFx0
ZnJvbSA9IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMgPSBmcm9tLnJldHJpZXZl
KCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCF0eXBl
KXtcblx0XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMuY2xvbmVFdmVudHMo
ZnJvbSwgZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSl7XG5cdFx0XHRl
dmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5hZGRFdmVu
dCh0eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH1cblxufSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRjbGljazogMiwgZGJsY2xp
Y2s6IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6IDIsIC8vbW91c2Ug
YnV0dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91c2VTY3JvbGw6IDIsIC8v
bW91c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91c2Vtb3ZlOiAyLCBz
ZWxlY3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50XG5cdGtleWRvd246
IDIsIGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRvcmllbnRhdGlvbmNoYW5n
ZTogMiwgLy8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92ZTogMiwgdG91Y2hlbmQ6
IDIsIHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3RhcnQ6IDIsIGdlc3R1cmVj
aGFuZ2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9jdXM6IDIsIGJsdXI6IDIs
IGNoYW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAyLCBwYXN0ZTogMiwgaW5w
dXQ6IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6IDEsIGJlZm9yZXVubG9h
ZDogMiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVkOiAxLCByZWFkeXN0YXRl
Y2hhbmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3BzdGF0ZTogMiwgcGFnZXNo
b3c6IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAxLCBhYm9ydDogMSwgc2Ny
b2xsOiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5FdmVudHMgPSB7XG5cdG1v
dXNld2hlZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1lbnQgPyAnd2hlZWwnIDog
J29ubW91c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcgOiAnRE9NTW91c2VTY3Jv
bGwnXG5cdH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIHJlbGF0
ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9PSBudWxsKSByZXR1cm4g
dHJ1ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAocmVsYXRlZCAh
PSB0aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVPZih0aGlzKSAhPSAnZG9j
dW1lbnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5cbmlmICgnb25tb3VzZWVu
dGVyJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50
cy5tb3VzZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VsZWF2ZSA9IDI7XG5cdEVs
ZW1lbnQuTW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xuXHRFbGVtZW50LkV2ZW50
cy5tb3VzZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjog
Y2hlY2tcblx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZlID0ge1xuXHRcdGJhc2U6
ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xufVxuXG4vKjxsdElFOT4q
L1xuaWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRz
LnByb3BlcnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hhbmdlID0ge1xuXHRcdGJh
c2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0XHRcdHJldHVy
biAodGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBl
ID09ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hhbmdlJztcblx0XHR9LFxu
XHRcdGNvbmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGV2ZW50LnR5cGUg
IT0gJ3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0eU5hbWUgPT0gJ2NoZWNr
ZWQnO1xuXHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0t
LVxuXG5uYW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhl
IEVsZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxlZ2F0ZSBtZXRob2QgZm9y
IG1vcmUgZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRWxlbWVu
dC5EZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZXZlbnRMaXN0
ZW5lclN1cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xuXG5FbGVtZW50Lk5hdGl2
ZUV2ZW50cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNvdXQgPSAyO1xuXG52
YXIgYnViYmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xu
XHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRpZiAobWF0Y2godGFyZ2V0
LCBldmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRhcmdldCk7XG5cdFx0dGFy
Z2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9XG59O1xuXG52YXIgbWFw
ID0ge1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0
aW9uOiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3VzZWxlYXZlOiB7XG5cdFx0
YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNr
XG5cdH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChldmVudExpc3RlbmVyU3Vw
cG9ydCA/ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9LFxuXHRibHVyOiB7XG5c
dFx0YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAnZm9jdXNvdXQnLFxuXHRc
dGNhcHR1cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZhciBfa2V5ID0gJyRkZWxl
Z2F0aW9uOic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cblx0cmV0dXJu
IHtcblxuXHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTogZnVuY3Rpb24oc2VsZiwg
dWlkKXtcblx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0
ZW5lcnMnLCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3QuZm9ybXMpIGZvciAodmFy
IGkgPSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8vIHRoZSBmb3JtIG1heSBo
YXZlIGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxuXHRcdFx0XHQvLyByZW1v
dmVFdmVudCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBldmVudCB3YXNcblx0XHRc
dFx0Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5mb3Jtc1tpXS5yZW1vdmVF
dmVudCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0LmZuc1tpXSk7XG5cdFx0
XHR9XG5cdFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVu
dCwgdGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0LmdldCgndGFnJykgPT0g
J2Zvcm0nKSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQoJ2Zvcm0nKTtcblx0XHRc
dGlmICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJzID0gc2VsZi5yZXRyaWV2
ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRcdGxpc3RlbmVyID0gbGlz
dGVuZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0XHRcdGZvcm1zID0gbGlz
dGVuZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0aWYgKGZvcm1zLmluZGV4
T2YoZm9ybSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2goZm9ybSk7XG5cblx0XHRc
dHZhciBfZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNo
LCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9ybS5hZGRFdmVudCh0eXBl
LCBfZm4pO1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlzdGVuZXJzW3VpZF0gPSBs
aXN0ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywgbGlz
dGVuZXJzKTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNlcnZlciA9IGZ1bmN0aW9u
KHR5cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxcblx0XHRsaXN0ZW46IGZ1
bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdFx0XHR2YXIgZXZlbnRz
ID0ge2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRzKGV2ZW50cyk7
XG5cdFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRc
dFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5c
dFx0XHRldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0fVxuXHR9O1xufTtcblxu
aWYgKCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZChtYXAsIHtcblx0c3VibWl0
OiBmb3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9ic2VydmVyKCdyZXNldCcp
LFxuXHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRzZWxlY3Q6IGlucHV0T2Jz
ZXJ2ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIgcHJvdG8gPSBFbGVtZW50
LnByb3RvdHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxcblx0cmVtb3ZlRXZlbnQg
PSBwcm90by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rpb24ob2xkLCBtZXRob2Qp
e1xuXHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUpe1xuXHRcdGlmICh0eXBl
LmluZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4s
IHVzZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0eXBlKS5leHByZXNz
aW9uc1swXVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5ICE9ICdyZWxheScpIHJl
dHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIG5ld1R5
cGUgPSBwYXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNlKDEpLmVhY2goZnVuY3Rp
b24ocHNldWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRvLmtleSArIChwc2V1ZG8u
dmFsdWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5cdFx0fSk7XG5cdFx0b2xk
LmNhbGwodGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBuZXdU
eXBlLCBwYXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xufTtcblxudmFyIGRlbGVn
YXRpb24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbil7XG5cdFx0
dmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBz
dG9yYWdlW3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91aWQgaW4gc3RvcmVkKXtc
blx0XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVkW191aWRdLm1hdGNoID09
IG1hdGNoKSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5cGUgPSB0eXBlLCBfbWF0
Y2ggPSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0dHlwZSA9
IF9tYXAuYmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0KXtcblx0
XHRcdHJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5cdFx0fTtcblxuXHRcdHZh
ciBlbGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5cdFx0aWYgKF9tYXAuY29u
ZGl0aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29uZGl0aW9uKXtcblx0XHRc
dHZhciBfX21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29uZGl0aW9uIHx8IGVsZW1l
bnRFdmVudC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnQp
e1xuXHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAmJiBjb25kaXRpb24uY2Fs
bCh0YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIHNlbGYg
PSB0aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIgZGVsZWdhdG9yID0gX21h
cC5saXN0ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYm
IGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYg
KHRhcmdldCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQp
O1xuXHRcdH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYm
IGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYg
KHRhcmdldCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHR9
O1xuXG5cdFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0b3JlZFt1aWRdID0ge1xu
XHRcdFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0XHRkZWxlZ2F0b3I6IGRl
bGVnYXRvclxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0cmV0dXJu
IGFkZEV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHR9
LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4sIF91aWQpe1xuXHRc
dHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3RvcmVkID0g
c3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRoaXM7XG5cblx0XHRpZiAo
X3VpZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3IgPSBzdG9yZWRbX3VpZF0u
ZGVsZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0dHlwZSA9IF9tYXAuYmFz
ZSB8fCBfdHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5yZW1vdmUodGhpcywgX3Vp
ZCk7XG5cdFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3RvcmFnZVtfdHlwZV0gPSBz
dG9yZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0
b3IsIF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlkLCBzO1xuXHRcdGlmIChm
bikgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0
XHRpZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1cm4gZGVsZWdhdGlvbi5y
ZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191aWQpO1xuXHRcdH0gZWxz
ZSBmb3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRc
dGlmIChzLm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywg
dHlwZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywg
e1xuXHRhZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24uYWRkRXZlbnQpLFxuXHRy
ZW1vdmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQpXG59
KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0eWxlXG5cbmRlc2NyaXB0
aW9uOiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdHlsZXMgb2Yg
RWxlbWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxlbWVudC5TdHlsZVxuXG4u
Li5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3VtZW50Lmh0bWwsIGVsO1xu
XG4vLzxsdElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9lcyBub3QgcmVtb3ZlIHN0
eWxlcyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5bGUuY29sb3IgPSBudWxs
O1xudmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xvciA9PSAncmVkJztcblxu
Ly8gY2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciogc2hvcnRoYW5kIHN0eWxl
cyBpbiB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGluc3RlYWQgb2Ygd2lkdGgt
c3R5bGUtY29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIzYWJjJztcbmVsLnN0eWxl
LmJvcmRlciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciA9IGVsLnN0
eWxlLmJvcmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJRTk+XG5cbnZhciBoYXNH
ZXRDb21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSxcblx0c3VwcG9ydEJv
cmRlclJhZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlLmJvcmRlclJh
ZGl1cyAhPSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVzID0ge3NldDogZnVuY3Rp
b24oc3R5bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19O1xuXG52YXIgaGFzT3Bh
Y2l0eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhhc0ZpbHRlciA9IChodG1s
LnN0eWxlLmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBoYVxcKG9wYWNpdHk9KFtc
XGQuXSspXFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgb3Bh
Y2l0eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0eSk7XG5cdGVsZW1lbnQu
c3R5bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkgPT0gbnVsbCA/ICd2aXNp
YmxlJyA6ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0RmlsdGVyID0gZnVuY3Rp
b24oZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGUs
XG5cdFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgn
ZmlsdGVyJykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAudGVzdChmaWx0ZXIpID8g
ZmlsdGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAnICcgKyB2YWx1ZSkudHJp
bSgpO1xuXHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXIn
KTtcbn07XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5j
dGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0
eTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGlmICgh
ZWxlbWVudC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0eWxlLmhhc0xheW91dCkg
ZWxlbWVudC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCB8fCBvcGFjaXR5
ID09IDEpe1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnJyk7XG5cdFx0aWYgKG9w
YWNpdHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNldEZpbHRlcihlbGVtZW50
LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0Rmls
dGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAob3BhY2l0eSAqIDEwMCku
bGltaXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNldFZpc2liaWxpdHkpKTtc
blxudmFyIGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2
YXIgb3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVtZW50LmdldENvbXB1dGVk
U3R5bGUoJ29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcnKSA/IDEgOiBvcGFjaXR5
LnRvRmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBm
aWx0ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxl
KCdmaWx0ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikgb3BhY2l0eSA9IGZpbHRl
ci5tYXRjaChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51bGwgfHwgZmlsdGVyID09
IG51bGwpID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5jdGlvbihlbGVtZW50KXtc
blx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0eScpO1xuXHRpZiAob3Bh
Y2l0eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9PSAnaGlk
ZGVuJyA/IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5cbnZhciBmbG9hdE5hbWUg
PSAoaHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZsb2F0JyA6ICdjc3NGbG9h
dCcsXG5cdG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDogJzAlJywgY2VudGVyOiAn
NTAlJywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRoYXNCYWNrZ3JvdW5kUG9z
aXRpb25YWSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblggIT0gbnVsbCksXG5cdHBy
ZWZpeFBhdHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbihwcm9w
ZXJ0eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBhdHRlcm4sICckMS0nKS5j
YW1lbENhc2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0eWxlID0gZnVuY3Rpb24o
c3R5bGUsIHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24n
KXtcblx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAnWCcpO1xuXHRcdHByb3Bl
cnR5ICs9ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkpO1xufTtc
bi8vPC9sdElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldENvbXB1dGVkU3R5bGU6
IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgdGhp
cy5jdXJyZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtjYW1lbENhc2UocHJvcGVy
dHkpXTtcblx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERvY3VtZW50KHRoaXMpLmRl
ZmF1bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3Lmdl
dENvbXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJldHVybiAoY29tcHV0ZWQp
ID8gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0gZmxvYXROYW1lKSA/ICdm
bG9hdCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxcblxuXHRzZXRTdHlsZTog
ZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHkn
KXtcblx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xu
XHRcdFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9
XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFt
ZSA6IHByb3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnc3RyaW5nJyl7XG5cdFx0
XHR2YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAnQCcpLnNwbGl0KCcgJyk7
XG5cdFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChmdW5jdGlvbih2YWwsIGkp
e1xuXHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0XHRyZXR1cm4gKHR5cGVP
Zih2YWwpID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywgTWF0aC5yb3VuZCh2YWwp
KSA6IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09IFN0
cmluZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpO1xu
XHRcdH1cblx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdC8vPGx0SUU5Plxu
XHRcdGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgZG9lc05vdFJlbW92ZVN0
eWxlcyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0XHRyZW1vdmVTdHlsZSh0
aGlzLnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmIChw
cm9wZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRoaXMpO1xuXHRcdHByb3Bl
cnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0
eSk7XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVydHkuaW5kZXhPZignYm9y
ZGVyUmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVyVG9wTGVmdFJhZGl1cycs
ICdib3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3Jk
ZXJCb3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7XG5cdFx0XHRcdHJldHVy
biB0aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0aGlzKS5qb2luKCcgJyk7
XG5cdFx0fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3BlcnR5XTtcblx0XHRpZiAo
IXJlc3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRpZiAoRWxlbWVudC5TaG9y
dFN0eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0XHRyZXN1bHQgPSBbXTtc
blx0XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVzW3Byb3BlcnR5XSkgcmVz
dWx0LnB1c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQuam9pbign
ICcpO1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHByb3Bl
cnR5KTtcblx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZICYmIC9eYmFja2dy
b3VuZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0
LnJlcGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0aW9uKHBvc2l0aW9uKXtc
blx0XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtcblx0XHRcdH0pIHx8ICcw
cHgnO1xuXHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBv
c2l0aW9uJykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0KXtcblx0XHRcdHJlc3Vs
dCA9IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVzdWx0Lm1hdGNoKC9yZ2Jh
P1xcKFtcXGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVzdWx0ID0gcmVzdWx0LnJl
cGxhY2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRcdH1cblx0XHRpZiAoIWhh
c0dldENvbXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHldKXtcblx0XHRcdGlmICgo
L14oaGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9weCQvLnRlc3QocmVzdWx0
KSkpe1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3aWR0aCcpID8gWydsZWZ0
JywgJ3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7XG5cdFx0XHRcdHZhbHVl
cy5lYWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9IHRoaXMuZ2V0U3R5bGUo
J2JvcmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRoaXMuZ2V0U3R5bGUoJ3Bh
ZGRpbmctJyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0cmV0
dXJuIHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCldIC0gc2l6ZSArICdweCc7
XG5cdFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRkaW5nLyku
dGVzdChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQpKSl7XG5cdFx0XHRcdHJl
dHVybiAnMHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKHJldHVy
bnNCb3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdodHxCb3R0b218TGVmdCk/
JC8udGVzdChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xuXHRcdFx0cmV0dXJuIHJl
c3VsdC5yZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAkMyAkMScpO1xuXHRcdH1c
blx0XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHNldFN0eWxl
czogZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBpbiBzdHlsZXMpIHRoaXMu
c2V0U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGdldFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0QXJy
YXkuZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdHJlc3VsdFtr
ZXldID0gdGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiByZXN1
bHQ7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRsZWZ0OiAnQHB4JywgdG9w
OiAnQHB4JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3aWR0aDogJ0BweCcsIGhl
aWdodDogJ0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAnQHB4JywgbWluV2lkdGg6
ICdAcHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoQCwgQCwg
QCknLCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3NpdGlvbjogJ0BweCBAcHgn
LCBjb2xvcjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4JywgbGV0dGVyU3BhY2lu
ZzogJ0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChAcHggQHB4IEBweCBAcHgp
Jyxcblx0bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzogJ0BweCBAcHggQHB4IEBw
eCcsIGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAg
cmdiKEAsIEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXJT
dHlsZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBAKSByZ2IoQCwgQCwgQCkg
cmdiKEAsIEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0AnLCAnem9vbSc6ICdAJywg
Zm9udFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0eTogJ0AnLCBib3JkZXJS
YWRpdXM6ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVsZW1lbnQuU2hvcnRTdHls
ZXMgPSB7bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30sIGJvcmRlcldpZHRoOiB7
fSwgYm9yZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5bJ1RvcCcsICdSaWdodCcs
ICdCb3R0b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9uKXtcblx0dmFyIFNob3J0
ID0gRWxlbWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1lbnQuU3R5bGVzO1xuXHRb
J21hcmdpbicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7XG5cdFx0dmFyIHNkID0g
c3R5bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9IEFsbFtzZF0gPSAnQHB4
Jztcblx0fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9uO1xuXHRTaG9ydC5ib3Jk
ZXJbYmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xuXHR2YXIgYmR3ID0gYmQg
KyAnV2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsgJ0NvbG9yJztcblx0U2hv
cnRbYmRdID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBTaG9ydFtiZF1bYmR3XSA9
IEFsbFtiZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jkc10gPSBTaG9ydFtiZF1b
YmRzXSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xvcltiZGNdID0gU2hvcnRb
YmRdW2JkY10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7XG5cbmlmIChoYXNCYWNr
Z3JvdW5kUG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNrZ3JvdW5kUG9zaXRpb24g
PSB7YmFja2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9zaXRpb25ZOiAnQCd9O1xu
fSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lvbnNcblxuZGVzY3JpcHRp
b246IENvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNjcm9sbCwgb3IgcG9zaXRp
b25pbmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBvc2l0aW9uaW5nIGJhc2Vk
IG9uIHRoZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29kZSBhbmQgc21hcnQgYnJv
d3NlciBmaXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xn
cGwuaHRtbCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBvbiBbWVVJXShodHRwOi8v
ZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vuc2VdKGh0dHA6Ly9kZXZl
bG9wZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1aXJlczogW0VsZW1lbnQs
IEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1lbnNpb25zXVxuXG4uLi5c
biovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWxl
bWVudC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcbnZh
ciBicm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50ID09PSBlbGVtZW50KTtc
bmVsZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21wb25lbnRzID0gWydoZWln
aHQnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRlclRvcFdpZHRoJywgJ2Jv
cmRlckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsnd2lkdGgnLCAncGFkZGlu
Z0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdp
ZHRoJ107XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24oZWwpe1xuXG5cdHZhciBn
Q1MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91bmRzID0ge3g6IDAsIHk6
IDB9O1xuXG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5k
cy55ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lkdGhDb21wb25lbnRzLmVh
Y2goZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtc
blx0fSk7XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZzZXQgPSBmdW5jdGlvbihl
bCl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycgfHwg
aXNCb2R5KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1bmN0aW9uKGVsKXtcblx0
cmV0dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkkL2kpLnRlc3QoZWwudGFn
TmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Nyb2xsVG86IGZ1bmN0aW9u
KHgsIHkpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhpcy5nZXRXaW5kb3coKS5z
Y3JvbGxUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zY3JvbGxMZWZ0ID0geDtc
blx0XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4g
dGhpcy5nZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElFOT5cblx0XHQvLyBUaGlz
IGlmIGNsYXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0ZSBnZXRCb3VuZGluZ0Ns
aWVudFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRlbi5cblx0XHRpZiAoIXdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zmc2V0V2lkdGgsIHk6IHRo
aXMub2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQvLyBUaGlzIHN2ZyBzZWN0
aW9uIHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBjYW4gYmUgcmVtb3ZlZCB3
aGVuIEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVnIGluZm86IGh0dHBzOi8v
YnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4NVxuXHRcdGlmICh0aGlz
LmdldCgndGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVTaXplKHRoaXMpO1xuXG5c
dFx0dHJ5IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
O1xuXHRcdFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5kcy5oZWlnaHR9O1xuXHRc
dH0gY2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0XHR9XG5cdH0sXG5c
blx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1
cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlz
LnNjcm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xs
OiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRv
dygpLmdldFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxMZWZ0LCB5OiB0aGlz
LnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rpb24oKXtcblx0XHR2YXIg
ZWxlbWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0
d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9
IGVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5zY3JvbGxU
b3A7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdH1cblx0XHRyZXR1
cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBicm9rZW5PZmZzZXRQYXJl
bnQgPyBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5
KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcp
IHJldHVybiBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAoc3R5bGVTdHJpbmcoZWxl
bWVudCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRTdGF0aWMgOiBpc09mZnNl
dDtcblx0XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpKXtcblx0XHRcdGlm
IChpc09mZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdFx0cmV0
dXJuIG51bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0
XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicp
ID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlbGVt
ZW50Lm9mZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0cmV0dXJuIG51bGw7XG5c
dH0sXG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIgaGFzR2V0Qm91bmRpbmdD
bGllbnRSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5cblx0XHRpZiAoaGFzR2V0
Qm91bmRpbmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRoaXMuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0aGlzLmdldERvY3VtZW50
KCkuZG9jdW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9IGh0bWwuZ2V0U2Nyb2xs
KCksXG5cdFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxzKCksXG5cdFx0XHRcdGlz
Rml4ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJyk7XG5cblx0
XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9hdCgpICsgZWxlbVNjcm9s
bHMueCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwuY2xpZW50TGVmdCxc
blx0XHRcdFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnkgKyAoKGlzRml4
ZWQpID8gMCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxuXHRcdFx0fTtcblx0XHR9
XG5cblx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRc
dGlmIChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRcdHdoaWxlIChlbGVtZW50
ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50Lm9mZnNl
dExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xuXG5cdFx0XHRl
bGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvc2l0
aW9uO1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZSl7XG5cdFx0dmFy
IG9mZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xsID0gdGhpcy5nZXRTY3Jv
bGxzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zmc2V0LnggLSBzY3JvbGwu
eCxcblx0XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xuXG5cdFx0aWYgKHJlbGF0
aXZlICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkpe1xuXHRcdFx0dmFyIHJl
bGF0aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xuXHRcdFx0cmV0dXJuIHt4
OiBwb3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJvcmRlcihyZWxhdGl2ZSks
IHk6IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BCb3JkZXIocmVsYXRpdmUp
fTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldENvb3JkaW5hdGVz
OiBmdW5jdGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5n
ZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0
UG9zaXRpb24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0dmFy
IG9iaiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0b3A6IHBvc2l0aW9uLnks
XG5cdFx0XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXplLnlcblx0XHR9O1xuXHRc
dG9iai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9iai5ib3R0b20gPSBvYmou
dG9wICsgb2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGNvbXB1dGVQb3Np
dGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGVmdDogb2JqLnggLSBz
dHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRvcDogb2JqLnkgLSBzdHls
ZU51bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxcblxuXHRzZXRQb3NpdGlv
bjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHlsZXModGhpcy5jb21wdXRl
UG9zaXRpb24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50LCBXaW5kb3ddLmludm9r
ZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9
IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBkb2MuY2xpZW50V2lkdGgs
IHk6IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtc
blx0XHR2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0
aGlzKTtcblx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xsTGVmdCwg
eTogd2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9s
bFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyks
XG5cdFx0XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkgPSB0aGlzLmdldERvY3Vt
ZW50KCkuYm9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9jLnNjcm9sbFdpZHRoLCBi
b2R5LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5zY3JvbGxIZWlnaHQsIGJv
ZHkuc2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHRyZXR1cm4g
e3RvcDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXplLngsIGhlaWdodDog
c2l6ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8gcHJpdmF0ZSBtZXRob2Rz
XG5cbnZhciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZTtcblxuZnVuY3Rp
b24gc3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWxl
bWVudCwgc3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0aW9uIHRvcEJvcmRlcihl
bGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItdG9wLXdpZHRo
Jyk7XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51
bWJlcihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gaXNCb2R5
KGVsZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSkudGVzdChlbGVtZW50LnRh
Z05hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVsZW1lbnQpe1xuXHR2YXIg
ZG9jID0gZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFkb2MuY29tcGF0TW9kZSB8
fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtc
bn1cblxufSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtwb3NpdGlvbjogJ3NldFBv
c2l0aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9jdW1lbnQsIEVsZW1lbnRd
Lmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gdGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0aDogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxUb3A6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtcblx0fSxcblxuXHRnZXRT
Y3JvbGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLng7XG5c
dH0sXG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdl
dFNjcm9sbFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRoOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFRvcDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7XG5cdH0sXG5cblx0Z2V0
TGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLng7XG5cdH1c
blxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRo
ZSBiYXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVyIEZ4IENs
YXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0NoYWlu
LCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92aWRlczogRnhcblxuLi4u
XG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9IG5ldyBDbGFzcyh7XG5c
blx0SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxc
blxuXHRvcHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWwsXG5cdFx0b25DYW5jZWw6
IG5pbCxcblx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRmcHM6IDYwLFxuXHRcdHVu
aXQ6IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVzOiBudWxsLFxuXHRcdGZy
YW1lU2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6
IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCB8fCB0
aGlzO1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHRnZXRUcmFuc2l0
aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtcblx0XHRcdHJldHVybiAt
KE1hdGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xuXHR9LFxuXG5cdHN0ZXA6
IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFtZVNraXApe1xuXHRcdFx0
dmFyIGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRoaXMudGltZSkgOiAwLCBm
cmFtZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0dGhpcy50aW1lID0gbm93
O1xuXHRcdFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMu
ZnJhbWUrKztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKXtcblx0
XHRcdHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1lIC8gdGhpcy5mcmFtZXMp
O1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgZGVsdGEp
KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0
dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpO1xuXHRcdFx0dGhp
cy5zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRyZXR1
cm4gbm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5c
dFx0cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0fSxcblxuXHRjaGVjazog
ZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJldHVybiB0cnVlO1xuXHRc
dHN3aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5j
YW5jZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhp
cy5jYWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0
XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKGZyb20sIHRvKXtcblx0
XHRpZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLmZyb20g
PSBmcm9tO1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1lID0gKHRoaXMub3B0aW9u
cy5mcmFtZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0dGhpcy50
cmFuc2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFyIGZyYW1lcyA9IHRoaXMu
b3B0aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0aW9uID0gdGhpcy5v
cHRpb25zLmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5EdXJhdGlvbnNbZHVyYXRp
b25dIHx8IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUludGVydmFsID0gMTAwMCAv
IGZwcztcblx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRp
b24gLyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUo
KSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh0aGlzLnN1YmplY3Qp
O1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1YmplY3QpO1xuXHRc
dHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0
aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRp
b25zLmZwcyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5mcmFtZSl7XG5cdFx0XHRc
dHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHRcdGlmICgh
dGhpcy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0aGlzLnN1
YmplY3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ3N0b3AnLCB0
aGlzLnN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZlKHRoaXMuc3ViamVjdCA9
PT0gdGhpcyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkp
e1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMs
IHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRc
dFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCkuY2xlYXJDaGFpbigpO1xu
XHRcdFx0dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkp
e1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMs
IHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRy
ZXN1bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQoKSkgcHVzaEluc3RhbmNl
LmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0gaW5zdGFuY2VzW3RoaXMu
b3B0aW9ucy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29udGFpbnModGhpcyk7XG5c
dH0sXG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmZyYW1lIDwg
dGhpcy5mcmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5cbn0pO1xuXG5GeC5jb21w
dXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJuICh0byAtIGZyb20pICog
ZGVsdGEgKyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9ydCc6IDI1MCwgJ25vcm1h
bCc6IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVyc1xuXG52YXIgaW5zdGFu
Y2VzID0ge30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0aW9uKCl7XG5cdHZhciBu
b3cgPSBEYXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRc
dHZhciBpbnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNlKSBpbnN0YW5jZS5zdGVw
KG5vdyk7XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2
YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9IFtdKTtcblx0bGlz
dC5wdXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNbZnBzXSA9IGxvb3AucGVy
aW9kaWNhbChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07XG5cbnZhciBwdWxsSW5z
dGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdO1xuXHRp
ZiAobGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAoIWxpc3QubGVuZ3RoICYm
IHRpbWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBzXTtcblx0XHRcdHRpbWVy
c1tmcHNdID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0fVxuXHR9XG59O1xuXG59
KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMg
dGhlIENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4sIEZ4Lk1vcnBoLCBGeC5F
bGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRngs
IEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4uXG4qL1xuXG5GeC5DU1Mg
PSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJlcGFyZXMgdGhlIGJhc2Ug
ZnJvbS90byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwg
dmFsdWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVlcyk7XG5cdFx0dmFyIGZy
b20gPSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0byA9PSBudWxsKXtcblx0
XHRcdHRvID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0eWxlKHByb3BlcnR5KTtc
blx0XHRcdHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0XHQvLyBhZGFwdGVkIGZy
b206IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21hc3Rlci9meC5qcyNMMjk5
XG5cdFx0XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09ICdzdHJpbmcnICYmIGZy
b20uc2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxvYXQoZnJvbSkgIT0gMCl7
XG5cdFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsgdW5pdCk7XG5cdFx0XHRc
dHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHRc
dC8vIElFIGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhlbFdpZHRoXG5cdFx0XHRc
dGlmICghKC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0
eWxlWygncGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5cdFx0XHRcdFx0aWYgKHZh
bHVlID09IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9tIERlYW4gRWR3YXJkcycg
aHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50
LTEwMjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0eWxlLmxlZnQ7XG5cdFx0
XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5cdFx0XHRcdFx0XHR2YWx1
ZSA9IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5s
ZWZ0ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZnJvbSA9ICh0byB8
fCAxKSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZsb2F0KGZyb20pIHx8IDAp
O1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9tICsgdW5pdCk7XG5cdFx0
XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShmcm9tKSwgdG86IHRoaXMu
cGFyc2UodG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGludG8gYW4gYXJyYXlcblxu
XHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVuY3Rpb24uY29udmVydCh2
YWx1ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpID8gdmFsdWUu
c3BsaXQoJyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJldHVybiB2YWx1ZS5tYXAo
ZnVuY3Rpb24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xuXHRcdFx0dmFyIGZvdW5k
ID0gZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2VycywgZnVuY3Rpb24ocGFy
c2VyKXtcblx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRcdHZhciBwYXJzZWQgPSBw
YXJzZXIucGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBwYXJzZWQgPT09IDApIGZv
dW5kID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0XHRcdH0pO1xuXHRcdFx0
Zm91bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5DU1MuUGFyc2Vycy5TdHJp
bmd9O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8vY29tcHV0ZXMg
YnkgYSBmcm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0aGVpciBwYXJzZXJzLlxu
XG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIGNvbXB1dGVk
ID0gW107XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5ndGgpKS50aW1lcyhmdW5j
dGlvbihpKXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9tW2ldLnBhcnNlci5jb21w
dXRlKGZyb21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBhcnNlcjogZnJvbVtpXS5w
YXJzZXJ9KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVy
dCgnZng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xuXHR9LFxuXG5cdC8vc2Vy
dmVzIHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5p
dCl7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVlID0gdGhp
cy5wYXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5cdFx0dmFsdWUuZWFjaChm
dW5jdGlvbihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5jb25jYXQoYml0LnBhcnNl
ci5zZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmV0dXJuZWQ7
XG5cdH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxlbWVudFxuXG5cdHJlbmRl
cjogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0KXtcblx0XHRlbGVtZW50
LnNldFN0eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0KSk7XG5cdH0sXG5cblx0
Ly9zZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBmb3IgYSBz
ZWxlY3RvclxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRcdGlmIChGeC5DU1Mu
Q2FjaGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXTtcblx0XHR2YXIg
dG8gPSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBzZWxlY3Rvci5lc2NhcGVS
ZWdFeHAoKSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0gZnVuY3Rpb24ocnVsZXMp
e1xuXHRcdFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7XG5cdFx0XHRcdGlmIChy
dWxlLm1lZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5ydWxlcyB8fCBydWxlLmNz
c1J1bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFydWxl
LnN0eWxlKSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3Rv
clRleHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysvLCBmdW5jdGlvbihtKXtc
blx0XHRcdFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9KSA6IG51bGw7XG5c
dFx0XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3QudGVzdChzZWxlY3RvclRl
eHQpKSByZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBmdW5jdGlv
bih2YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHlsZVtzdHlsZV0gfHwgRWxl
bWVudC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0XHR2YWx1ZSA9IFN0cmlu
ZyhydWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVdID0gKCgvXnJnYi8pLnRl
c3QodmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0
XHR9KTtcblx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0cywgZnVu
Y3Rpb24oc2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVmO1xuXHRcdFx0aWYgKGhy
ZWYgJiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5kZXhPZihkb2N1bWVudC5k
b21haW4pID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBz
aGVldC5jc3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7XG5cdFx0fSk7XG5cdFx0
cmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxuXG59KTtcblxuRnguQ1NT
LkNhY2hlID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENvbG9yOiB7XG5cdFx0cGFy
c2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXiNbMC05YS1mXXsz
LDZ9JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRcdFx0cmV0dXJuICgodmFs
dWUgPSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKS8pKSkgPyBbdmFs
dWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9LFxuXHRcdGNvbXB1dGU6
IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4gZnJvbS5tYXAoZnVuY3Rp
b24odmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChGeC5jb21wdXRlKGZyb21b
aV0sIHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rp
b24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpO1xuXHRcdH1cblx0fSxc
blxuXHROdW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0XHRjb21wdXRlOiBGeC5j
b21wdXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0XHRyZXR1cm4g
KHVuaXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9LFxuXG5cdFN0cmluZzog
e1xuXHRcdHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0XHRjb21wdXRlOiBmdW5j
dGlvbih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9LFxuXHRcdHNlcnZlOiBm
dW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1cblx0fVxuXG59O1xuXG5c
blxuLypcbi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkgRngu
U3R5bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9mIENTUyBwcm9wZXJ0aWVz
IGZvciBhbiBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywgb3IgQ1NTIGJhc2VkIHNl
bGVjdG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6
IEZ4LkNTU1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xuXG5GeC5Nb3JwaCA9IG5l
dyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9u
KGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRv
Y3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5c
dHNldDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9PSAnc3RyaW5nJykgbm93
ID0gdGhpcy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5vdykgdGhpcy5yZW5kZXIo
dGhpcy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRc
dHZhciBub3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFy
ZW50KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRz
dGFydDogZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnRp
ZXMpKSByZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRpZXMgPT0gJ3N0cmluZycp
IHByb3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0XHR2YXIgZnJvbSA9IHt9
LCB0byA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7XG5cdFx0XHR2YXIgcGFy
c2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7XG5cdFx0
XHRmcm9tW3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBhcnNlZC50bztcblx0XHR9
XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVu
dC5Qcm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0
dGhpcy5nZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG1vcnBoID0gdGhp
cy5yZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0XHRcdG1vcnBoID0gbmV3
IEZ4Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbW9y
cGgnLCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0fVxuXG59O1xuXG5FbGVt
ZW50LmltcGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3BzKXtcblx0XHR0aGlzLmdl
dCgnbW9ycGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bi8qXG4tLS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5z
IGEgc2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhl
IEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxu
ICAtIEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0dHA6Ly93d3cucm9iZXJ0
cGVubmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXplZCB0byBiZSB1c2VkIHdp
dGggTW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczogRnguVHJhbnNpdGlvbnNc
blxuLi4uXG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24gfHwgRnguVHJhbnNp
dGlvbnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFucyA9PSAnc3RyaW5nJyl7
XG5cdFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0XHR0cmFucyA9IEZ4LlRy
YW5zaXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8fCB0cmFuc1tkYXRhWzBd
LmNhcGl0YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMgPSB0cmFuc1snZWFzZScg
KyBkYXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsyXS5jYXBpdGFsaXplKCkg
OiAnJyldO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxufSk7XG5cbkZ4LlRyYW5z
aXRpb24gPSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRwYXJhbXMgPSBBcnJheS5j
b252ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihwb3Mpe1xuXHRcdHJldHVy
biB0cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hcHBlbmQo
ZWFzZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91dDogZnVuY3Rpb24ocG9z
KXtcblx0XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBwYXJhbXMpO1xuXHRcdH0s
XG5cdFx0ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIChwb3MgPD0gMC41
ID8gdHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFuc2l0aW9uKDIgKiAoMSAt
IHBvcyksIHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5cbkZ4LlRyYW5zaXRpb25z
ID0ge1xuXG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0dXJuIHplcm87XG5cdH1c
blxufTtcblxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0aW9uKHRyYW5zaXRpb25z
KXtcblx0Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykgRnguVHJhbnNpdGlvbnNb
dHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9uc1t0cmFuc2l0aW9uXSk7
XG59O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzogZnVuY3Rpb24ocCwgeCl7
XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtcblx0fSxcblxuXHRFeHBv
OiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAqIChwIC0gMSkpO1xuXHR9
LFxuXG5cdENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5zaW4oTWF0aC5h
Y29zKHApKTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1h
dGguY29zKHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazogZnVuY3Rpb24ocCwgeCl7
XG5cdFx0eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgMikg
KiAoKHggKyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1bmN0aW9uKHApe1xuXHRc
dHZhciB2YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7IGEgKz0gYiwgYiAvPSAy
KXtcblx0XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRcdFx0XHR2YWx1ZSA9IGIg
KiBiIC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwgMik7XG5cdFx0XHRcdGJy
ZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0RWxhc3Rp
YzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDEwICogLS1wKSAqIE1h
dGguY29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEpIC8gMyk7XG5cdH1cblxu
fSk7XG5cblsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCddLmVhY2goZnVuY3Rpb24o
dHJhbnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRy
YW5zaXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIGkgKyAyKTtcblx0
fSk7XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5kZXNjcmlwdGlvbjogRm9y
bWVybHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVydHkgZm9y
IGFuIGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczog
RnguQ1NTXG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFkZSwgRWxlbWVudC5oaWdo
bGlnaHRdXG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6
IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0
XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0
XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3BlcnR5
LCBub3cpe1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdFx0bm93ID0gcHJv
cGVydHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwgdGhpcy5vcHRpb25zLnBy
b3BlcnR5O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHByb3BlcnR5LCBu
b3csIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdGFy
dDogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJv
cGVydHksIGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5mbGF0
dGVuKGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMub3B0aW9ucy5wcm9wZXJ0
eSB8fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVs
ZW1lbnQsIHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0aGlzLnBhcmVudChwYXJz
ZWQuZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnR3
ZWVuID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVu
JykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5yZXRyaWV2ZSgndHdl
ZW4nKTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3IEZ4LlR3ZWVuKHRoaXMs
IHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdlZW4nLCB0d2Vlbik7XG5c
dFx0fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7
XG5cblx0dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0dGhpcy5nZXQo
J3R3ZWVuJykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0gdGhpcy5nZXQoJ3R3ZWVu
JyksIG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1bWVudHMpLCB0b2dnbGU7
XG5cdFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dnbGUnO1xuXHRcdHN3aXRj
aCAoYXJnc1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0g
PSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0g
PSAwOyBicmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9
IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0g
MDsgYnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2YXIgZmxhZyA9IHRoaXMu
cmV0cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNpdHknKSA9PSAxKTtcblx0
XHRcdFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9IGZsYWcgPyAwIDogMTtc
blx0XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xuXHRcdFx0XHR0b2dnbGUg
PSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1ldGhvZCA9ICdzdGFydCc7
XG5cdFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnZmFkZTpmbGFnJyk7XG5c
dFx0ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZhciB0byA9IGFyZ3NbYXJn
cy5sZW5ndGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcpe1xuXHRcdFx0dGhpcy5z
ZXRTdHlsZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XG5c
dFx0fSBlbHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRjaGFpbi5sZW5ndGgpe1xu
XHRcdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LnNl
dFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XHR0aGlzLmNhbGxDaGFp
bigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0U3R5bGUo
J3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRm
YWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUo
J29wYWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2li
aWxpdHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHR9KTtc
blx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdobGlnaHQ6IGZ1bmN0aW9u
KHN0YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9IHRoaXMucmV0cmlldmUo
J2hpZ2hsaWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InKSk7
XG5cdFx0XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNmZmYnIDogZW5kO1xuXHRc
dH1cblx0XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0XHR0d2Vlbi5zdGFydCgn
YmFja2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5kKS5jaGFpbihmdW5jdGlv
bigpe1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsIHRoaXMucmV0cmll
dmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNhbGxDaGFpbigpO1xuXHRc
dH0uYmluZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1c
blxubmFtZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwgYWxsIHB1cnBvc2UgUmVx
dWVzdCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFpbiwgRXZlbnRzLCBPcHRp
b25zLCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6IFJlcXVlc3RcblxuLi4u
XG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rpb24oKXt9LFxuXHRwcm9n
cmVzc1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2VyLlJlcXVlc3QpO1xuXG52
YXIgUmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czog
W0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7
Lypcblx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxvYWRzdGFydDogZnVuY3Rp
b24oZXZlbnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlvbihldmVudCwgeGhyKXt9
LFxuXHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNhbmNlbDogZnVuY3Rpb24o
KXt9LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0LCByZXNwb25zZVhNTCl7
fSxcblx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRvbkV4Y2VwdGlvbjogZnVu
Y3Rpb24oaGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0OiBmdW5jdGlvbigpe30s
XG5cdFx0dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdpdGhDcmVkZW50aWFsczog
ZmFsc2UsKi9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRcdGhlYWRlcnM6IHtcblx0
XHRcdCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxcblx0XHRcdCdBY2NlcHQn
OiAndGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWws
ICovKidcblx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1hdDogZmFsc2UsXG5cdFx0
bWV0aG9kOiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0aXNTdWNjZXNzOiBudWxs
LFxuXHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0cnVlLFxuXHRcdGVuY29k
aW5nOiAndXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0XHRldmFsUmVzcG9uc2U6
IGZhbHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFsc2Vcblx0fSxcblxuXHRp
bml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2Vy
LlJlcXVlc3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpcy5oZWFk
ZXJzID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25TdGF0ZUNoYW5nZTogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHhoci5yZWFkeVN0YXRl
ICE9IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNl
O1xuXHRcdHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7
XG5cdFx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRoaXMuc3RhdHVzID0gKHN0
YXR1cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHho
ci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4
aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdGlmICh0aGlzLnRp
bWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlz
LnRpbWVyO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4dDogdGhpcy54aHIucmVz
cG9uc2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1MfTtcblx0XHRpZiAodGhp
cy5vcHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVzKSlcblx0XHRcdHRoaXMu
c3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2UueG1sKTtcblx0XHRlbHNl
XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nlc3M6IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVybiAoc3RhdHVzID49IDIw
MCAmJiBzdGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vzc1NjcmlwdHM6IGZ1bmN0
aW9uKHRleHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlIHx8ICgvKGVjbWF8
amF2YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LXR5cGUnKSkpIHJldHVy
biBCcm93c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3RyaXBTY3JpcHRzKHRoaXMu
b3B0aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCwg
eG1sKXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRzKHRleHQpLCB4bWwp
O1xuXHRcdHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9KTtcblx0fSxcblxuXHRv
blN1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgYXJn
dW1lbnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNhbGxDaGFpbigpO1xuXHR9
LFxuXG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZhaWx1cmUoKTtcblx0XHR0
aGlzLnJlamVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54aHJ9KTtcblx0fSxcblxu
XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJyku
ZmlyZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5cdGxvYWRzdGFydDogZnVu
Y3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3RhcnQnLCBbZXZlbnQsIHRo
aXMueGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlz
LmZpcmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0dGlt
ZW91dDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIHRoaXMueGhy
KTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHhocjogdGhpcy54aHJ9KTtc
blx0fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR0aGlzLmhl
YWRlcnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRIZWFk
ZXI6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9u
KCl7XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG5cdFx0
fS5iaW5kKHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRo
aXMucnVubmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7
XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRc
dGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhp
cykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRz
ZW5kOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hlY2sob3B0aW9ucykpIHJl
dHVybiB0aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5p
c1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxu
XHRcdHZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0eXBlID09ICdzdHJpbmcn
IHx8IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9O1xuXG5cdFx0
dmFyIG9sZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2JqZWN0LmFwcGVuZCh7ZGF0
YTogb2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0aG9kfSwgb3B0aW9ucyk7
XG5cdFx0dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhvcHRpb25zLnVybCks
IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRzd2l0Y2ggKHR5
cGVPZihkYXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9IGRvY3VtZW50LmlkKGRh
dGEpLnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdo
YXNoJzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xuXHRcdH1cblxuXHRcdGlm
ICh0aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQgPSAnZm9ybWF0PScgKyB0
aGlzLm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IGZvcm1hdCArICcmJyAr
IGRhdGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5lbXVsYXRpb24g
JiYgIVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBfbWV0aG9k
ID0gJ19tZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBfbWV0aG9kICsg
JyYnICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9zdCc7XG5cdFx0fVxuXG5c
dFx0aWYgKHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcsICdwdXQnXS5jb250YWlu
cyhtZXRob2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9wdGlvbnMuZW5jb2Rpbmcp
ID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJyc7XG5cdFx0XHR0aGlz
LmhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5j
b2RlZCcgKyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkgdXJsID0gZG9jdW1lbnQu
bG9jYXRpb24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9uID0gdXJsLmxhc3RJbmRl
eE9mKCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0cmltUG9zaXRpb24gPSB1
cmwuaW5kZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAsIHRyaW1Qb3NpdGlvbik7
XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1cmwgKz0gKHVybC5pbmRl
eE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVlSUQoKTtcblxuXHRcdGlm
IChkYXRhICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdkZWxldGUnKSl7XG5cdFx0
XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBkYXRhO1xuXHRc
dFx0ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlm
IChwcm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0ID0gdGhpcy5sb2Fkc3Rh
cnQuYmluZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy5iaW5k
KHRoaXMpO1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgpLCB1cmws
IHRoaXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMub3B0aW9ucy5wYXNz
d29yZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAmJiAnd2l0aENy
ZWRlbnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuXG5cdFx0eGhy
Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpO1xuXG5c
dFx0T2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRc
dHRyeSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xuXHRcdFx0
fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNlcHRpb24nLCBba2V5LCB2
YWx1ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhjZXB0aW9uJywgeGhyOiB4
aHIsIGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0aWYgKHRo
aXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRo
ZW5hYmxlKHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgncmVx
dWVzdCcpO1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmFzeW5j
KSB0aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlzLm9wdGlvbnMudGltZW91
dCkgdGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9wdGlvbnMudGltZW91dCwg
dGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xu
XHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnJ1bm5pbmcgPSBm
YWxzZTtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFib3J0KCk7XG5cdFx0aWYg
KHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVs
ZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0
eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRz
dGFydCA9IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRc
dHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnY2Fu
Y2VsJywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIG1l
dGhvZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdo
ZWFkJywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFUQ0gnLCAnSEVBRCddLmVh
Y2goZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0gZnVuY3Rpb24oZGF0YSl7
XG5cdFx0dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9kXG5cdFx0fTtcblx0XHRp
ZiAoZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0cmV0dXJuIHRoaXMuc2Vu
ZChvYmplY3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG5F
bGVtZW50LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xu
XHRcdHZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtcblx0XHRzZW5kLnNldE9w
dGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcpO1xuXHRcdGlmICghc2Vu
ZCl7XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRkYXRhOiB0aGlzLCBsaW5r
OiAnY2FuY2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwgJ3Bvc3QnLCB1cmw6IHRo
aXMuZ2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdzZW5kJywgc2Vu
ZCk7XG5cdFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVt
ZW50KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBzZW5kZXIgPSB0aGlzLmdl
dCgnc2VuZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8fCBzZW5k
ZXIub3B0aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtc
blxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3JpcHRpb246IEV4dGVuZHMg
dGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGludGVy
YWN0aW5nIHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkhU
TUxcblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6
IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFsc2UsXG5cdFx0YXBwZW5k
OiBmYWxzZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0ZXI6IGZhbHNlLFxuXHRc
dGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0
ZXh0L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtc
blx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNl
O1xuXG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKHNjcmlw
dCl7XG5cdFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xuXHRcdH0pO1xuXG5cdFx0
dmFyIG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5dKj4oW1xcc1xcU10qPyk8
XFwvYm9keT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1sID0gbWF0Y2hbMV07XG5c
dFx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRt
bCk7XG5cblx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVzO1xuXHRcdHJlc3BvbnNl
LmVsZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRlciB8fCAnKicpO1xuXG5c
dFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVzcG9uc2UuZWxlbWVudHM7
XG5cdFx0aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRhdGUgPSBkb2N1bWVudC5p
ZChvcHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgdXBk
YXRlLmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2UgdXBkYXRlLnNldCgnaHRt
bCcsIHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5hcHBlbmQpe1xuXHRc
dFx0dmFyIGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5kKTtcblx0XHRcdGlmIChv
cHRpb25zLmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgpLmluamVjdChhcHBlbmQp
O1xuXHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJlbigpKTtcblx0XHR9XG5c
dFx0aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhyZXNwb25zZS5qYXZhc2Ny
aXB0KTtcblxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUsIHJlc3BvbnNlLmVsZW1l
bnRzLCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtcblx0XHR0aGlzLnJlc29s
dmUoe3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25zZS5lbGVtZW50cywgaHRt
bDogcmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2YXNjcmlwdH0pO1xuXHR9
XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9u
KG9wdGlvbnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQnKS5jYW5jZWwoKTtcblx0
XHRsb2FkLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9hZCcpO1xu
XHRcdGlmICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3QuSFRNTCh7ZGF0YTogdGhp
cywgbGluazogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAnZ2V0J30pO1xuXHRcdFx0
dGhpcy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gbG9hZDtcblx0fVxu
XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVuY3Rpb24oKXtcblx0XHR0
aGlzLmdldCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMsIHtkYXRhOiBUeXBlLmlz
T2JqZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlvbjogSlNPTiBlbmNvZGVy
IGFuZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuU2VlQWxzbzog
PGh0dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIE51bWJl
ciwgRnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9cblxuaWYgKHR5cGVvZiBK
U09OID09ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdcXFxcdCcsICdcXG4nOiAn
XFxcXG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdcIicgOiAnXFxcXFwiJywg
J1xcXFwnOiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0aW9uKGNocil7XG5cdHJl
dHVybiBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBjaHIuY2hhckNvZGVBdCgw
KS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFsaWRhdGUgPSBmdW5jdGlv
bihzdHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXCg/OltcIlxcXFxcXC9i
Zm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1wiW15c
IlxcXFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVd
WytcXC1dP1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2UoLyg/Ol58OnwsKSg/Olxc
cypcXFspKy9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxzXSokLykudGVzdChzdHJp
bmcpO1xufTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/IGZ1bmN0aW9uKG9iail7
XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0aW9uKG9iail7XG5cdGlm
IChvYmogJiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xuXG5cdHN3aXRjaCAodHlw
ZU9mKG9iaikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJ1wiJyArIG9iai5y
ZXBsYWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAnXCInO1xuXHRcdGNhc2Ug
J2FycmF5Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04uZW5jb2RlKS5jbGVhbigp
ICsgJ10nO1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxuXHRcdFx0dmFyIHN0cmlu
ZyA9IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0
XHRcdFx0dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0XHRcdGlmIChqc29uKSBz
dHJpbmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7XG5cdFx0XHR9KTtcblx0
XHRcdHJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAnbnVtYmVyJzogY2FzZSAn
Ym9vbGVhbic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxsJzogcmV0dXJuICdudWxs
Jztcblx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1cmUgPSB0cnVlO1xuXG5c
bkpTT04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xuXHRpZiAoIXN0cmluZyB8
fCB0eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG5cblx0aWYgKHNlY3Vy
ZSA9PSBudWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNlY3VyZSl7XG5cdFx0aWYg
KEpTT04ucGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5cdFx0aWYgKCFKU09OLnZh
bGlkYXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3VsZCBub3QgZGVjb2RlIHRo
ZSBpbnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBzZWN1cmUu
Jyk7XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAnKScpO1xufTtcblxufSko
KTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVzY3JpcHRpb246IEV4dGVu
ZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNl
bmRpbmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkpT
T05cblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6
IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjogZnVuY3Rpb24odGV4dCwg
ZXJyb3Ipe30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5j
dGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0XHRPYmplY3QuYXBw
ZW5kKHRoaXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxc
blx0XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxcblxuXHRzdWNjZXNzOiBm
dW5jdGlvbih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xuXHRcdFx0anNvbiA9IHRo
aXMucmVzcG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMub3B0aW9ucy5zZWN1cmUp
O1xuXHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdlcnJvcicsIFt0
ZXh0LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoanNvbiA9PSBudWxs
KXtcblx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9uU3Vj
Y2Vzcyhqc29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNvbjoganNvbiwgdGV4dDog
dGV4dH0pO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBDb29raWVcblxu
ZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIGRlbGV0aW5nIGJy
b3dzZXIgQ29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6
XG4gIC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVsIEtvY2ggKGh0dHA6Ly9x
dWlya3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJvd3Nlcl1cblxucHJvdmlk
ZXM6IENvb2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcgQ2xhc3Moe1xuXG5cdElt
cGxlbWVudHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBhdGg6ICcvJyxcblx0XHRk
b21haW46IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRzZWN1cmU6IGZhbHNlLFxu
XHRcdGRvY3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0aHR0cE9ubHk6
IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0
XHR0aGlzLmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5c
blx0d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmVuY29kZSkg
dmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMu
ZG9tYWluKSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9ucy5kb21haW47XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScgKyB0aGlzLm9wdGlvbnMu
cGF0aDtcblx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0XHRcdHZhciBkYXRlID0g
bmV3IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHRoaXMub3B0
aW9ucy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRcdFx0dmFsdWUgKz0gJzsg
ZXhwaXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vcHRp
b25zLnNlY3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAodGhpcy5vcHRpb25zLmh0
dHBPbmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5vcHRpb25zLmRvY3VtZW50
LmNvb2tpZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZG9j
dW1lbnQuY29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMua2V5LmVzY2FwZVJlZ0V4
cCgpICsgJz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBkZWNvZGVVUklDb21wb25l
bnQodmFsdWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRc
dG5ldyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7ZHVy
YXRpb246IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
Q29va2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9ucyl7XG5cdHJldHVybiBu
ZXcgQ29va2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtcblxuQ29va2llLnJlYWQg
PSBmdW5jdGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkpLnJlYWQoKTtcbn07XG5c
bkNvb2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBD
b29raWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxuLS0tXG5cbm5hbWU6IERP
TVJlYWR5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9tIGV2ZW50IGRvbXJlYWR5
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtCcm93c2VyLCBF
bGVtZW50LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJlYWR5LCBEb21SZWFkeV1c
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7XG5cbnZhciByZWFkeSxc
blx0bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxcblx0dGltZXIsXG5cdHRl
c3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbnZhciBkb21yZWFk
eSA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghcmVhZHkpe1xu
XHRcdEJyb3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRvY3VtZW50LnJlbW92ZUxp
c3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92ZUxpc3RlbmVyKCdyZWFk
eXN0YXRlY2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVFdmVudCgnZG9tcmVhZHkn
KTtcblx0XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9XG5cdC8vIGNsZWFudXAg
c2NvcGUgdmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVtZW50ID0gbnVsbDtcbn07
XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkgPSBjaGVja3MubGVuZ3Ro
OyBpLS07KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7XG5cdFx0cmV0dXJuIHRy
dWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwgPSBmdW5jdGlvbigpe1xu
XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRpbWVyID0gc2V0VGltZW91
dChwb2xsLCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcignRE9NQ29udGVudExvYWRl
ZCcsIGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xsIHRlY2huaXF1ZSBieSBE
aWVnbyBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC9c
bi8vIHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhlIERPTSBpcyBub3QgcmVh
ZHksIG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdvcmtzID0gZnVuY3Rpb24o
KXtcblx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xuXHRcdHJldHVybiB0cnVl
O1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4vLyBJZiBkb1Njcm9sbCB3
b3JrcyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWluZSBkb21yZWFkeVxuLy8g
ICBlLmcuIGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Nyb2xsICYmICFkb1Njcm9s
bFdvcmtzKCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtcblx0c2hvdWxkUG9sbCA9
IHRydWU7XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUpIGNoZWNr
cy5wdXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGU7XG5c
dHJldHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7XG59KTtc
blxuaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1bWVudC5hZGRMaXN0
ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hvdWxkUG9sbCA9IHRydWU7
XG5cbmlmIChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0g
e1xuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkgZm4uY2FsbCh0aGlzKTtc
blx0fVxufTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmlyZXMgYmVmb3JlIGxvYWRc
bkVsZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxcblx0b25BZGQ6IGZ1bmN0
aW9uKGZuKXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93KSBmbi5jYWxsKHRoaXMp
O1xuXHR9LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMgPT0gd2luZG93
KXtcblx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVudC5FdmVudHMubG9hZDtc
blx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRoaXMgaXMgYmFzZWQgb24g
dGhlIGN1c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xvYWQnLCBmdW5jdGlvbigp
e1xuXHRsb2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9jdW1lbnQpO1xuIgogCiAv
KioqLyB9KSwKIC8qIDQxMiAqLwpAQCAtMTEzODk0LDEzICsxMTM4OTQsMTMgQEAgbW9kdWxlLmV4
cG9ydHMgPSAiLypqc2hpbnQgcXVvdG1hcms6IGZhbAogLyogNDIwICovCiAvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8vIGxpYnMvanF1ZXJ5
L2pxdWVyeS5kLnRzXG4vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNy
b3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5MaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5
IG5vdCB1c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5USElTIENPREUgSVMgUFJPVklERUQgKkFT
IElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG5LSU5E
LCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9O
IEFOWSBJTVBMSUVEXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdF
TUVOVC5cblxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4vLyBUeXBpbmcgZm9yIHRoZSBq
UXVlcnkgbGlicmFyeSwgdmVyc2lvbiAxLjEwLnggLyAyLjAueFxuLy8gUHJvamVjdDogaHR0cDov
L2pxdWVyeS5jb20vXG4vLyBEZWZpbml0aW9ucyBieTogQm9yaXMgWWFua292IDxodHRwczovL2dp
dGh1Yi5jb20vYm9yaXN5YW5rb3YvPiwgQ2hyaXN0aWFuIEhvZmZtZWlzdGVyIDxodHRwczovL2dp
dGh1Yi5jb20vY2hvZmZtZWlzdGVyPiwgU3RldmUgRmVudG9uLCBEaXVsbGVpIEdvbWVzIDxodHRw
czovL2dpdGh1Yi5jb20vRGl1bGxlaT4sIFRhc3MgSWxpb3BvdWxvcyA8aHR0cHM6Ly9naXRodWIu
Y29tL3Rhc29pbGk+LCBKYXNvbiBTd2VhcmluZ2VuLCBTZWFuIEhpbGwgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9zZWFuc2tpPiwgR3V1cyBHb29zc2VucyA8aHR0cHM6Ly9naXRodWIuY29tL0d1dXo+LCBL
ZWxseSBTdW1tZXJsaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9rc3VtbWVybGluPiwgQmFzYXJhdCBB
bGkgU3llZCA8aHR0cHM6Ly9naXRodWIuY29tL2Jhc2FyYXQ+LCBOaWNob2xhcyBXb2x2ZXJzb24g
PGh0dHBzOi8vZ2l0aHViLmNvbS9ud29sdmVyc29uPiwgRGVyZWsgQ2ljZXJvbmUgPGh0dHBzOi8v
Z2l0aHViLmNvbS9kZXJla2NpY2Vyb25lPiwgQW5kcmV3IEdhc3BhciA8aHR0cHM6Ly9naXRodWIu
Y29tL0FuZHJld0dhc3Bhcj4sIEphbWVzIEhhcnJpc29uIEZpc2hlciA8aHR0cHM6Ly9naXRodWIu
Y29tL2phbWVzaGZpc2hlcj4sIFNlaWtpY2hpIEtvbmRvIDxodHRwczovL2dpdGh1Yi5jb20vc2Vp
a2ljaGk+LCBCZW5qYW1pbiBKYWNrbWFuIDxodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5qYWNr
bWFuPiwgUG91bCBTb3JlbnNlbiA8aHR0cHM6Ly9naXRodWIuY29tL3MwOTMyOTQ+LCBKb3NoIFN0
cm9ibCA8aHR0cHM6Ly9naXRodWIuY29tL0pvc2hTdHJvYmw+LCBKb2huIFJlaWxseSA8aHR0cHM6
Ly9naXRodWIuY29tL2pvaG5ueXJlaWxseS8+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRo
dWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG4vKlxuICAgIEludGVyZmFjZSBm
b3IgdGhlIEFKQVggc2V0dGluZyB0aGF0IHdpbGwgY29uZmlndXJlIHRoZSBBSkFYIHJlcXVlc3Rc
biovXG5pbnRlcmZhY2UgSlF1ZXJ5QWpheFNldHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiBUaGUg
Y29udGVudCB0eXBlIHNlbnQgaW4gdGhlIHJlcXVlc3QgaGVhZGVyIHRoYXQgdGVsbHMgdGhlIHNl
cnZlciB3aGF0IGtpbmQgb2YgcmVzcG9uc2UgaXQgd2lsbCBhY2NlcHQgaW4gcmV0dXJuLiBJZiB0
aGUgYWNjZXB0cyBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQg
dG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuXG4gICAgICovXG4gICAg
YWNjZXB0cz86IGFueTtcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBhbGwgcmVxdWVzdHMg
YXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgKGkuZS4gdGhpcyBpcyBzZXQgdG8gdHJ1ZSBieSBkZWZh
dWx0KS4gSWYgeW91IG5lZWQgc3luY2hyb25vdXMgcmVxdWVzdHMsIHNldCB0aGlzIG9wdGlvbiB0
byBmYWxzZS4gQ3Jvc3MtZG9tYWluIHJlcXVlc3RzIGFuZCBkYXRhVHlwZTogXCJqc29ucFwiIHJl
cXVlc3RzIGRvIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHN5
bmNocm9ub3VzIHJlcXVlc3RzIG1heSB0ZW1wb3JhcmlseSBsb2NrIHRoZSBicm93c2VyLCBkaXNh
YmxpbmcgYW55IGFjdGlvbnMgd2hpbGUgdGhlIHJlcXVlc3QgaXMgYWN0aXZlLiBBcyBvZiBqUXVl
cnkgMS44LCB0aGUgdXNlIG9mIGFzeW5jOiBmYWxzZSB3aXRoIGpxWEhSICgkLkRlZmVycmVkKSBp
cyBkZXByZWNhdGVkOyB5b3UgbXVzdCB1c2UgdGhlIHN1Y2Nlc3MvZXJyb3IvY29tcGxldGUgY2Fs
bGJhY2sgb3B0aW9ucyBpbnN0ZWFkIG9mIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgb2YgdGhl
IGpxWEhSIG9iamVjdCBzdWNoIGFzIGpxWEhSLmRvbmUoKSBvciB0aGUgZGVwcmVjYXRlZCBqcVhI
Ui5zdWNjZXNzKCkuXG4gICAgICovXG4gICAgYXN5bmM/OiBib29sZWFuO1xuICAgIC8qKlxuICAg
ICAqIEEgcHJlLXJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBt
b2RpZnkgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3Qg
YmVmb3JlIGl0IGlzIHNlbnQuIFVzZSB0aGlzIHRvIHNldCBjdXN0b20gaGVhZGVycywgZXRjLiBU
aGUganFYSFIgYW5kIHNldHRpbmdzIG9iamVjdHMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMuIFRo
aXMgaXMgYW4gQWpheCBFdmVudC4gUmV0dXJuaW5nIGZhbHNlIGluIHRoZSBiZWZvcmVTZW5kIGZ1
bmN0aW9uIHdpbGwgY2FuY2VsIHRoZSByZXF1ZXN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgYmVm
b3JlU2VuZCBvcHRpb24gd2lsbCBiZSBjYWxsZWQgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiBy
ZXF1ZXN0LlxuICAgICAqL1xuICAgIGJlZm9yZVNlbmQ/IChqcVhIUjogSlF1ZXJ5WEhSLCBzZXR0
aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogYW55O1xuICAgIC8qKlxuICAgICAqIElmIHNldCB0
byBmYWxzZSwgaXQgd2lsbCBmb3JjZSByZXF1ZXN0ZWQgcGFnZXMgbm90IHRvIGJlIGNhY2hlZCBi
eSB0aGUgYnJvd3Nlci4gTm90ZTogU2V0dGluZyBjYWNoZSB0byBmYWxzZSB3aWxsIG9ubHkgd29y
ayBjb3JyZWN0bHkgd2l0aCBIRUFEIGFuZCBHRVQgcmVxdWVzdHMuIEl0IHdvcmtzIGJ5IGFwcGVu
ZGluZyBcIl89e3RpbWVzdGFtcH1cIiB0byB0aGUgR0VUIHBhcmFtZXRlcnMuIFRoZSBwYXJhbWV0
ZXIgaXMgbm90IG5lZWRlZCBmb3Igb3RoZXIgdHlwZXMgb2YgcmVxdWVzdHMsIGV4Y2VwdCBpbiBJ
RTggd2hlbiBhIFBPU1QgaXMgbWFkZSB0byBhIFVSTCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmVx
dWVzdGVkIGJ5IGEgR0VULlxuICAgICAqL1xuICAgIGNhY2hlPzogYm9vbGVhbjtcbiAgICAvKipc
biAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVz
IChhZnRlciBzdWNjZXNzIGFuZCBlcnJvciBjYWxsYmFja3MgYXJlIGV4ZWN1dGVkKS4gVGhlIGZ1
bmN0aW9uIGdldHMgcGFzc2VkIHR3byBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEu
NC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGFuZCBhIHN0cmluZyBjYXRlZ29yaXppbmcgdGhl
IHN0YXR1cyBvZiB0aGUgcmVxdWVzdCAoXCJzdWNjZXNzXCIsIFwibm90bW9kaWZpZWRcIiwgXCJl
cnJvclwiLCBcInRpbWVvdXRcIiwgXCJhYm9ydFwiLCBvciBcInBhcnNlcmVycm9yXCIpLiBBcyBv
ZiBqUXVlcnkgMS41LCB0aGUgY29tcGxldGUgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9m
IGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlz
IGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgY29tcGxldGU/IChqcVhIUjogSlF1ZXJ5WEhS
LCB0ZXh0U3RhdHVzOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9m
IHN0cmluZy9yZWd1bGFyLWV4cHJlc3Npb24gcGFpcnMgdGhhdCBkZXRlcm1pbmUgaG93IGpRdWVy
eSB3aWxsIHBhcnNlIHRoZSByZXNwb25zZSwgZ2l2ZW4gaXRzIGNvbnRlbnQgdHlwZS4gKHZlcnNp
b24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb250ZW50cz86IHsgW2tleTogc3RyaW5nXTog
YW55OyB9O1xuICAgIC8vQWNjb3JkaW5nIHRvIGpRdWVyeS5hamF4IHNvdXJjZSBjb2RlLCBhamF4
J3Mgb3B0aW9uIGFjdHVhbGx5IGFsbG93cyBjb250ZW50VHlwZSB0byBzZXQgdG8gXCJmYWxzZVwi
XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZC9p
c3N1ZXMvNzQyXG4gICAgLyoqXG4gICAgICogV2hlbiBzZW5kaW5nIGRhdGEgdG8gdGhlIHNlcnZl
ciwgdXNlIHRoaXMgY29udGVudCB0eXBlLiBEZWZhdWx0IGlzIFwiYXBwbGljYXRpb24veC13d3ct
Zm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsIHdoaWNoIGlzIGZpbmUgZm9yIG1vc3Qg
Y2FzZXMuIElmIHlvdSBleHBsaWNpdGx5IHBhc3MgaW4gYSBjb250ZW50LXR5cGUgdG8gJC5hamF4
KCksIHRoZW4gaXQgaXMgYWx3YXlzIHNlbnQgdG8gdGhlIHNlcnZlciAoZXZlbiBpZiBubyBkYXRh
IGlzIHNlbnQpLiBUaGUgVzNDIFhNTEh0dHBSZXF1ZXN0IHNwZWNpZmljYXRpb24gZGljdGF0ZXMg
dGhhdCB0aGUgY2hhcnNldCBpcyBhbHdheXMgVVRGLTg7IHNwZWNpZnlpbmcgYW5vdGhlciBjaGFy
c2V0IHdpbGwgbm90IGZvcmNlIHRoZSBicm93c2VyIHRvIGNoYW5nZSB0aGUgZW5jb2RpbmcuXG4g
ICAgICovXG4gICAgY29udGVudFR5cGU/OiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhpcyBvYmpl
Y3Qgd2lsbCBiZSBtYWRlIHRoZSBjb250ZXh0IG9mIGFsbCBBamF4LXJlbGF0ZWQgY2FsbGJhY2tz
LiBCeSBkZWZhdWx0LCB0aGUgY29udGV4dCBpcyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRo
ZSBhamF4IHNldHRpbmdzIHVzZWQgaW4gdGhlIGNhbGwgKCQuYWpheFNldHRpbmdzIG1lcmdlZCB3
aXRoIHRoZSBzZXR0aW5ncyBwYXNzZWQgdG8gJC5hamF4KS5cbiAgICAgKi9cbiAgICBjb250ZXh0
PzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGFUeXBlLXRv
LWRhdGFUeXBlIGNvbnZlcnRlcnMuIEVhY2ggY29udmVydGVyJ3MgdmFsdWUgaXMgYSBmdW5jdGlv
biB0aGF0IHJldHVybnMgdGhlIHRyYW5zZm9ybWVkIHZhbHVlIG9mIHRoZSByZXNwb25zZS4gKHZl
cnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb252ZXJ0ZXJzPzogeyBba2V5OiBzdHJp
bmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogSWYgeW91IHdpc2ggdG8gZm9yY2UgYSBjcm9z
c0RvbWFpbiByZXF1ZXN0IChzdWNoIGFzIEpTT05QKSBvbiB0aGUgc2FtZSBkb21haW4sIHNldCB0
aGUgdmFsdWUgb2YgY3Jvc3NEb21haW4gdG8gdHJ1ZS4gVGhpcyBhbGxvd3MsIGZvciBleGFtcGxl
LCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbiB0byBhbm90aGVyIGRvbWFpbi4gKHZlcnNpb24gYWRk
ZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjcm9zc0RvbWFpbj86IGJvb2xlYW47XG4gICAgLyoqXG4g
ICAgICogRGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIEl0IGlzIGNvbnZlcnRlZCB0byBh
IHF1ZXJ5IHN0cmluZywgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcuIEl0J3MgYXBwZW5kZWQgdG8g
dGhlIHVybCBmb3IgR0VULXJlcXVlc3RzLiBTZWUgcHJvY2Vzc0RhdGEgb3B0aW9uIHRvIHByZXZl
bnQgdGhpcyBhdXRvbWF0aWMgcHJvY2Vzc2luZy4gT2JqZWN0IG11c3QgYmUgS2V5L1ZhbHVlIHBh
aXJzLiBJZiB2YWx1ZSBpcyBhbiBBcnJheSwgalF1ZXJ5IHNlcmlhbGl6ZXMgbXVsdGlwbGUgdmFs
dWVzIHdpdGggc2FtZSBrZXkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSB0cmFkaXRpb25hbCBz
ZXR0aW5nIChkZXNjcmliZWQgYmVsb3cpLlxuICAgICAqL1xuICAgIGRhdGE/OiBhbnk7XG4gICAg
LyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSB1c2VkIHRvIGhhbmRsZSB0aGUgcmF3IHJlc3Bv
bnNlIGRhdGEgb2YgWE1MSHR0cFJlcXVlc3QuVGhpcyBpcyBhIHByZS1maWx0ZXJpbmcgZnVuY3Rp
b24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNlLiBZb3Ugc2hvdWxkIHJldHVybiB0aGUgc2FuaXRp
emVkIGRhdGEuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1bWVudHM6IFRoZSByYXcgZGF0
YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHRoZSAnZGF0YVR5cGUnIHBhcmFtZXRlci5c
biAgICAgKi9cbiAgICBkYXRhRmlsdGVyPyAoZGF0YTogYW55LCB0eTogYW55KTogYW55O1xuICAg
IC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB5b3UncmUgZXhwZWN0aW5nIGJhY2sg
ZnJvbSB0aGUgc2VydmVyLiBJZiBub25lIGlzIHNwZWNpZmllZCwgalF1ZXJ5IHdpbGwgdHJ5IHRv
IGluZmVyIGl0IGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUgb2YgdGhlIHJlc3BvbnNlIChhbiBYTUwg
TUlNRSB0eXBlIHdpbGwgeWllbGQgWE1MLCBpbiAxLjQgSlNPTiB3aWxsIHlpZWxkIGEgSmF2YVNj
cmlwdCBvYmplY3QsIGluIDEuNCBzY3JpcHQgd2lsbCBleGVjdXRlIHRoZSBzY3JpcHQsIGFuZCBh
bnl0aGluZyBlbHNlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzdHJpbmcpLlxuICAgICAqL1xuICAg
IGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2Fs
bGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxzLiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgdGhyZWUgYXJn
dW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVj
dCwgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlcnJvciB0aGF0IG9jY3VycmVkIGFu
ZCBhbiBvcHRpb25hbCBleGNlcHRpb24gb2JqZWN0LCBpZiBvbmUgb2NjdXJyZWQuIFBvc3NpYmxl
IHZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCAoYmVzaWRlcyBudWxsKSBhcmUgXCJ0aW1l
b3V0XCIsIFwiZXJyb3JcIiwgXCJhYm9ydFwiLCBhbmQgXCJwYXJzZXJlcnJvclwiLiBXaGVuIGFu
IEhUVFAgZXJyb3Igb2NjdXJzLCBlcnJvclRocm93biByZWNlaXZlcyB0aGUgdGV4dHVhbCBwb3J0
aW9uIG9mIHRoZSBIVFRQIHN0YXR1cywgc3VjaCBhcyBcIk5vdCBGb3VuZFwiIG9yIFwiSW50ZXJu
YWwgU2VydmVyIEVycm9yLlwiIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBlcnJvciBzZXR0aW5nIGNh
biBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2Fs
bGVkIGluIHR1cm4uIE5vdGU6IFRoaXMgaGFuZGxlciBpcyBub3QgY2FsbGVkIGZvciBjcm9zcy1k
b21haW4gc2NyaXB0IGFuZCBjcm9zcy1kb21haW4gSlNPTlAgcmVxdWVzdHMuIFRoaXMgaXMgYW4g
QWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBlcnJvcj8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRT
dGF0dXM6IHN0cmluZywgZXJyb3JUaHJvdzogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAq
IFdoZXRoZXIgdG8gdHJpZ2dlciBnbG9iYWwgQWpheCBldmVudCBoYW5kbGVycyBmb3IgdGhpcyBy
ZXF1ZXN0LiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBTZXQgdG8gZmFsc2UgdG8gcHJldmVudCB0aGUg
Z2xvYmFsIGhhbmRsZXJzIGxpa2UgYWpheFN0YXJ0IG9yIGFqYXhTdG9wIGZyb20gYmVpbmcgdHJp
Z2dlcmVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdmFyaW91cyBBamF4IEV2ZW50cy5c
biAgICAgKi9cbiAgICBnbG9iYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVj
dCBvZiBhZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWUgcGFpcnMgdG8gc2VuZCBhbG9uZyB3aXRo
IHJlcXVlc3RzIHVzaW5nIHRoZSBYTUxIdHRwUmVxdWVzdCB0cmFuc3BvcnQuIFRoZSBoZWFkZXIg
WC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QgaXMgYWx3YXlzIGFkZGVkLCBidXQgaXRz
IGRlZmF1bHQgWE1MSHR0cFJlcXVlc3QgdmFsdWUgY2FuIGJlIGNoYW5nZWQgaGVyZS4gVmFsdWVz
IGluIHRoZSBoZWFkZXJzIHNldHRpbmcgY2FuIGFsc28gYmUgb3ZlcndyaXR0ZW4gZnJvbSB3aXRo
aW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24uICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICov
XG4gICAgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAq
IEFsbG93IHRoZSByZXF1ZXN0IHRvIGJlIHN1Y2Nlc3NmdWwgb25seSBpZiB0aGUgcmVzcG9uc2Ug
aGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcmVxdWVzdC4gVGhpcyBpcyBkb25lIGJ5IGNoZWNr
aW5nIHRoZSBMYXN0LU1vZGlmaWVkIGhlYWRlci4gRGVmYXVsdCB2YWx1ZSBpcyBmYWxzZSwgaWdu
b3JpbmcgdGhlIGhlYWRlci4gSW4galF1ZXJ5IDEuNCB0aGlzIHRlY2huaXF1ZSBhbHNvIGNoZWNr
cyB0aGUgJ2V0YWcnIHNwZWNpZmllZCBieSB0aGUgc2VydmVyIHRvIGNhdGNoIHVubW9kaWZpZWQg
ZGF0YS5cbiAgICAgKi9cbiAgICBpZk1vZGlmaWVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAg
KiBBbGxvdyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB0byBiZSByZWNvZ25pemVkIGFzIFwibG9j
YWwsXCIgKGUuZy4gdGhlIGZpbGVzeXN0ZW0pLCBldmVuIGlmIGpRdWVyeSBkb2VzIG5vdCByZWNv
Z25pemUgaXQgYXMgc3VjaCBieSBkZWZhdWx0LiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUg
Y3VycmVudGx5IHJlY29nbml6ZWQgYXMgbG9jYWw6IGZpbGUsICotZXh0ZW5zaW9uLCBhbmQgd2lk
Z2V0LiBJZiB0aGUgaXNMb2NhbCBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVj
b21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuICh2ZXJz
aW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBpc0xvY2FsPzogYm9vbGVhbjtcbiAgICAv
KipcbiAgICAgKiBPdmVycmlkZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBpbiBhIGpzb25w
IHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgJ2NhbGxiYWNrJyBp
biB0aGUgJ2NhbGxiYWNrPT8nIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBpbiB0aGUgdXJsLiBT
byB7anNvbnA6J29uSlNPTlBMb2FkJ30gd291bGQgcmVzdWx0IGluICdvbkpTT05QTG9hZD0/JyBw
YXNzZWQgdG8gdGhlIHNlcnZlci4gQXMgb2YgalF1ZXJ5IDEuNSwgc2V0dGluZyB0aGUganNvbnAg
b3B0aW9uIHRvIGZhbHNlIHByZXZlbnRzIGpRdWVyeSBmcm9tIGFkZGluZyB0aGUgXCI/Y2FsbGJh
Y2tcIiBzdHJpbmcgdG8gdGhlIFVSTCBvciBhdHRlbXB0aW5nIHRvIHVzZSBcIj0/XCIgZm9yIHRy
YW5zZm9ybWF0aW9uLiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgYWxzbyBleHBsaWNpdGx5IHNl
dCB0aGUganNvbnBDYWxsYmFjayBzZXR0aW5nLiBGb3IgZXhhbXBsZSwgeyBqc29ucDogZmFsc2Us
IGpzb25wQ2FsbGJhY2s6IFwiY2FsbGJhY2tOYW1lXCIgfVxuICAgICAqL1xuICAgIGpzb25wPzog
c3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5h
bWUgZm9yIGEgSlNPTlAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBv
ZiB0aGUgcmFuZG9tIG5hbWUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgalF1ZXJ5LiBJdCBp
cyBwcmVmZXJhYmxlIHRvIGxldCBqUXVlcnkgZ2VuZXJhdGUgYSB1bmlxdWUgbmFtZSBhcyBpdCds
bCBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2UgdGhlIHJlcXVlc3RzIGFuZCBwcm92aWRlIGNhbGxi
YWNrcyBhbmQgZXJyb3IgaGFuZGxpbmcuIFlvdSBtYXkgd2FudCB0byBzcGVjaWZ5IHRoZSBjYWxs
YmFjayB3aGVuIHlvdSB3YW50IHRvIGVuYWJsZSBiZXR0ZXIgYnJvd3NlciBjYWNoaW5nIG9mIEdF
VCByZXF1ZXN0cy4gQXMgb2YgalF1ZXJ5IDEuNSwgeW91IGNhbiBhbHNvIHVzZSBhIGZ1bmN0aW9u
IGZvciB0aGlzIHNldHRpbmcsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIG9mIGpzb25wQ2FsbGJh
Y2sgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbi5cbiAgICAgKi9c
biAgICBqc29ucENhbGxiYWNrPzogYW55O1xuICAgIC8qKlxuICAgICAqIEEgbWltZSB0eXBlIHRv
IG92ZXJyaWRlIHRoZSBYSFIgbWltZSB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAg
ICovXG4gICAgbWltZVR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBwYXNzd29yZCB0
byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nl
c3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmlu
ZztcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkYXRhIHBhc3NlZCBpbiB0byB0aGUgZGF0
YSBvcHRpb24gYXMgYW4gb2JqZWN0ICh0ZWNobmljYWxseSwgYW55dGhpbmcgb3RoZXIgdGhhbiBh
IHN0cmluZykgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIHRyYW5zZm9ybWVkIGludG8gYSBxdWVyeSBz
dHJpbmcsIGZpdHRpbmcgdG8gdGhlIGRlZmF1bHQgY29udGVudC10eXBlIFwiYXBwbGljYXRpb24v
eC13d3ctZm9ybS11cmxlbmNvZGVkXCIuIElmIHlvdSB3YW50IHRvIHNlbmQgYSBET01Eb2N1bWVu
dCwgb3Igb3RoZXIgbm9uLXByb2Nlc3NlZCBkYXRhLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2Uu
XG4gICAgICovXG4gICAgcHJvY2Vzc0RhdGE/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE9u
bHkgYXBwbGllcyB3aGVuIHRoZSBcInNjcmlwdFwiIHRyYW5zcG9ydCBpcyB1c2VkIChlLmcuLCBj
cm9zcy1kb21haW4gcmVxdWVzdHMgd2l0aCBcImpzb25wXCIgb3IgXCJzY3JpcHRcIiBkYXRhVHlw
ZSBhbmQgXCJHRVRcIiB0eXBlKS4gU2V0cyB0aGUgY2hhcnNldCBhdHRyaWJ1dGUgb24gdGhlIHNj
cmlwdCB0YWcgdXNlZCBpbiB0aGUgcmVxdWVzdC4gVXNlZCB3aGVuIHRoZSBjaGFyYWN0ZXIgc2V0
IG9uIHRoZSBsb2NhbCBwYWdlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgb25lIG9uIHRoZSByZW1v
dGUgc2NyaXB0LlxuICAgICAqL1xuICAgIHNjcmlwdENoYXJzZXQ/OiBzdHJpbmc7XG4gICAgLyoq
XG4gICAgICogQW4gb2JqZWN0IG9mIG51bWVyaWMgSFRUUCBjb2RlcyBhbmQgZnVuY3Rpb25zIHRv
IGJlIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgY29kZS4g
ZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgc3RhdHVzIGNvZGUgZnVuY3Rpb25zIHRh
a2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgc3VjY2VzcyBjYWxsYmFjazsgaWYgaXQgcmVz
dWx0cyBpbiBhbiBlcnJvciAoaW5jbHVkaW5nIDN4eCByZWRpcmVjdCksIHRoZXkgdGFrZSB0aGUg
c2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBlcnJvciBjYWxsYmFjay4gKHZlcnNpb24gYWRkZWQ6IDEu
NSlcbiAgICAgKi9cbiAgICBzdGF0dXNDb2RlPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4g
ICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3Qgc3Vj
Y2VlZHMuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0aHJlZSBhcmd1bWVudHM6IFRoZSBkYXRh
IHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgZGF0
YVR5cGUgcGFyYW1ldGVyOyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBzdGF0dXM7IGFuZCB0aGUg
anFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdC4gQXMgb2YgalF1
ZXJ5IDEuNSwgdGhlIHN1Y2Nlc3Mgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0
aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFq
YXggRXZlbnQuXG4gICAgICovXG4gICAgc3VjY2Vzcz8gKGRhdGE6IGFueSwgdGV4dFN0YXR1czog
c3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKTogYW55O1xuICAgIC8qKlxuICAgICAqIFNldCBhIHRp
bWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHRoZSByZXF1ZXN0LiBUaGlzIHdpbGwgb3ZlcnJp
ZGUgYW55IGdsb2JhbCB0aW1lb3V0IHNldCB3aXRoICQuYWpheFNldHVwKCkuIFRoZSB0aW1lb3V0
IHBlcmlvZCBzdGFydHMgYXQgdGhlIHBvaW50IHRoZSAkLmFqYXggY2FsbCBpcyBtYWRlOyBpZiBz
ZXZlcmFsIG90aGVyIHJlcXVlc3RzIGFyZSBpbiBwcm9ncmVzcyBhbmQgdGhlIGJyb3dzZXIgaGFz
IG5vIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSwgaXQgaXMgcG9zc2libGUgZm9yIGEgcmVxdWVzdCB0
byB0aW1lIG91dCBiZWZvcmUgaXQgY2FuIGJlIHNlbnQuIEluIGpRdWVyeSAxLjQueCBhbmQgYmVs
b3csIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2lsbCBiZSBpbiBhbiBpbnZhbGlkIHN0YXRl
IGlmIHRoZSByZXF1ZXN0IHRpbWVzIG91dDsgYWNjZXNzaW5nIGFueSBvYmplY3QgbWVtYmVycyBt
YXkgdGhyb3cgYW4gZXhjZXB0aW9uLiBJbiBGaXJlZm94IDMuMCsgb25seSwgc2NyaXB0IGFuZCBK
U09OUCByZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2VsbGVkIGJ5IGEgdGltZW91dDsgdGhlIHNjcmlw
dCB3aWxsIHJ1biBldmVuIGlmIGl0IGFycml2ZXMgYWZ0ZXIgdGhlIHRpbWVvdXQgcGVyaW9kLlxu
ICAgICAqL1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMg
dG8gdHJ1ZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHRyYWRpdGlvbmFsIHN0eWxlIG9mIHBhcmFt
IHNlcmlhbGl6YXRpb24uXG4gICAgICovXG4gICAgdHJhZGl0aW9uYWw/OiBib29sZWFuO1xuICAg
IC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHJlcXVlc3QgdG8gbWFrZSAoXCJQT1NUXCIgb3IgXCJH
RVRcIiksIGRlZmF1bHQgaXMgXCJHRVRcIi4gTm90ZTogT3RoZXIgSFRUUCByZXF1ZXN0IG1ldGhv
ZHMsIHN1Y2ggYXMgUFVUIGFuZCBERUxFVEUsIGNhbiBhbHNvIGJlIHVzZWQgaGVyZSwgYnV0IHRo
ZXkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzLlxuICAgICAqL1xuICAgIHR5cGU/
OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRv
IHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICovXG4gICAgdXJsPzogc3RyaW5nO1xu
ICAgIC8qKlxuICAgICAqIEEgdXNlcm5hbWUgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0
IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4g
ICAgICovXG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sg
Zm9yIGNyZWF0aW5nIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QuIERlZmF1bHRzIHRvIHRoZSBB
Y3RpdmVYT2JqZWN0IHdoZW4gYXZhaWxhYmxlIChJRSksIHRoZSBYTUxIdHRwUmVxdWVzdCBvdGhl
cndpc2UuIE92ZXJyaWRlIHRvIHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb24gZm9yIFhN
TEh0dHBSZXF1ZXN0IG9yIGVuaGFuY2VtZW50cyB0byB0aGUgZmFjdG9yeS5cbiAgICAgKi9cbiAg
ICB4aHI/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGZpZWxkTmFtZS1maWVs
ZFZhbHVlIHBhaXJzIHRvIHNldCBvbiB0aGUgbmF0aXZlIFhIUiBvYmplY3QuIEZvciBleGFtcGxl
LCB5b3UgY2FuIHVzZSBpdCB0byBzZXQgd2l0aENyZWRlbnRpYWxzIHRvIHRydWUgZm9yIGNyb3Nz
LWRvbWFpbiByZXF1ZXN0cyBpZiBuZWVkZWQuIEluIGpRdWVyeSAxLjUsIHRoZSB3aXRoQ3JlZGVu
dGlhbHMgcHJvcGVydHkgd2FzIG5vdCBwcm9wYWdhdGVkIHRvIHRoZSBuYXRpdmUgWEhSIGFuZCB0
aHVzIENPUlMgcmVxdWVzdHMgcmVxdWlyaW5nIGl0IHdvdWxkIGlnbm9yZSB0aGlzIGZsYWcuIEZv
ciB0aGlzIHJlYXNvbiwgd2UgcmVjb21tZW5kIHVzaW5nIGpRdWVyeSAxLjUuMSsgc2hvdWxkIHlv
dSByZXF1aXJlIHRoZSB1c2Ugb2YgaXQuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9c
biAgICB4aHJGaWVsZHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbn1cblxuLypcbiAgICBJ
bnRlcmZhY2UgZm9yIHRoZSBqcVhIUiBvYmplY3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5WEhSIGV4
dGVuZHMgWE1MSHR0cFJlcXVlc3QsIEpRdWVyeVByb21pc2U8YW55PiB7XG4gICAgb3ZlcnJpZGVN
aW1lVHlwZShtaW1lVHlwZTogc3RyaW5nKTogYW55O1xuICAgIGFib3J0KHN0YXR1c1RleHQ/OiBz
dHJpbmcpOiB2b2lkO1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBjYWxs
YmFja1xuKi9cbmludGVyZmFjZSBKUXVlcnlDYWxsYmFjayB7XG4gICAgYWRkKC4uLmNhbGxiYWNr
czogYW55W10pOiBhbnk7XG4gICAgZGlzYWJsZSgpOiBhbnk7XG4gICAgZW1wdHkoKTogYW55O1xu
ICAgIGZpcmUoLi4uYXJndW1lbnRzOiBhbnlbXSk6IGFueTtcbiAgICBmaXJlZCgpOiBib29sZWFu
O1xuICAgIGZpcmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAg
aGFzKGNhbGxiYWNrOiBhbnkpOiBib29sZWFuO1xuICAgIGxvY2soKTogYW55O1xuICAgIGxvY2tl
ZCgpOiBib29sZWFuO1xuICAgIHJlbW92ZSguLi5jYWxsYmFja3M6IGFueVtdKTogYW55O1xufVxu
XG4vKlxuICAgIEFsbG93cyBqUXVlcnkgUHJvbWlzZXMgdG8gaW50ZXJvcCB3aXRoIG5vbi1qUXVl
cnkgcHJvbWlzZXNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD4ge1xuICAg
IHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjog
YW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZp
bGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJl
YXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihv
bkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhl
bjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9u
UmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVy
eSBwcm9taXNlLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlQcm9taXNl
PFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cygu
Li5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5k
b25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENh
bGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVz
c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdh
eXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVD
YWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxs
YmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVz
c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgLy8gRGVwcmVjYXRl
ZCAtIGdpdmVuIG5vIHR5cGluZ3NcbiAgICBwaXBlKGRvbmVGaWx0ZXI/OiAoeDogYW55KSA9PiBh
bnksIGZhaWxGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIHByb2dyZXNzRmlsdGVyPzogKHg6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6
ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9u
UHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNl
PFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVz
cz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVh
c29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4u
LnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVu
PFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25S
ZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBv
blByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlz
ZTxVPjtcblxuICAgIC8vIEJlY2F1c2UgSlF1ZXJ5IFByb21pc2VzIFN1Y2tcbiAgICB0aGVuPFU+
KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNv
bnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4g
YW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVl
czogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFz
b25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+
IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1
ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9
PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFs
dWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJl
YXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICgu
Li5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG59XG5cbi8q
XG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGRlZmVycmVkLCBwYXJ0IG9mIGNhbGxiYWNr
c1xuKi9cbmludGVyZmFjZSBKUXVlcnlEZWZlcnJlZDxUPiBleHRlbmRzIEpRdWVyeVByb21pc2U8
VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4u
LmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5k
b25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxD
YWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dy
ZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIGFsd2F5cyguLi5h
bHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5k
b25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFp
bENhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5w
cm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIG5vdGlm
eSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIG5vdGlmeVdpdGgoY29u
dGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVq
ZWN0KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVqZWN0V2l0aChj
b250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBy
ZXNvbHZlKHZhbDogVCk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlc29sdmUoLi4uYXJnczog
YW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlV2l0aChjb250ZXh0OiBhbnks
IC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgc3RhdGUoKTogc3RyaW5n
O1xuXG4gICAgcHJvbWlzZSh0YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9taXNlPFQ+O1xufVxuXG4v
KlxuICAgIEludGVyZmFjZSBvZiB0aGUgSlF1ZXJ5IGV4dGVuc2lvbiBvZiB0aGUgVzNDIGV2ZW50
IG9iamVjdFxuKi9cblxuaW50ZXJmYWNlIEJhc2VKUXVlcnlFdmVudE9iamVjdCBleHRlbmRzIEV2
ZW50IHtcbiAgICBkYXRhOiBhbnk7XG4gICAgZGVsZWdhdGVUYXJnZXQ6IEVsZW1lbnQ7XG4gICAg
aXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47XG4gICAgaXNJbW1lZGlhdGVQcm9wb2dhdGlv
blN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFu
O1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHByZXZlbnREZWZhdWx0KCk6IGFueTtcbiAg
ICByZWxhdGVkVGFyZ2V0OiBFbGVtZW50O1xuICAgIHJlc3VsdDogYW55O1xuICAgIHN0b3BJbW1l
ZGlhdGVQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbigpOiB2b2lkO1xu
ICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICB3aGljaDogbnVtYmVy
O1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlJbnB1dEV2ZW50
T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBhbHRLZXk6IGJvb2xl
YW47XG4gICAgY3RybEtleTogYm9vbGVhbjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xuICAgIHNo
aWZ0S2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCBl
eHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAgIGJ1dHRvbjogbnVtYmVyO1xuICAg
IGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVt
YmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZ
OiBudW1iZXI7XG4gICAgc2NyZWVuWDogbnVtYmVyO1xuICAgIHNjcmVlblk6IG51bWJlcjtcbn1c
blxuaW50ZXJmYWNlIEpRdWVyeUtleUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVu
dE9iamVjdCB7XG4gICAgY2hhcjogYW55O1xuICAgIGNoYXJDb2RlOiBudW1iZXI7XG4gICAga2V5
OiBhbnk7XG4gICAga2V5Q29kZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UG9wU3Rh
dGVFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgb3JpZ2lu
YWxFdmVudDogUG9wU3RhdGVFdmVudDtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUV2ZW50T2JqZWN0
IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0LCBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0LCBK
UXVlcnlNb3VzZUV2ZW50T2JqZWN0LCBKUXVlcnlLZXlFdmVudE9iamVjdCwgSlF1ZXJ5UG9wU3Rh
dGVFdmVudE9iamVjdCB7XG59XG5cbi8qXG4gICAgQ29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzIG9m
IHRoZSBjdXJyZW50IGJyb3dzZXJcbiovXG5cbmludGVyZmFjZSBKUXVlcnlTdXBwb3J0IHtcbiAg
ICBhamF4PzogYm9vbGVhbjtcbiAgICBib3hNb2RlbD86IGJvb2xlYW47XG4gICAgY2hhbmdlQnVi
Ymxlcz86IGJvb2xlYW47XG4gICAgY2hlY2tDbG9uZT86IGJvb2xlYW47XG4gICAgY2hlY2tPbj86
IGJvb2xlYW47XG4gICAgY29ycz86IGJvb2xlYW47XG4gICAgY3NzRmxvYXQ/OiBib29sZWFuO1xu
ICAgIGhyZWZOb3JtYWxpemVkPzogYm9vbGVhbjtcbiAgICBodG1sU2VyaWFsaXplPzogYm9vbGVh
bjtcbiAgICBsZWFkaW5nV2hpdGVzcGFjZT86IGJvb2xlYW47XG4gICAgbm9DbG9uZUNoZWNrZWQ/
OiBib29sZWFuO1xuICAgIG5vQ2xvbmVFdmVudD86IGJvb2xlYW47XG4gICAgb3BhY2l0eT86IGJv
b2xlYW47XG4gICAgb3B0RGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIG9wdFNlbGVjdGVkPzogYm9v
bGVhbjtcbiAgICBzY3JpcHRFdmFsPyAoKTogYm9vbGVhbjtcbiAgICBzdHlsZT86IGJvb2xlYW47
XG4gICAgc3VibWl0QnViYmxlcz86IGJvb2xlYW47XG4gICAgdGJvZHk/OiBib29sZWFuO1xufVxu
XG5pbnRlcmZhY2UgSlF1ZXJ5UGFyYW0ge1xuICAgIChvYmo6IGFueSk6IHN0cmluZztcbiAgICAo
b2JqOiBhbnksIHRyYWRpdGlvbmFsOiBib29sZWFuKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRo
ZSBpbnRlcmZhY2UgdXNlZCB0byBjb25zdHJ1Y3QgalF1ZXJ5IGV2ZW50cyAod2l0aCAkLkV2ZW50
KS4gSXQgaXNcbiAqIGRlZmluZWQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGlubGluZSBpbiBKUXVl
cnlTdGF0aWMgdG8gYWxsb3dcbiAqIG92ZXJyaWRpbmcgdGhlIGNvbnN0cnVjdGlvbiBmdW5jdGlv
biB3aXRoIHNwZWNpZmljIHN0cmluZ3NcbiAqIHJldHVybmluZyBzcGVjaWZpYyBldmVudCBvYmpl
Y3RzLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvciB7XG4gICAgKG5hbWU6
IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG4gICAg
bmV3IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2Jq
ZWN0O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBzcGVjaWZ5IGVhc2luZyBm
dW5jdGlvbnMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFYXNpbmcge1xuICAgIGxpbmVhcihwOiBu
dW1iZXIpOiBudW1iZXI7XG4gICAgc3dpbmcocDogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vKlxu
ICAgIFN0YXRpYyBtZW1iZXJzIG9mIGpRdWVyeSAodGhvc2Ugb24gJCBhbmQgalF1ZXJ5IHRoZW1z
ZWx2ZXMpXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVN0YXRpYyB7XG5cbiAgICAvKipcbiAgICAgKiBQ
ZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3Vy
ZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQg
Y2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4gICAgICovXG4g
ICAgYWpheChzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuICAgIC8q
KlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3
aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBv
ZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNl
dHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24g
d2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgodXJsOiBzdHJpbmcsIHNldHRp
bmdzPzogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICog
SGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVm
b3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5
ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFUeXBlcyBBbiBvcHRpb25hbCBz
dHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZGF0YVR5cGVzXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3Ig
ZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihkYXRhVHlw
ZXM6IHN0cmluZywgaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4
U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG4gICAgLyoqXG4gICAg
ICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMg
YmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2Vk
IGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRv
IHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4g
ICAgYWpheFByZWZpbHRlcihoYW5kbGVyOiAob3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVy
eUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogdm9pZDtcblxuICAgIGFq
YXhTZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzO1xuXG4gICAgIC8qKlxuICAgICAgKiBTZXQg
ZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLiBJdHMgdXNlIGlzIG5vdCBy
ZWNvbW1lbmRlZC5cbiAgICAgICpcbiAgICAgICogQHBhcmFtIG9wdGlvbnMgQSBzZXQgb2Yga2V5
L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBkZWZhdWx0IEFqYXggcmVxdWVzdC4gQWxs
IG9wdGlvbnMgYXJlIG9wdGlvbmFsLlxuICAgICAgKi9cbiAgICBhamF4U2V0dXAob3B0aW9uczog
SlF1ZXJ5QWpheFNldHRpbmdzKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVl
c3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRo
YXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRh
dGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0
OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAq
L1xuICAgIGdldCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6
IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpR
dWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5n
IGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICog
QHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUg
c2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAg
ICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNl
cnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBo
dG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nl
c3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+
IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9h
ZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9y
IHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAg
ICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBp
ZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUg
b2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1
ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDog
c3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czog
c3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1
ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1
cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNl
bnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4
ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJs
OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhS
OiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpT
T04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3Qu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0
byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4g
b2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1
ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBl
eGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVy
bDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1
czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoq
XG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBH
RVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250
YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFy
YW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2
ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1
bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICov
XG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRh
OiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1
ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgYSBKYXZhU2NyaXB0IGZpbGUgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdCwgdGhlbiBleGVjdXRlIGl0LlxuICAgICAq
XG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2gg
dGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1
bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICov
XG4gICAgZ2V0U2NyaXB0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKHNjcmlwdDogc3RyaW5nLCB0
ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtc
blxuICAgIHBhcmFtOiBKUXVlcnlQYXJhbTtcblxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRh
VHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBA
cGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIu
IERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRt
bCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnks
IHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86
IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
dXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBz
ZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlz
IHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNj
ZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBz
dWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVs
bCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEg
ZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1s
LCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJp
bmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJp
bmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlY
SFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhU
VFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250
YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFy
YW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2
ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1
bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVk
IGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxu
ICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhl
IHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0
ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5n
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4g
ICAgICogQSBtdWx0aS1wdXJwb3NlIGNhbGxiYWNrcyBsaXN0IG9iamVjdCB0aGF0IHByb3ZpZGVz
IGEgcG93ZXJmdWwgd2F5IHRvIG1hbmFnZSBjYWxsYmFjayBsaXN0cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBmbGFncyBBbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBmbGFncyB0
aGF0IGNoYW5nZSBob3cgdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcy5cbiAgICAgKi9cbiAgICBD
YWxsYmFja3MoZmxhZ3M/OiBzdHJpbmcpOiBKUXVlcnlDYWxsYmFjaztcblxuICAgIC8qKlxuICAg
ICAqIEhvbGRzIG9yIHJlbGVhc2VzIHRoZSBleGVjdXRpb24gb2YgalF1ZXJ5J3MgcmVhZHkgZXZl
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG9sZCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVh
ZHkgaG9sZCBpcyBiZWluZyByZXF1ZXN0ZWQgb3IgcmVsZWFzZWRcbiAgICAgKi9cbiAgICBob2xk
UmVhZHkoaG9sZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAoc2VsZWN0b3I6IHN0cmluZywgY29u
dGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudDogRWxlbWVudCk6IEpRdWVyeTtcbiAg
ICAob2JqZWN0OiB7fSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBK
UXVlcnk7XG4gICAgKG9iamVjdDogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIChmdW5jOiBGdW5jdGlv
bik6IEpRdWVyeTtcbiAgICAoYXJyYXk6IGFueVtdKTogSlF1ZXJ5O1xuICAgICgpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBSZWxpbnF1aXNoIGpRdWVyeSdzIGNvbnRyb2wgb2YgdGhlICQg
dmFyaWFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVtb3ZlQWxsIEEgQm9vbGVhbiBpbmRp
Y2F0aW5nIHdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBqUXVlcnkgdmFyaWFibGVzIGZyb20gdGhlIGds
b2JhbCBzY29wZSAoaW5jbHVkaW5nIGpRdWVyeSBpdHNlbGYpLlxuICAgICAqL1xuICAgIG5vQ29u
ZmxpY3QocmVtb3ZlQWxsPzogYm9vbGVhbik6IE9iamVjdDtcblxuICAgIC8qKlxuICAgICAqIFBy
b3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBv
ciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBh
c3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUg
b3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4g
ICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+
W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRv
IGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMs
IHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZl
bnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJl
ZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hl
bjxUPiguLi5kZWZlcnJlZHM6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgLyoqXG4gICAg
ICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24g
b25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVz
ZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRz
IE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0
cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogYW55W10pOiBKUXVlcnlQcm9t
aXNlPFQ+O1xuXG4gICAgY3NzSG9va3M6IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIGNz
c051bWJlcjogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3RvcmUgYXJiaXRyYXJ5IGRhdGEgYXNz
b2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4gUmV0dXJucyB0aGUgdmFsdWUgdGhh
dCB3YXMgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50
IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcg
bmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhl
IG5ldyBkYXRhIHZhbHVlLlxuICAgICAqL1xuICAgIGRhdGE8VD4oZWxlbWVudDogRWxlbWVudCwg
a2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogVDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVl
IGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRh
dGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUg
ZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0
byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5h
bWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICovXG4gICAgZGF0YShlbGVtZW50
OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZh
bHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5
LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0
aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVu
dCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6
IEVsZW1lbnQpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFt
ZT86IHN0cmluZyk6IGFueTtcblxuICAgIGhhc0RhdGEoZWxlbWVudDogRWxlbWVudCk6IGJvb2xl
YW47XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBh
bnlbXTtcbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3
UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKGVsZW1lbnQ6
IEVsZW1lbnQsIG5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAg
IERlZmVycmVkPFQ+KGJlZm9yZVN0YXJ0PzogKGRlZmVycmVkOiBKUXVlcnlEZWZlcnJlZDxUPikg
PT4gYW55KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgZng6IHsg
dGljazogKCkgPT4gdm9pZDsgaW50ZXJ2YWw6IG51bWJlcjsgc3RvcDogKCkgPT4gdm9pZDsgc3Bl
ZWRzOiB7IHNsb3c6IG51bWJlcjsgZmFzdDogbnVtYmVyOyB9OyBvZmY6IGJvb2xlYW47IHN0ZXA6
IGFueTsgfTtcblxuICAgIC8vIEV2ZW50c1xuICAgIHByb3h5KGZuOiAoLi4uYXJnczogYW55W10p
ID0+IGFueSwgY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBwcm94eShj
b250ZXh0OiBhbnksIG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBhbnk7XG5cbiAgICBF
dmVudDogSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvcjtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGVy
cm9yKG1lc3NhZ2U6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBl
eHByOiBhbnk7XG4gICAgZm46IGFueTsgIC8vVE9ETzogRGVjaWRlIGhvdyB3ZSB3YW50IHRvIHR5
cGUgdGhpc1xuICAgIGlzUmVhZHk6IGJvb2xlYW47XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAg
c3VwcG9ydDogSlF1ZXJ5U3VwcG9ydDtcblxuICAgIC8vIFV0aWxpdGllc1xuICAgIGNvbnRhaW5z
KGNvbnRhaW5lcjogRWxlbWVudCwgY29udGFpbmVkOiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAg
IGVhY2goY29sbGVjdGlvbjogYW55LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogYW55LCB2YWx1
ZU9mRWxlbWVudDogYW55KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFjaChjb2xsZWN0aW9uOiBKUXVl
cnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBIVE1M
RWxlbWVudCkgPT4gYW55KTogYW55O1xuICAgIGVhY2g8VD4oY29sbGVjdGlvbjogVFtdLCBjYWxs
YmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDogVCkgPT4gYW55KTog
YW55O1xuXG4gICAgZXh0ZW5kKHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcbiAg
ICBleHRlbmQoZGVlcDogYm9vbGVhbiwgdGFyZ2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55
O1xuXG4gICAgZ2xvYmFsRXZhbChjb2RlOiBzdHJpbmcpOiBhbnk7XG5cbiAgICBncmVwPFQ+KGFy
cmF5OiBUW10sIGZ1bmM6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIp
ID0+IGJvb2xlYW4sIGludmVydD86IGJvb2xlYW4pOiBUW107XG5cbiAgICBpbkFycmF5PFQ+KHZh
bHVlOiBULCBhcnJheTogVFtdLCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXI7XG5cbiAgICBp
c0FycmF5KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0VtcHR5T2JqZWN0KG9iajogYW55KTog
Ym9vbGVhbjtcbiAgICBpc0Z1bmN0aW9uKG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc051bWVy
aWModmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgaXNQbGFpbk9iamVjdChvYmo6IGFueSk6IGJv
b2xlYW47XG4gICAgaXNXaW5kb3cob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzWE1MRG9jKG5v
ZGU6IE5vZGUpOiBib29sZWFuO1xuXG4gICAgbWFrZUFycmF5KG9iajogYW55KTogYW55W107XG5c
biAgICBtYXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogVCwg
aW5kZXhJbkFycmF5OiBudW1iZXIpID0+IFUpOiBVW107XG4gICAgbWFwKGFycmF5OiBhbnksIGNh
bGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IGFueSwgaW5kZXhJbkFycmF5OiBhbnkpID0+IGFueSk6
IGFueTtcblxuICAgIG1lcmdlPFQ+KGZpcnN0OiBUW10sIHNlY29uZDogVFtdKTogVFtdO1xuICAg
IG1lcmdlPFQsVT4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBVW10pOiBhbnlbXTtcblxuICAgIG5vb3Ao
KTogYW55O1xuXG4gICAgbm93KCk6IG51bWJlcjtcblxuICAgIHBhcnNlSlNPTihqc29uOiBzdHJp
bmcpOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBYTUwg
ZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YWEgd2VsbC1mb3JtZWQgWE1MIHN0
cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKi9cbiAgICBwYXJzZVhNTChkYXRhOiBzdHJpbmcpOiBY
TUxEb2N1bWVudDtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3Ry
aW5nLCBuZXdRdWV1ZTogYW55W10pOiBKUXVlcnk7XG5cbiAgICB0cmltKHN0cjogc3RyaW5nKTog
c3RyaW5nO1xuXG4gICAgdHlwZShvYmo6IGFueSk6IHN0cmluZztcblxuICAgIHVuaXF1ZShhcnI6
IGFueVtdKTogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBh
biBhcnJheSBvZiBET00gbm9kZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSBIVE1MIHN0
cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0gY29udGV4dCBET00gZWxlbWVudCB0byBz
ZXJ2ZSBhcyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgSFRNTCBmcmFnbWVudCB3aWxsIGJlIGNy
ZWF0ZWRcbiAgICAgKiBAcGFyYW0ga2VlcFNjcmlwdHMgQSBCb29sZWFuIGluZGljYXRpbmcgd2hl
dGhlciB0byBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBIVE1MIHN0cmluZ1xuICAgICAq
L1xuICAgIHBhcnNlSFRNTChkYXRhOiBzdHJpbmcsIGNvbnRleHQ/OiBIVE1MRWxlbWVudCwga2Vl
cFNjcmlwdHM/OiBib29sZWFuKTogYW55W107XG5cbiAgICBBbmltYXRpb24oZWxlbTogYW55LCBw
cm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueTtcblxuICAgIGVhc2luZzogSlF1ZXJ5
RWFzaW5nO1xufVxuXG4vKlxuICAgIFRoZSBqUXVlcnkgaW5zdGFuY2UgbWVtYmVyc1xuKi9cbmlu
dGVyZmFjZSBKUXVlcnkge1xuICAgIC8vIEFKQVhcbiAgICBhamF4Q29tcGxldGUoaGFuZGxlcjog
YW55KTogSlF1ZXJ5O1xuICAgIGFqYXhFcnJvcihoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6
IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICBhamF4U2VuZChoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFu
eSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RhcnQoaGFuZGxl
cjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdG9wKGhhbmRsZXI6ICgpID0+IGFueSk6
IEpRdWVyeTtcbiAgICBhamF4U3VjY2VzcyhoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFu
eSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IGxvYWQodXJsOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNvbXBsZXRlPzogYW55KTogSlF1ZXJ5O1xu
XG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICBzZXJpYWxpemVBcnJheSgpOiBhbnlbXTtc
blxuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICBhZGRDbGFzcyhjbGFzc05hbWVzOiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgYWRkQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGN1cnJlbnRDbGFzczogYW55
KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBodHRwOi8vYXBpLmpxdWVyeS5jb20vYWRk
QmFjay9cbiAgICBhZGRCYWNrKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG5cbiAgICBh
dHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgICBhdHRyKGF0dHJpYnV0ZU5h
bWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6
IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIGF0dHI6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIGF0dHIobWFwOiBhbnkpOiBKUXVlcnk7XG5cbiAgICBoYXNDbGFzcyhjbGFzc05hbWU6IHN0
cmluZyk6IGJvb2xlYW47XG5cbiAgICBodG1sKCk6IHN0cmluZztcbiAgICBodG1sKGh0bWxTdHJp
bmc6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKGh0bWxDb250ZW50OiAoaW5kZXg6IG51bWJl
ciwgb2xkaHRtbDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbChvYmo6IEpR
dWVyeSk6IEpRdWVyeTtcblxuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBhbnk7XG4g
ICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBw
cm9wKG1hcDogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIGZ1
bmM6IChpbmRleDogYW55LCBvbGRQcm9wZXJ0eVZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIHJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
cmVtb3ZlQ2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHJlbW92ZUNsYXNz
KGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVt
b3ZlUHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvZ2dsZUNsYXNz
KGNsYXNzTmFtZTogc3RyaW5nLCBzd3RjaD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xl
Q2xhc3Moc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKGZ1bmM6IChp
bmRleDogYW55LCBjbHM6IGFueSwgc3d0Y2g6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
dmFsKCk6IGFueTtcbiAgICB2YWwodmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIHZhbCh2
YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xu
ICAgIHZhbChmdW5jOiAoaW5kZXg6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBvZiBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0
aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5LlxuICAgICAqL1xuICAg
IGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTZXQg
b25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFt
ZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5c
biAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZv
ciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJv
cGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFs
dWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFt
ZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBv
bmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRz
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1l
LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5Llxu
ICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZ1tdKTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBm
b3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBy
b3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZh
bHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5h
bWU6IHN0cmluZywgdmFsdWU6IG51bWJlcltdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNl
dCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1l
bnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBu
YW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUg
dG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBw
b3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFy
Z3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAo
aW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBt
YXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENT
UyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmlu
ZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVz
IHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xk
IHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJp
bmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlcikgPT4gbnVtYmVyKTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3Ig
dGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bl
cnRpZXMgQW4gb2JqZWN0IG9mIHByb3BlcnR5LXZhbHVlIHBhaXJzIHRvIHNldC5cbiAgICAgKi9c
biAgICBjc3MocHJvcGVydGllczogT2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAgaGVpZ2h0KCk6IG51
bWJlcjtcbiAgICBoZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICBoZWlnaHQodmFs
dWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoZWlnaHQoZnVuYzogKGluZGV4OiBhbnksIGhlaWdo
dDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBpbm5lckhlaWdodCgpOiBudW1iZXI7XG4g
ICAgaW5uZXJIZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGlubmVyV2lkdGgo
KTogbnVtYmVyO1xuICAgIGlubmVyV2lkdGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAg
IG9mZnNldCgpOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IH07XG4gICAgb2Zmc2V0KGNv
b3JkaW5hdGVzOiBhbnkpOiBKUXVlcnk7XG4gICAgb2Zmc2V0KGZ1bmM6IChpbmRleDogYW55LCBj
b29yZHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJIZWlnaHQoaW5jbHVkZU1h
cmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJIZWlnaHQodmFsdWU6IG51bWJlciwg
aW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBvdXRlcldpZHRoKGluY2x1
ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVyV2lkdGgodmFsdWU6IG51bWJl
ciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBwb3NpdGlvbigpOiB7
IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IH07XG5cbiAgICBzY3JvbGxMZWZ0KCk6IG51bWJl
cjtcbiAgICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBzY3JvbGxU
b3AoKTogbnVtYmVyO1xuICAgIHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4g
ICAgd2lkdGgoKTogbnVtYmVyO1xuICAgIHdpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4g
ICAgd2lkdGgodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB3aWR0aChmdW5jOiAoaW5kZXg6
IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIERhdGFcbiAgICBj
bGVhclF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGRhdGEoa2V5OiBz
dHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgZGF0YShvYmo6IHsgW2tleTogc3RyaW5n
XTogYW55OyB9KTogSlF1ZXJ5O1xuICAgIGRhdGEoa2V5Pzogc3RyaW5nKTogYW55O1xuXG4gICAg
ZGVxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKG5h
bWVPckxpc3Q/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIHByb21pc2Uo
dHlwZT86IGFueSwgdGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgLy8g
RWZmZWN0c1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgY29t
cGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwg
ZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY29tcGxldGU/OiBGdW5jdGlvbik6IEpR
dWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczogeyBkdXJhdGlvbj86
IGFueTsgZWFzaW5nPzogc3RyaW5nOyBjb21wbGV0ZT86IEZ1bmN0aW9uOyBzdGVwPzogRnVuY3Rp
b247IHF1ZXVlPzogYm9vbGVhbjsgc3BlY2lhbEVhc2luZz86IGFueTsgfSk6IEpRdWVyeTtcblxu
ICAgIGRlbGF5KGR1cmF0aW9uOiBudW1iZXIsIHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4g
ICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkp
OiBKUXVlcnk7XG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBj
YWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFj
aXR5OiBudW1iZXIsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVUbyhkdXJhdGlv
bjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJp
bmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmluaXNoKCk6IEpRdWVyeTtcblxu
ICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGhp
ZGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtc
biAgICBzaG93KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcbiAgICBzbGlkZURvd24oZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmlu
ZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86
IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/
OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBz
bGlkZVVwKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlk
ZVVwKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuXG4gICAgc3RvcChjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVh
bik6IEpRdWVyeTtcbiAgICBzdG9wKHF1ZXVlPzogYW55LCBjbGVhclF1ZXVlPzogYm9vbGVhbiwg
anVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFu
eSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBl
YXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShzaG93
T3JIaWRlOiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgLy8gRXZlbnRzXG4gICAgYmluZChldmVu
dFR5cGU6IHN0cmluZywgZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBz
dHJpbmcsIGV2ZW50RGF0YTogYW55LCBwcmV2ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xu
ICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgYmluZCguLi5ldmVudHM6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgYmx1cihoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgYmx1cihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcImNoYW5nZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgY2hhbmdlKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
Y2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIGNoYW5nZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBjaGFuZ2UoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dl
ciB0aGUgXCJjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgY2xpY2so
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJkYmxjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgZGJsY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFp
bmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNsaWNrKGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIGRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImZvY3VzXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBmb2N1cygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2
ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5n
IGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoZXZlbnREYXRhPzogYW55LCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgZm9jdXNpbihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9j
dXNpbihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0
IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNvdXQoZXZlbnREYXRhOiBPYmplY3Qs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgdHdvIGhhbmRsZXJzIHRvIHRoZSBtYXRjaGVkIGVs
ZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBhbmQg
bGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW4gQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIHRoZSBlbGVt
ZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBtb3VzZSBwb2ludGVyIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3Zl
cihoYW5kbGVySW46IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSwgaGFu
ZGxlck91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBzaW5nbGUgaGFuZGxlciB0byB0aGUgbWF0Y2hlZCBl
bGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3Ig
bGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW5PdXQg
QSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxl
YXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW5PdXQ6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxu
ICAgICAqIFRyaWdnZXIgdGhlIFwia2V5ZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAga2V5ZG93bigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImtleWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93bihoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBrZXlkb3duXCJcIiBKYXZhU2NyaXB0
IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93bihldmVudERhdGE/OiBhbnksIGhh
bmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXByZXNzXCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcygpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXBy
ZXNzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
a2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJl
c3MoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJrZXl1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5dXAoKTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXl1
cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBrZXl1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGtleXVwKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBsb2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwibW91c2Vkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBtb3VzZWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93blwiIEphdmFTY3Jp
cHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93bihldmVudERhdGE6IE9iamVjdCwg
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZW50ZXJcIiBldmVu
dCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBt
b3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2VlbnRlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlZW50ZXIoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWxlYXZlXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFu
IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVh
dmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZp
cmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZWxlYXZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwibW91c2Vtb3ZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAg
ICBtb3VzZW1vdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwiIEphdmFTY3JpcHQg
ZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShldmVudERhdGE6IE9iamVjdCwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3V0XCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW91dCgpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlw
dCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1v
dXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoZXZl
bnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJt
b3VzZW92ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlb3Zlcigp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
Im1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlb3ZlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0
IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgbW91c2VvdmVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2V1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgbW91c2V1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlw
dCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChldmVudERhdGE6IE9iamVjdCwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKi9c
biAgICBvZmYoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5k
bGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBh
cmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNw
YWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBs
dWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBt
YXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2
ZW50IGhhbmRsZXJzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBw
cmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVl
IGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywgc2VsZWN0b3I/OiBzdHJp
bmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0
eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFz
IFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQg
Zm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4g
ICAgb2ZmKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50
IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCB3aGVyZSB0
aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVu
dCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50
IGhhbmRsZXIgZnVuY3Rpb25zIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKS5c
biAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhl
IG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5k
bGVycy5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwg
c2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4g
ZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUg
c3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNo
IGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBU
aGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0
aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLiBSZXN0IHBhcmFtZXRlciBhcmdzIGlz
IGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBqUXVlcnkudHJpZ2dlcigpLiBOb3Rl
IHRoYXQgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIG9uIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9u
IG11c3QgYmUgbWFya2VkIGFzIG9wdGlvbmFsICg/IHN5bnRheCkuXG4gICAgICovXG4gICAgb24o
ZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qs
IC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNo
IGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUg
c2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBt
b3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywg
c3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFt
IHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2Yg
dGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxl
Y3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdo
ZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUg
dmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9u
IHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czog
c3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2
ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0
ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBh
cyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVj
dG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNl
bGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBp
cyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQg
cmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRv
IGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93
ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4g
ZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcs
IGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1
bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2ggdGhlIHN0cmlu
ZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMg
YW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBhIGhhbmRs
ZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFt
IHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2Yg
dGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUg
c2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdheXMgY2FsbGVk
IHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0
YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4g
ZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBh
bnk7IH0sIHNlbGVjdG9yPzogYW55LCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUg
aGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5
cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25l
IG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJz
dWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFj
aCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMg
ZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIEph
dmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwiIG9y
IGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gZGF0YSBBbiBvYmplY3QgY29udGFp
bmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBkYXRh
OiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZl
bnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNl
IHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5h
bWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAg
ICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2Nl
bmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJ
ZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRy
aWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBv
bmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBB
dHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVy
IGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBc
ImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRl
ZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxl
Y3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRo
ZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFu
ZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9c
biAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVs
ZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQg
cGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBp
biB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFy
YXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMg
cmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChz
KS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRo
ZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhl
IGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVy
IGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50Llxu
ICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2
ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICovXG4gICAgb25lKGV2ZW50czog
eyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nLCBkYXRhPzogYW55KTog
SlF1ZXJ5O1xuXG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBET00gaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBET00gaXMgcmVhZHkuXG4gICAg
ICovXG4gICAgcmVhZHkoaGFuZGxlcjogRnVuY3Rpb24pOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBUcmlnZ2VyIHRoZSBcInJlc2l6ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICov
XG4gICAgcmVzaXplKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzY3JvbGxcIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIHNjcm9sbCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwoZXZlbnREYXRhOiBPYmplY3QsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2VsZWN0XCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBzZWxlY3QoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInN1Ym1pdFwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3VibWl0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBl
dmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdCho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2Jq
ZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5k
bGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoZXZlbnREYXRh
PzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQYXJh
bWV0ZXJzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICB0cmlnZ2VyKGV2ZW50OiBKUXVlcnlFdmVudE9i
amVjdCk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXJIYW5kbGVyKGV2ZW50VHlwZTogc3RyaW5nLCAu
Li5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogT2JqZWN0O1xuXG4gICAgdW5iaW5kKGV2ZW50VHlw
ZT86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGZsczogYm9vbGVh
bik6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZ0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB1bmRlbGVn
YXRlKCk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTog
c3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRzOiBhbnkpOiBK
UXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShuYW1lc3BhY2U6IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IHVubG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgdW5sb2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIEludGVy
bmFsc1xuICAgIGNvbnRleHQ6IEVsZW1lbnQ7XG4gICAganF1ZXJ5OiBzdHJpbmc7XG5cbiAgICBl
cnJvcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgZXJyb3IoZXZlbnREYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHB1c2hTdGFjayhlbGVt
ZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSwgbmFt
ZTogYW55LCBhcmd1bWVudHM6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1hbmlwdWxhdGlvblxu
ICAgIGFmdGVyKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFmdGVyKGZ1bmM6IChp
bmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmQoLi4uY29udGVudDogYW55
W10pOiBKUXVlcnk7XG4gICAgYXBwZW5kKGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgYmVmb3JlKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGJlZm9yZShmdW5jOiAo
aW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvbmUod2l0aERhdGFBbmRFdmVu
dHM/OiBib29sZWFuLCBkZWVwV2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuKTogSlF1ZXJ5O1xu
XG4gICAgZGV0YWNoKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZW1wdHkoKTogSlF1
ZXJ5O1xuXG4gICAgaW5zZXJ0QWZ0ZXIodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG4gICAgaW5zZXJ0
QmVmb3JlKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVuZCguLi5jb250ZW50OiBh
bnlbXSk6IEpRdWVyeTtcbiAgICBwcmVwZW5kKGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtc
blxuICAgIHJlbW92ZShzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIHJlcGxhY2VBbGwo
dGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNlV2l0aChmdW5jOiBhbnkpOiBKUXVl
cnk7XG5cbiAgICB0ZXh0KCk6IHN0cmluZztcbiAgICB0ZXh0KHRleHRTdHJpbmc6IGFueSk6IEpR
dWVyeTtcbiAgICB0ZXh0KHRleHRTdHJpbmc6IChpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcp
ID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvQXJyYXkoKTogYW55W107XG5cbiAgICB1bndy
YXAoKTogSlF1ZXJ5O1xuXG4gICAgd3JhcCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtc
biAgICB3cmFwKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3cmFw
QWxsKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcElubmVyKHdyYXBw
aW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXBJbm5lcihmdW5jOiAoaW5kZXg6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGVhY2goZnVu
YzogKGluZGV4OiBhbnksIGVsZW06IEVsZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGdl
dChpbmRleD86IG51bWJlcik6IGFueTtcblxuICAgIGluZGV4KCk6IG51bWJlcjtcbiAgICBpbmRl
eChzZWxlY3Rvcjogc3RyaW5nKTogbnVtYmVyO1xuICAgIGluZGV4KGVsZW1lbnQ6IGFueSk6IG51
bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBzZWxl
Y3Rvcjogc3RyaW5nO1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG4gICAgW3g6IG51bWJlcl06IEhU
TUxFbGVtZW50O1xuXG4gICAgLy8gVHJhdmVyc2luZ1xuICAgIGFkZChzZWxlY3Rvcjogc3RyaW5n
LCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIGFkZCguLi5lbGVtZW50czogYW55W10pOiBK
UXVlcnk7XG4gICAgYWRkKGh0bWw6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGQob2JqOiBKUXVl
cnkpOiBKUXVlcnk7XG5cbiAgICBjaGlsZHJlbihzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxu
ICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVj
dG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qob2Jq
OiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4g
ICAgY2xvc2VzdChzZWxlY3RvcnM6IGFueSwgY29udGV4dD86IEVsZW1lbnQpOiBhbnlbXTtcblxu
ICAgIGNvbnRlbnRzKCk6IEpRdWVyeTtcblxuICAgIGVuZCgpOiBKUXVlcnk7XG5cbiAgICBlcShp
bmRleDogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgZmlsdGVyKHNlbGVjdG9yOiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgZmlsdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgZmlsdGVyKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIob2JqOiBKUXVlcnkp
OiBKUXVlcnk7XG5cbiAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmlu
ZChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmluZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtc
blxuICAgIGZpcnN0KCk6IEpRdWVyeTtcblxuICAgIGhhcyhzZWxlY3Rvcjogc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIGhhcyhjb250YWluZWQ6IEVsZW1lbnQpOiBKUXVlcnk7XG5cbiAgICBpcyhzZWxl
Y3Rvcjogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBpcyhmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55
KTogYm9vbGVhbjtcbiAgICBpcyhlbGVtZW50OiBhbnkpOiBib29sZWFuO1xuICAgIGlzKG9iajog
SlF1ZXJ5KTogYm9vbGVhbjtcblxuICAgIGxhc3QoKTogSlF1ZXJ5O1xuXG4gICAgbWFwKGNhbGxi
YWNrOiAoaW5kZXg6IGFueSwgZG9tRWxlbWVudDogRWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgbmV4dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5leHRBbGwoc2Vs
ZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0VW50aWwoc2VsZWN0b3I/OiBzdHJp
bmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwoZWxlbWVudD86IEVs
ZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwob2JqPzogSlF1
ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBub3Qoc2VsZWN0b3I6IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICBub3QoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
biAgICBub3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIG5vdChvYmo6IEpRdWVyeSk6IEpR
dWVyeTtcblxuICAgIG9mZnNldFBhcmVudCgpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnQoc2VsZWN0
b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzKHNlbGVjdG9yPzogc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgcGFyZW50c1VudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBz
dHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0
ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKG9iaj86IEpRdWVyeSwgZmls
dGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldihzZWxlY3Rvcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHByZXZBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBw
cmV2VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBwcmV2VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtc
biAgICBwcmV2VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICBzaWJsaW5ncyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNsaWNlKHN0
YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcik6IEpRdWVyeTtcblxuICAgIC8vIFV0aWxpdGllc1xu
XG4gICAgcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4gICAgcXVldWUocXVldWVO
YW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xuICAgIHF1ZXVl
KG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xufVxuZGVjbGFyZSBtb2R1bGUgXCJq
cXVlcnlcIiB7XG4gICAgZXhwb3J0ID0gJDtcbn1cbmRlY2xhcmUgdmFyIGpRdWVyeTogSlF1ZXJ5
U3RhdGljO1xuZGVjbGFyZSB2YXIgJDogSlF1ZXJ5U3RhdGljO1xuLy8gbGlicy9hbmd1bGFyL2Fu
Z3VsYXIuZC50c1xuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3IgQW5ndWxhciBKUyAxLjBcbi8vIFBy
b2plY3Q6IGh0dHA6Ly9hbmd1bGFyanMub3JnXG4vLyBEZWZpbml0aW9ucyBieTogRGllZ28gVmls
YXIgPGh0dHA6Ly9naXRodWIuY29tL2RpZWdvdmlsYXI+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6
Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG5cblxuZGVjbGFyZSB2
YXIgYW5ndWxhcjogbmcuSUFuZ3VsYXJTdGF0aWM7XG5cbi8vIFN1cHBvcnQgZm9yIHBhaW5sZXNz
IGRlcGVuZGVuY3kgaW5qZWN0aW9uXG5pbnRlcmZhY2UgRnVuY3Rpb24ge1xuICAgICRpbmplY3Q6
c3RyaW5nW107XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG5nIG1vZHVsZSAoYW5n
dWxhci5qcylcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmRlY2xhcmUgbW9kdWxlIG5nIHtcblxu
ICAgIC8vIEFsbCBzZXJ2aWNlIHByb3ZpZGVycyBleHRlbmQgdGhpcyBpbnRlcmZhY2VcbiAgICBp
bnRlcmZhY2UgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgICRnZXQ6IGFueTtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmd1bGFyU3RhdGljXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElBbmd1bGFyU3RhdGljIHtcbiAgICAgICAgYmluZChjb250ZXh0OiBhbnks
IGZuOiBGdW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBGdW5jdGlvbjtcbiAgICAgICAgYm9vdHN0
cmFwKGVsZW1lbnQ6IHN0cmluZywgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2
aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogSlF1ZXJ5LCBtb2R1bGVzPzogYW55W10p
OiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBFbGVt
ZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJv
b3RzdHJhcChlbGVtZW50OiBEb2N1bWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0
b3JTZXJ2aWNlO1xuICAgICAgICBjb3B5KHNvdXJjZTogYW55LCBkZXN0aW5hdGlvbj86IGFueSk6
IGFueTtcbiAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpRdWVyeVN0YXRpYztcbiAgICAgICAg
ZXF1YWxzKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGV4dGVu
ZChkZXN0aW5hdGlvbjogYW55LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueTtcbiAgICAgICAgZm9y
RWFjaChvYmo6IGFueSwgaXRlcmF0b3I6ICh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4gYW55LCBj
b250ZXh0PzogYW55KTogYW55O1xuICAgICAgICBmcm9tSnNvbihqc29uOiBzdHJpbmcpOiBhbnk7
XG4gICAgICAgIGlkZW50aXR5KGFyZz86IGFueSk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IobW9k
dWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBpc0FycmF5KHZh
bHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0RhdGUodmFsdWU6IGFueSk6IGJvb2xlYW47
XG4gICAgICAgIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNFbGVt
ZW50KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkp
OiBib29sZWFuO1xuICAgICAgICBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAg
ICAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzU3RyaW5nKHZhbHVl
OiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1VuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICAgICAgbG93ZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICAvKiog
Y29uc3RydWN0IHlvdXIgYW5ndWxhciBhcHBsaWNhdGlvblxuXHRcdG9mZmljaWFsIGRvY3M6IElu
dGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciBtb2R1bGVzLlxuXHRcdHNlZTogaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcblx0XHQqL1xuICAgICAgICBt
b2R1bGUoXG4gICAgICAgICAgICAvKiogbmFtZSBvZiB5b3VyIG1vZHVsZSB5b3Ugd2FudCB0byBj
cmVhdGUgKi9cbiAgICAgICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgIC8qKiBuYW1l
IG9mIG1vZHVsZXMgeW91cnMgZGVwZW5kcyBvbiAqL1xuICAgICAgICAgICAgcmVxdWlyZXM/OiBz
dHJpbmdbXSxcbiAgICAgICAgICAgIGNvbmZpZ0Z1bmN0aW9uPzogYW55KTogSU1vZHVsZTtcbiAg
ICAgICAgbm9vcCguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHRvSnNvbihvYmo6IGFu
eSwgcHJldHR5PzogYm9vbGVhbik6IHN0cmluZztcbiAgICAgICAgdXBwZXJjYXNlKHN0cjogc3Ry
aW5nKTogc3RyaW5nO1xuICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICBmdWxsOiBzdHJp
bmc7XG4gICAgICAgICAgICBtYWpvcjogbnVtYmVyO1xuICAgICAgICAgICAgbWlub3I6IG51bWJl
cjtcbiAgICAgICAgICAgIGRvdDogbnVtYmVyO1xuICAgICAgICAgICAgY29kZW5hbWU6IHN0cmlu
ZztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBN
b2R1bGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5N
b2R1bGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU1vZHVsZSB7XG4g
ICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGFuaW1hdGlvbkZhY3Rvcnk6IEZ1bmN0aW9u
KTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG9iamVjdDog
T2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNl
cy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBi
ZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGNv
bmZpZ0ZuOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rp
bmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2gg
bmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAg
IGNvbmZpZyhpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAg
ICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBj
b25zdGFudChvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFt
ZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAg
ICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9y
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIob2JqZWN0IDogT2JqZWN0KTog
SU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9y
eTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBp
bmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3Rp
dmUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmlu
Zywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBm
YWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1v
ZHVsZTtcbiAgICAgICAgZmFjdG9yeShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAg
IGZpbHRlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJ
TW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5j
dGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIob2JqZWN0OiBPYmplY3QpOiBJ
TW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNv
bnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0
cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAg
ICAgcHJvdmlkZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5pdGlh
bGl6YXRpb25GdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5saW5l
QW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShuYW1l
OiBzdHJpbmcsIHNlcnZpY2VDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAg
ICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtd
KTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4g
ICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAg
IHZhbHVlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcblxuICAgICAgICAvLyBQcm9wZXJ0aWVz
XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcmVxdWlyZXM6IHN0cmluZ1tdO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0
dHJpYnV0ZXNcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF0dHJpYnV0
ZXMge1xuXHQvLyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgc2Nv
cGVkIGF0dHJpYnV0ZXMuIGl0J3Mgbm90IHZlcnkgZWxlZ2FudFxuXHQvLyBiZWNhdXNlIHlvdSBo
YXZlIHRvIHVzZSBhdHRyc1snZm9vJ10gaW5zdGVhZCBvZiBhdHRycy5mb28gYnV0IEkgZG9uJ3Qg
a25vdyBvZiBhIGJldHRlciB3YXlcblx0Ly8gdGhpcyBzaG91bGQgcmVhbGx5IGJlIGxpbWl0ZWQg
dG8gcmV0dXJuIHN0cmluZyBidXQgaXQgY3JlYXRlcyB0aGlzIHByb2JsZW06IGh0dHA6Ly9zdGFj
a292ZXJmbG93LmNvbS9xLzE3MjAxODU0LzE2NTY1NlxuXHRbbmFtZTogc3RyaW5nXTogYW55O1xu
XG4gICAgICAgIC8vIEFkZHMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNs
YXNzVmFsIHBhcmFtZXRlciB0byB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9u
cyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZFxuICAgICAg
ICAvLyBmb3IgdGhlIGNsYXNzIGFkZGl0aW9uLlxuICAgICAgICAkYWRkQ2xhc3MoY2xhc3NWYWw6
IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gUmVtb3ZlcyB0aGUgQ1NTIGNsYXNzIHZhbHVl
IHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIGZyb20gdGhlXG4gICAgICAgIC8v
IGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2ls
bCBiZSB0cmlnZ2VyZWQgZm9yXG4gICAgICAgIC8vIHRoZSBjbGFzcyByZW1vdmFsLlxuICAgICAg
ICAkcmVtb3ZlQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gU2V0
IERPTSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgICAgJHNldChrZXk6IHN0cmluZywg
dmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gT2JzZXJ2ZXMgYW4gaW50ZXJwb2xhdGVk
IGF0dHJpYnV0ZS5cbiAgICAgICAgLy8gVGhlIG9ic2VydmVyIGZ1bmN0aW9uIHdpbGwgYmUgaW52
b2tlZCBvbmNlIGR1cmluZyB0aGUgbmV4dCAkZGlnZXN0XG4gICAgICAgIC8vIGZvbGxvd2luZyBj
b21waWxhdGlvbi4gVGhlIG9ic2VydmVyIGlzIHRoZW4gaW52b2tlZCB3aGVuZXZlciB0aGVcbiAg
ICAgICAgLy8gaW50ZXJwb2xhdGVkIHZhbHVlIGNoYW5nZXMuXG4gICAgICAgICRvYnNlcnZlKG5h
bWU6IHN0cmluZywgZm46KHZhbHVlPzphbnkpPT5hbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAv
LyBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMgdG8gdGhlIG5vcm1hbGl6ZWQg
bmFtZS4gVGhpcyBpcyBuZWVkZWRcbiAgICAgICAgLy8gdG8gZG8gcmV2ZXJzZSBsb29rdXAgZnJv
bSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFtZS5cbiAgICAgICAgJGF0dHI6IE9i
amVjdDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGb3JtQ29udHJv
bGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3Rp
dmU6Zm9ybS5Gb3JtQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJRm9ybUNvbnRyb2xsZXIge1xuICAgICAgICAkcHJpc3RpbmU6IGJvb2xlYW47XG4gICAg
ICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFuO1xuICAgICAgICAk
aW52YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAgICAgICRhZGRDb250
cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRyZW1v
dmVDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAg
ICRzZXREaXJ0eSgpOiB2b2lkO1xuICAgICAgICAkc2V0UHJpc3RpbmUoKTogdm9pZDtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBOZ01vZGVsQ29udHJvbGxlclxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6bmdNb2Rl
bC5OZ01vZGVsQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJTmdNb2RlbENvbnRyb2xsZXIge1xuICAgICAgICAkcmVuZGVyKCk6IHZvaWQ7XG4gICAgICAg
ICRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXk6IHN0cmluZywgaXNWYWxpZDogYm9vbGVh
bik6IHZvaWQ7XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHZpZXdWYWx1ZSBhbmQg
bW9kZWxWYWx1ZSB0byBiZSBhIHN0cmluZyBidXQgb3RoZXJcbiAgICAgICAgLy8gdHlwZXMgZG8g
d29yayBhbmQgaXQncyBjb21tb24gdG8gdXNlIHRoZW0uXG4gICAgICAgICRzZXRWaWV3VmFsdWUo
dmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgICAgICR2aWV3VmFsdWU6IGFueTtcblxuICAgICAgICAk
bW9kZWxWYWx1ZTogYW55O1xuXG4gICAgICAgICRwYXJzZXJzOiBJTW9kZWxQYXJzZXJbXTtcbiAg
ICAgICAgJGZvcm1hdHRlcnM6IElNb2RlbEZvcm1hdHRlcltdO1xuICAgICAgICAkZXJyb3I6IGFu
eTtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47
XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4g
ICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbFBhcnNlciB7XG4gICAgICAgICh2YWx1ZTogYW55
KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxGb3JtYXR0ZXIge1xuICAgICAg
ICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBTY29wZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
cm9vdFNjb3BlLlNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElT
Y29wZSB7XG4gICAgICAgICRhcHBseSgpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IHN0cmlu
Zyk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IGFu
eTtcblxuICAgICAgICAkYnJvYWRjYXN0KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJ
QW5ndWxhckV2ZW50O1xuICAgICAgICAkZGVzdHJveSgpOiB2b2lkO1xuICAgICAgICAkZGlnZXN0
KCk6IHZvaWQ7XG4gICAgICAgICRlbWl0KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJ
QW5ndWxhckV2ZW50O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0
aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2
YWwoZXhwcmVzc2lvbjogc3RyaW5nLCBhcmdzPzogT2JqZWN0KTogYW55O1xuICAgICAgICAkZXZh
bChleHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBhcmdzPzogT2JqZWN0KTogYW55
O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBh
Y3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWxBc3luYyhleHBy
ZXNzaW9uOiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IChz
Y29wZTogSVNjb3BlKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIERlZmF1bHRzIHRvIGZh
bHNlIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGVja2luZyBzdHJhdGVneVxuICAgICAgICAkbmV3
KGlzb2xhdGU/OiBib29sZWFuKTogSVNjb3BlO1xuXG4gICAgICAgICRvbihuYW1lOiBzdHJpbmcs
IGxpc3RlbmVyOiAoZXZlbnQ6IElBbmd1bGFyRXZlbnQsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkp
OiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxp
c3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAg
ICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86IChuZXdWYWx1
ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFs
aXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9u
OiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxp
dHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246
IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZh
bHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFu
KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246
IHN0cmluZywgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTog
SVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRj
aEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyOiAobmV3VmFsdWU6
IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG5c
biAgICAgICAgJHBhcmVudDogSVNjb3BlO1xuXG4gICAgICAgICRpZDogbnVtYmVyO1xuXG4gICAg
ICAgIC8vIEhpZGRlbiBtZW1iZXJzXG4gICAgICAgICQkaXNvbGF0ZUJpbmRpbmdzOiBhbnk7XG4g
ICAgICAgICQkcGhhc2U6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJFdmVu
dCB7XG4gICAgICAgIHRhcmdldFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIGN1cnJlbnRTY29wZTog
SVNjb3BlO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiBG
dW5jdGlvbjtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgICAgICAv
LyBBdmFpbGFibGUgb25seSBldmVudHMgdGhhdCB3ZXJlICRlbWl0LXRlZFxuICAgICAgICBzdG9w
UHJvcGFnYXRpb24/OiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBXaW5kb3dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiR3aW5kb3dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SVdpbmRvd1NlcnZpY2UgZXh0ZW5kcyBXaW5kb3cge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEJyb3dzZXJTZXJ2aWNlXG4gICAgLy8gVE9ETyB1bmRvY3VtZW50ZWQsIHNvIHdl
IG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIHNvdXJjZSBjb2RlXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElCcm93c2VyU2VydmljZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gVGltZW91dFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJHRpbWVvdXRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSVRpbWVvdXRTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxh
eT86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAg
ICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVydmFsU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJ2YWxcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVydmFsU2VydmljZSB7XG4gICAgICAgIChmdW5j
OiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlciwgY291bnQ/OiBudW1iZXIsIGludm9rZUFwcGx5Pzog
Ym9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlz
ZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBGaWx0ZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRmaWx0ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGZpbHRlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElG
aWx0ZXJTZXJ2aWNlIHtcbiAgICAgICAgKG5hbWU6IHN0cmluZyk6IEZ1bmN0aW9uO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJRmlsdGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVy
IHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5OiBGdW5jdGlv
bik6IElTZXJ2aWNlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gTG9jYWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kbG9jYWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElM
b2NhbGVTZXJ2aWNlIHtcbiAgICAgICAgaWQ6IHN0cmluZztcblxuICAgICAgICAvLyBUaGVzZSBh
cmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgLy8gQ2hlY2sgYW5ndWxhcidzIGkxOG4gZmlsZXMg
Zm9yIGV4ZW1wbGVzXG4gICAgICAgIE5VTUJFUl9GT1JNQVRTOiBJTG9jYWxlTnVtYmVyRm9ybWF0
RGVzY3JpcHRvcjtcbiAgICAgICAgREFURVRJTUVfRk9STUFUUzogSUxvY2FsZURhdGVUaW1lRm9y
bWF0RGVzY3JpcHRvcjtcbiAgICAgICAgcGx1cmFsQ2F0OiAobnVtOiBhbnkpID0+IHN0cmluZztc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0b3Ige1xu
ICAgICAgICBERUNJTUFMX1NFUDogc3RyaW5nO1xuICAgICAgICBHUk9VUF9TRVA6IHN0cmluZztc
biAgICAgICAgUEFUVEVSTlM6IElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvcltdO1xuICAg
ICAgICBDVVJSRU5DWV9TWU06IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2Fs
ZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yIHtcbiAgICAgICAgbWluSW50OiBudW1iZXI7XG4gICAg
ICAgIG1pbkZyYWM6IG51bWJlcjtcbiAgICAgICAgbWF4RnJhYzogbnVtYmVyO1xuICAgICAgICBw
b3NQcmU6IHN0cmluZztcbiAgICAgICAgcG9zU3VmOiBzdHJpbmc7XG4gICAgICAgIG5lZ1ByZTog
c3RyaW5nO1xuICAgICAgICBuZWdTdWY6IHN0cmluZztcbiAgICAgICAgZ1NpemU6IG51bWJlcjtc
biAgICAgICAgbGdTaXplOiBudW1iZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVE
YXRlVGltZUZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBNT05USDogc3RyaW5nW107XG4gICAg
ICAgIFNIT1JUTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBEQVk6IHN0cmluZ1tdO1xuICAgICAg
ICBTSE9SVERBWTogc3RyaW5nW107XG4gICAgICAgIEFNUE1TOiBzdHJpbmdbXTtcbiAgICAgICAg
bWVkaXVtOiBzdHJpbmc7XG4gICAgICAgIHNob3J0OiBzdHJpbmc7XG4gICAgICAgIGZ1bGxEYXRl
OiBzdHJpbmc7XG4gICAgICAgIGxvbmdEYXRlOiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bURhdGU6
IHN0cmluZztcbiAgICAgICAgc2hvcnREYXRlOiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bVRpbWU6
IHN0cmluZztcbiAgICAgICAgc2hvcnRUaW1lOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gTG9nU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kbG9nXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50
ZXJmYWNlIElMb2dTZXJ2aWNlIHtcbiAgICAgICAgZGVidWc6IElMb2dDYWxsO1xuICAgICAgICBl
cnJvcjogSUxvZ0NhbGw7XG4gICAgICAgIGluZm86IElMb2dDYWxsO1xuICAgICAgICBsb2c6IElM
b2dDYWxsO1xuICAgICAgICB3YXJuOiBJTG9nQ2FsbDtcbiAgICB9XG5cbiAgICAvLyBXZSBkZWZp
bmUgdGhpcyBhcyBzZXBhcmV0ZSBpbnRlcmZhY2Ugc28gd2UgY2FuIHJlb3BlbiBpdCBsYXRlciBm
b3JcbiAgICAvLyB0aGUgbmdNb2NrIG1vZHVsZS5cbiAgICBpbnRlcmZhY2UgSUxvZ0NhbGwge1xu
ICAgICAgICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIFBhcnNlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kcGFyc2VcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSVBhcnNlU2VydmljZSB7XG4gICAgICAgIChleHByZXNzaW9uOiBzdHJpbmcpOiBJQ29t
cGlsZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZWRFeHByZXNz
aW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSwgbG9jYWxzPzogYW55KTogYW55O1xuXG4gICAg
ICAgIC8vIElmIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdW5kZWZpbmVkIGlzIGdvbm5hIGJlIHVz
ZWQgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uXG4gICAgICAgIC8vIGRvZXMgbm90IGNoZWNrIHRo
ZSBwYXJhbWV0ZXIuIExldCdzIGZvcmNlIGEgdmFsdWUgZm9yIGNvbnNpc3RlbmN5LiBJZiBjb25z
dW1lclxuICAgICAgICAvLyB3aGFudHMgdG8gdW5kZWZpbmUgaXQsIHBhc3MgdGhlIHVuZGVmaW5l
ZCB2YWx1ZSBleHBsaWNpdGx5LlxuICAgICAgICBhc3NpZ24oY29udGV4dDogYW55LCB2YWx1ZTog
YW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvY2F0
aW9uU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
bG9jYXRpb25cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxv
Y2F0aW9uUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlk
ZS9kZXZfZ3VpZGUuc2VydmljZXMuJGxvY2F0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElMb2NhdGlvblNlcnZpY2Uge1xuICAgICAgICBhYnNVcmwoKTogc3RyaW5n
O1xuICAgICAgICBoYXNoKCk6IHN0cmluZztcbiAgICAgICAgaGFzaChuZXdIYXNoOiBzdHJpbmcp
OiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBob3N0KCk6IHN0cmluZztcbiAgICAgICAgcGF0
aCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgobmV3UGF0aDogc3RyaW5nKTogSUxvY2F0aW9uU2Vy
dmljZTtcbiAgICAgICAgcG9ydCgpOiBudW1iZXI7XG4gICAgICAgIHByb3RvY29sKCk6IHN0cmlu
ZztcbiAgICAgICAgcmVwbGFjZSgpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2go
KTogYW55O1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyc01hcDogYW55KTogSUxvY2F0aW9uU2Vy
dmljZTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcjogc3RyaW5nLCBwYXJhbWV0ZXJWYWx1ZTog
YW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgdXJsKCk6IHN0cmluZztcbiAgICAgICAg
dXJsKHVybDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICB9XG5cbiAgICBpbnRlcmZh
Y2UgSUxvY2F0aW9uUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAg
aGFzaFByZWZpeCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2hQcmVmaXgocHJlZml4OiBzdHJpbmcp
OiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICAgICAgaHRtbDVNb2RlKCk6IGJvb2xlYW47XG5cbiAg
ICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBwYXJhbWV0ZXIgaXMgc3RyaW5nLCBi
dXRcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gdGVzdHMgaXQgYXMgYm9vbGVhbiwgd2hpY2gg
bWFrZXMgbW9yZSBzZW5zZVxuICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIGEgdG9nZ2xlclxuICAg
ICAgICBodG1sNU1vZGUoYWN0aXZlOiBib29sZWFuKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRG9jdW1lbnRTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRkb2N1bWVudFxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRG9jdW1lbnRTZXJ2aWNlIGV4dGVuZHMg
RG9jdW1lbnQge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEV4Y2VwdGlvbkhh
bmRsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRleGNlcHRpb25IYW5kbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElFeGNlcHRpb25IYW5kbGVyU2VydmljZSB7XG4gICAgICAgIChleGNlcHRpb246IEVycm9yLCBj
YXVzZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gUm9vdEVsZW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRyb290RWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGlu
dGVyZmFjZSBJUm9vdEVsZW1lbnRTZXJ2aWNlIGV4dGVuZHMgSlF1ZXJ5IHt9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBRU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kcVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJUVNlcnZpY2Uge1xuICAgICAgICBhbGwocHJvbWlzZXM6IElQcm9taXNlPGFueT5bXSk6
IElQcm9taXNlPGFueVtdPjtcbiAgICAgICAgZGVmZXI8VD4oKTogSURlZmVycmVkPFQ+O1xuICAg
ICAgICByZWplY3QocmVhc29uPzogYW55KTogSVByb21pc2U8dm9pZD47XG4gICAgICAgIHdoZW48
VD4odmFsdWU6IFQpOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVByb21p
c2U8VD4ge1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VW
YWx1ZTogVCkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNv
bjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQ
cm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazog
KHByb21pc2VWYWx1ZTogVCkgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAo
cmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55
KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxi
YWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzogKHJlYXNv
bjogYW55KSA9PiBUUmVzdWx0LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkp
OiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuXG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0
ZWQ6IChyZWFzb246IGFueSkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJl
c3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkg
PT4gSVByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8
VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0KTogSVByb21pc2U8
VFJlc3VsdD47XG5cbiAgICAgICAgZmluYWxseTxUUmVzdWx0PihmaW5hbGx5Q2FsbGJhY2s6ICgp
PT5hbnkpOklQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRGVmZXJy
ZWQ8VD4ge1xuICAgICAgICByZXNvbHZlKHZhbHVlPzogVCk6IHZvaWQ7XG4gICAgICAgIHJlamVj
dChyZWFzb24/OiBhbnkpOiB2b2lkO1xuICAgICAgICBub3RpZnkoc3RhdGU/OmFueSk6IHZvaWQ7
XG4gICAgICAgIHByb21pc2U6IElQcm9taXNlPFQ+O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIEFuY2hvclNjcm9sbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGFuY2hvclNjcm9sbFxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsU2VydmljZSB7XG4gICAgICAgICgpOiB2
b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsUHJvdmlkZXIgZXh0ZW5k
cyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlzYWJsZUF1dG9TY3JvbGxpbmcoKTogdm9p
ZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDYWNoZUZhY3RvcnlT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjYWNo
ZUZhY3RvcnlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNhY2hlRmFj
dG9yeVNlcnZpY2Uge1xuICAgICAgICAvLyBMZXRzIG5vdCBmb2NlIHRoZSBvcHRpb25zTWFwIHRv
IGhhdmUgdGhlIGNhcGFjaXR5IG1lbWJlci4gRXZlbiB0aG91Z2hcbiAgICAgICAgLy8gaXQncyB0
aGUgT05MWSBvcHRpb24gY29uc2lkZXJlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gdG9kYXksIGEg
Y29uc3VtZXJcbiAgICAgICAgLy8gbWlnaHQgZmluZCBpdCB1c2VmdWwgdG8gYXNzb2NpYXRlIHNv
bWUgb3RoZXIgb3B0aW9ucyB0byB0aGUgY2FjaGUgb2JqZWN0LlxuICAgICAgICAvLyhjYWNoZUlk
OiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0pOiBDYWNoZU9iamVj
dDtcbiAgICAgICAgKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsgY2FwYWNpdHk6IG51
bWJlcjsgfSk6IElDYWNoZU9iamVjdDtcblxuICAgICAgICAvLyBNZXRob2RzIGJlbGxvdyBhcmUg
bm90IGRvY3VtZW50ZWRcbiAgICAgICAgaW5mbygpOiBhbnk7XG4gICAgICAgIGdldCAoY2FjaGVJ
ZDogc3RyaW5nKTogSUNhY2hlT2JqZWN0O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ2FjaGVP
YmplY3Qge1xuICAgICAgICBpbmZvKCk6IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAg
ICAgICAgICBzaXplOiBudW1iZXI7XG5cbiAgICAgICAgICAgIC8vIE5vdCBnYXJhbnRlZWQgdG8g
aGF2ZSwgc2luY2UgaXQncyBhIG5vbi1tYW5kYXRvcnkgb3B0aW9uXG4gICAgICAgICAgICAvL2Nh
cGFjaXR5OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICAgIHB1dChrZXk6IHN0cmluZywgdmFs
dWU/OiBhbnkpOiB2b2lkO1xuICAgICAgICBnZXQgKGtleTogc3RyaW5nKTogYW55O1xuICAgICAg
ICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICByZW1vdmVBbGwoKTogdm9pZDtc
biAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIENvbXBpbGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRjb21waWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUNvbXBpbGVTZXJ2aWNlIHtcbiAgICAgICAgKGVsZW1lbnQ6IHN0cmluZywgdHJh
bnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIp
OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50LCB0
cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJl
cik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEpRdWVyeSwg
dHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1i
ZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElD
b21waWxlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlyZWN0
aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJQ29tcGlsZVBy
b3ZpZGVyO1xuXG4gICAgICAgIC8vIFVuZG9jdW1lbnRlZCwgYnV0IGl0IGlzIHRoZXJlLi4uXG4g
ICAgICAgIGRpcmVjdGl2ZShkaXJlY3RpdmVzTWFwOiBhbnkpOiBJQ29tcGlsZVByb3ZpZGVyO1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24ge1xuICAgICAg
ICAvLyBMZXQncyBoaW50IGJ1dCBub3QgZm9yY2UgY2xvbmVBdHRhY2hGbidzIHNpZ25hdHVyZVxu
ICAgICAgICAoc2NvcGU6IElTY29wZSwgY2xvbmVBdHRhY2hGbj86IChjbG9uZWRFbGVtZW50Pzog
SlF1ZXJ5LCBzY29wZT86IElTY29wZSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnRyb2xsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVyXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVyUHJvdmlkZXJcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJTZXJ2aWNlIHtcbiAg
ICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBzdGF0ZSB0aGlzLCBs
b2NhbHMgYXJlIG9wdGlvbmFsXG4gICAgICAgIChjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0
aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIChjb250cm9sbGVyTmFtZTogc3RyaW5n
LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVy
UHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFt
ZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAg
ICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBkZXBlbmRlbmN5QW5ub3RhZGVkQ29uc3RydWN0b3I6
IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBI
dHRwU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
aHR0cFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cFNlcnZpY2Ug
e1xuICAgICAgICAvLyBBdCBsZWFzdCBtb2V0aG9kIGFuZCB1cmwgbXVzdCBiZSBwcm92aWRlZC4u
LlxuICAgICAgICAoY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IElIdHRwUHJvbWlzZTxhbnk+O1xu
ICAgICAgICBnZXQgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9t
aXNlPGFueT47XG4gICAgICAgIGRlbGV0ZSAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBh
bnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgaGVhZCh1cmw6IHN0cmluZywgUmVxdWVz
dENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBqc29ucCh1cmw6IHN0
cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBw
b3N0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFBy
b21pc2U8YW55PjtcbiAgICAgICAgcHV0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RD
b25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1
ZXN0Q29uZmlnO1xuXG4gICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcsIEJVVCBpdCBpcyBkb2N1bWVu
dGVkIGFzIHB1YmxpYywgc28uLi5cbiAgICAgICAgcGVuZGluZ1JlcXVlc3RzOiBhbnlbXTtcbiAg
ICB9XG5cbiAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGhpbnRpbmcuXG4gICAgLy8gU29tZSBvcGV0
aW9ucyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdC5cbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHAjVXNhZ2UgZm9y
IG9wdGlvbnMgZXhwbGFuYXRpb25zXG4gICAgaW50ZXJmYWNlIElSZXF1ZXN0Q29uZmlnIHtcbiAg
ICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBwYXJh
bXM/OiBhbnk7XG5cbiAgICAgICAgLy8gWFhYIGl0IGhhcyBpdCdzIG93biBzdHJ1Y3R1cmUuLi4g
IHBlcmhhcHMgd2Ugc2hvdWxkIGRlZmluZSBpdCBpbiB0aGUgZnV0dXJlXG4gICAgICAgIGhlYWRl
cnM/OiBhbnk7XG5cbiAgICAgICAgY2FjaGU/OiBhbnk7XG4gICAgICAgIHdpdGhDcmVkZW50aWFs
cz86IGJvb2xlYW47XG5cbiAgICAgICAgLy8gVGhlc2UgYWNjZXB0IG11bHRpcGxlIHR5cGVzLCBz
byBsZXQncyBkZWZpbmUgdGhlbSBhcyBhbnlcbiAgICAgICAgZGF0YT86IGFueTtcbiAgICAgICAg
dHJhbnNmb3JtUmVxdWVzdD86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U/OiBhbnk7
XG4gICAgICAgIHRpbWVvdXQ/OiBhbnk7IC8vIG51bWJlciB8IHByb21pc2VcbiAgICB9XG5cbiAg
ICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4ge1xuICAgICAgICAoZGF0YTogVCwg
c3RhdHVzOiBudW1iZXIsIGhlYWRlcnM6IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZywg
Y29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElI
dHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+IHtcbiAgICAgICAgZGF0YT86IFQ7XG4gICAgICAgIHN0
YXR1cz86IG51bWJlcjtcbiAgICAgICAgaGVhZGVycz86IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+
IHN0cmluZztcbiAgICAgICAgY29uZmlnPzogSVJlcXVlc3RDb25maWc7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElIdHRwUHJvbWlzZTxUPiBleHRlbmRzIElQcm9taXNlPFQ+IHtcbiAgICAgICAg
c3VjY2VzcyhjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21pc2U8
VD47XG4gICAgICAgIGVycm9yKGNhbGxiYWNrOiBJSHR0cFByb21pc2VDYWxsYmFjazxUPik6IElI
dHRwUHJvbWlzZTxUPjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChy
ZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IFRSZXN1bHQsIGVycm9yQ2Fs
bGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJ
UHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6
IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IElQcm9taXNlPFRSZXN1
bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxU
PikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElI
dHRwUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGVmYXVsdHM6
IElSZXF1ZXN0Q29uZmlnO1xuICAgICAgICBpbnRlcmNlcHRvcnM6IGFueVtdO1xuICAgICAgICBy
ZXNwb25zZUludGVyY2VwdG9yczogYW55W107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gSHR0cEJhY2tlbmRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiRodHRwQmFja2VuZFxuICAgIC8vIFlvdSBzaG91bGQgbmV2ZXIg
bmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5LlxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJSHR0cEJhY2tlbmRTZXJ2aWNlIHtcbiAgICAgICAgLy8gWFhYIFBl
cmhhcHMgZGVmaW5lIGNhbGxiYWNrIHNpZ25hdHVyZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgICht
ZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHBvc3Q/OiBhbnksIGNhbGxiYWNrPzogRnVuY3Rp
b24sIGhlYWRlcnM/OiBhbnksIHRpbWVvdXQ/OiBudW1iZXIsIHdpdGhDcmVkZW50aWFscz86IGJv
b2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIElu
dGVycG9sYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kaW50ZXJwb2xhdGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGludGVycG9sYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUludGVycG9sYXRlU2VydmljZSB7XG4gICAgICAgICh0ZXh0OiBzdHJpbmcsIG11
c3RIYXZlRXhwcmVzc2lvbj86IGJvb2xlYW4pOiBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uO1xuICAg
ICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7
XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0aW9uRnVuY3Rpb24ge1xuICAgICAg
ICAoY29udGV4dDogYW55KTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJw
b2xhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBzdGFydFN5
bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50
ZXJwb2xhdGVQcm92aWRlcjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAg
ZW5kU3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUZW1wbGF0ZUNhY2hlU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGVtcGxhdGVDYWNoZVxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGVtcGxhdGVDYWNoZVNlcnZp
Y2UgZXh0ZW5kcyBJQ2FjaGVPYmplY3Qge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIFJvb3RTY29wZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJHJvb3RTY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJUm9vdFNjb3BlU2VydmljZSBleHRlbmRzIElTY29wZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gU0NFU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kc2NlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdGludGVyZmFjZSBJ
U0NFU2VydmljZSB7XG5cdFx0Z2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDog
YW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRDc3ModmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRU
cnVzdGVkSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRKcyh2YWx1ZTogYW55
KTogYW55O1xuXHRcdGdldFRydXN0ZWRSZXNvdXJjZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRc
dGdldFRydXN0ZWRVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRwYXJzZSh0eXBlOiBzdHJpbmcs
IGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7
XG5cdFx0cGFyc2VBc0NzcyhleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2Nh
bHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNIdG1sKGV4cHJlc3Npb246IHN0cmluZyk6IChj
b250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0pzKGV4cHJlc3Np
b246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFy
c2VBc1Jlc291cmNlVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2Fs
czogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1VybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29u
dGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHRydXN0QXModHlwZTogc3RyaW5n
LCB2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5c
dFx0dHJ1c3RBc0pzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1Jlc291cmNlVXJsKHZh
bHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1VybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGlz
RW5hYmxlZCgpOiBib29sZWFuO1xuXHR9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBTQ0VQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kc2NlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVND
RVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGVuYWJsZWQodmFs
dWU6IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIFNDRURlbGVnYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSVNDRURlbGVnYXRlU2VydmljZSB7XG4gICAgICAgIGdldFRydXN0ZWQodHlwZTogc3Ry
aW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcbiAgICAgICAgdHJ1c3RBcyh0eXBlOiBzdHJp
bmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgIHZhbHVlT2YodmFsdWU6IGFueSk6IGFueTtc
biAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlUHJv
dmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZURl
bGVnYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVND
RURlbGVnYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVz
b3VyY2VVcmxCbGFja2xpc3QoYmxhY2tsaXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHJlc291
cmNlVXJsV2hpdGVsaXN0KHdoaXRlbGlzdDogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERpcmVjdGl2ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZVxuICAgIC8v
IGFuZCBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpcmVjdGl2ZVxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuXG4gICAgaW50ZXJmYWNlIElEaXJlY3RpdmV7XG4gICAgICAgIGNvbXBp
bGU/OlxuICAgICAgICAgICAgKHRlbXBsYXRlRWxlbWVudDogYW55LFxuICAgICAgICAgICAgdGVt
cGxhdGVBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAgICAgICAgIHRyYW5zY2x1ZGU6IChz
Y29wZTogSVNjb3BlLCBjbG9uZUxpbmtpbmdGbjogRnVuY3Rpb24pID0+IHZvaWRcbiAgICAgICAg
ICAgICkgPT4gYW55O1xuICAgICAgICBjb250cm9sbGVyPzogYW55O1xuICAgICAgICBjb250cm9s
bGVyQXM/OiBzdHJpbmc7XG4gICAgICAgIGxpbms/OlxuICAgICAgICAgICAgKHNjb3BlOiBJU2Nv
cGUsXG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIGluc3Rh
bmNlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBjb250cm9sbGVyOiBhbnlc
biAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAg
cHJpb3JpdHk/OiBudW1iZXI7XG4gICAgICAgIHJlcGxhY2U/OiBib29sZWFuO1xuICAgICAgICBy
ZXF1aXJlPzogYW55O1xuICAgICAgICByZXN0cmljdD86IHN0cmluZztcbiAgICAgICAgc2NvcGU/
OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZVVybD86IGFu
eTtcbiAgICAgICAgdGVybWluYWw/OiBib29sZWFuO1xuICAgICAgICB0cmFuc2NsdWRlPzogYW55
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFuZ3VsYXIuZWxlbWVu
dFxuICAgIC8vIHdoZW4gY2FsbGluZyBhbmd1bGFyLmVsZW1lbnQsIGFuZ3VsYXIgcmV0dXJucyBh
IGpRdWVyeSBvYmplY3QsXG4gICAgLy8gYXVnbWVudGVkIHdpdGggYWRkaXRpb25hbCBtZXRob2Rz
IGxpa2UgZS5nLiBzY29wZS5cbiAgICAvLyBzZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL2FuZ3VsYXIuZWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljIGV4dGVuZHMgSlF1ZXJ5U3RhdGljIHtcbiAgICAgICAg
KHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAg
ICAgICAoZWxlbWVudDogRWxlbWVudCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmpl
Y3Q6IHt9KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVsZW1lbnRBcnJheTogRWxlbWVu
dFtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDogSlF1ZXJ5KTogSUF1Z21l
bnRlZEpRdWVyeTtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uKTogSUF1Z21lbnRlZEpRdWVyeTtc
biAgICAgICAgKGFycmF5OiBhbnlbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgICgpOiBJ
QXVnbWVudGVkSlF1ZXJ5O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5
IGV4dGVuZHMgSlF1ZXJ5IHtcbiAgICAgICAgLy8gVE9ETzogZXZlbnRzLCBob3cgdG8gZGVmaW5l
P1xuICAgICAgICAvLyRkZXN0cm95XG5cbiAgICAgICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTog
SUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChlbGVtZW50OiBhbnkpOiBJQXVnbWVudGVk
SlF1ZXJ5O1xuICAgICAgICBmaW5kKG9iajogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcblxu
ICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgaW5qZWN0b3Io
KTogYW55O1xuICAgICAgICBzY29wZSgpOiBJU2NvcGU7XG5cbiAgICAgICAgaW5oZXJpdGVkRGF0
YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0
YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0
ZWREYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuXG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBBVVRPIG1vZHVsZSAoYW5ndWxhci5qcylcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBleHBvcnQgbW9kdWxlIGF1dG8ge1xuXG4gICAgICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgICAgIC8vIEluamVjdG9yU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kaW5qZWN0b3JcbiAgICAgICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAgICAgaW50ZXJmYWNlIElJbmplY3RvclNlcnZpY2Uge1xuICAgICAgICAgICAgYW5u
b3RhdGUoZm46IEZ1bmN0aW9uKTogc3RyaW5nW107XG4gICAgICAgICAgICBhbm5vdGF0ZShpbmxp
bmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBzdHJpbmdbXTtcbiAgICAgICAgICAgIGdldCAo
bmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICAgICAgaW5zdGFudGlhdGUodHlwZUNvbnN0cnVj
dG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGlu
bGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IGFueTtcbiAgICAgICAgICAgIGludm9rZShm
dW5jOiBGdW5jdGlvbiwgY29udGV4dD86IGFueSwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAg
ICB9XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gUHJvdmlkZVNlcnZpY2Vc
biAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJHByb3Zp
ZGVcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElQcm92aWRlU2Vy
dmljZSB7XG4gICAgICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgaXQgcmV0dXJucyB0aGUg
cmVnaXN0ZXJlZCBpbnN0YW5jZSwgYnV0IGFjdHVhbFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50
YXRpb24gZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICAgICAgICAgICAgLy8gY29uc3RhbnQo
bmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICAgICAgY29uc3RhbnQobmFt
ZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAgICAgICAgZGVjb3JhdG9yKG5h
bWU6IHN0cmluZywgZGVjb3JhdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgICAgICBkZWNv
cmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3JJbmxpbmU6IGFueVtdKTogdm9pZDtcbiAgICAg
ICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5j
dGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0
cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogbmcuSVNlcnZpY2VQcm92aWRl
cjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgcHJvdmlkZXI6IG5nLklTZXJ2
aWNlUHJvdmlkZXIpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIo
bmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5J
U2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGNvbnN0
cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICB2YWx1
ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAg
ICB9XG5cbiAgICB9XG59XG4vLyBtb2RlbHMvVG9kb0l0ZW0udHNcblxubW9kdWxlIHRvZG9zIHtc
biAgICAndXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnQgY2xhc3MgVG9kb0l0ZW0ge1xuICAgICAg
ICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nLFxuICAgICAg
ICAgICAgcHVibGljIGNvbXBsZXRlZDogYm9vbGVhblxuICAgICAgICAgICAgKSB7IH1cbiAgICB9
XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU2NvcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhw
b3J0IGludGVyZmFjZSBJVG9kb1Njb3BlIGV4dGVuZHMgbmcuSVNjb3BlIHtcblx0XHR0b2Rvczog
VG9kb0l0ZW1bXTtcblx0XHRuZXdUb2RvOiBzdHJpbmc7XG5cdFx0ZWRpdGVkVG9kbzogVG9kb0l0
ZW07XG5cdFx0b3JpZ2luYWxUb2RvOiBUb2RvSXRlbTtcblx0XHRyZW1haW5pbmdDb3VudDogbnVt
YmVyO1xuXHRcdGRvbmVDb3VudDogbnVtYmVyO1xuXHRcdGFsbENoZWNrZWQ6IGJvb2xlYW47XG5c
dFx0cmV2ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0c3RhdHVzRmlsdGVyOiB7IGNvbXBsZXRlZD86IGJv
b2xlYW4gfTtcblx0XHRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZTtcblx0XHR2bTogVG9k
b0N0cmw7XG5cdH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0
b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TdG9yYWdlIHtcblx0XHRnZXQgKCk6IFRv
ZG9JdGVtW107XG5cdFx0cHV0KHRvZG9zOiBUb2RvSXRlbVtdKTtcblx0fVxufS8vIGRpcmVjdGl2
ZXMvVG9kb0ZvY3VzLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQv
Kipcblx0ICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3VzIG9uIHRoZSBlbGVtZW50IGl0IGlz
IGFwcGxpZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lvbiBpdCBiaW5kcyB0byBldmFsdWF0ZXMgdG8g
dHJ1ZS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRm9jdXMoJHRpbWVvdXQ6IG5nLklU
aW1lb3V0U2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRsaW5r
OiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9
PiB7XG5cdFx0XHRcdCRzY29wZS4kd2F0Y2goYXR0cmlidXRlcy50b2RvRm9jdXMsIG5ld3ZhbCA9
PiB7XG5cdFx0XHRcdFx0aWYgKG5ld3ZhbCkge1xuXHRcdFx0XHRcdFx0JHRpbWVvdXQoKCkgPT4g
ZWxlbWVudFswXS5mb2N1cygpLCAwLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtc
blx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0dG9kb0ZvY3VzLiRpbmplY3QgPSBbJyR0aW1lb3V0
J107XG5cbn0vLyBkaXJlY3RpdmVzL1RvZG9CbHVyLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAg
J3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogRGlyZWN0aXZlIHRoYXQgZXhlY3V0ZXMg
YW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gbG9zZXMgZm9j
dXMuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRvZG9CbHVyKCk6IG5nLklEaXJlY3Rp
dmUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGluazogKCRzY29wZTogbmcuSVNj
b3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAg
ICAgIGVsZW1lbnQuYmluZCgnYmx1cicsICgpID0+IHsgJHNjb3BlLiRhcHBseShhdHRyaWJ1dGVz
LnRvZG9CbHVyKTsgfSk7XG4gICAgICAgICAgICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAo
KSA9PiB7IGVsZW1lbnQudW5iaW5kKCdibHVyJyk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAg
ICB9O1xuICAgIH1cbn1cbi8vIGRpcmVjdGl2ZXMvVG9kb0VzY2FwZS50c1xuXG5tb2R1bGUgdG9k
b3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0Y29uc3QgRVNDQVBFX0tFWSA9IDI3O1xuXG5cdC8q
KlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBjYW5jZWxzIGVkaXRpbmcgYSB0b2RvIGlmIHRoZSB1c2Vy
IHByZXNzZXMgdGhlIEVzYyBrZXkuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0VzY2Fw
ZSgpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29wZTog
bmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRcdFx0
XHRlbGVtZW50LmJpbmQoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRpZiAoZXZl
bnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWSkge1xuXHRcdFx0XHRcdFx0JHNjb3BlLiRhcHBseShh
dHRyaWJ1dGVzLnRvZG9Fc2NhcGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRc
dFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdrZXlkb3du
Jyk7IH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn1cbi8vIHNlcnZpY2VzL1RvZG9TdG9yYWdl
LnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAg
ICogU2VydmljZXMgdGhhdCBwZXJzaXN0cyBhbmQgcmV0cmlldmVzIFRPRE9zIGZyb20gbG9jYWxT
dG9yYWdlLlxuICAgICAqL1xuICAgIGV4cG9ydCBjbGFzcyBUb2RvU3RvcmFnZSBpbXBsZW1lbnRz
IElUb2RvU3RvcmFnZSB7XG5cbiAgICAgICAgU1RPUkFHRV9JRCA9ICd0b2Rvcy1hbmd1bGFyanMt
dHlwZXNjcmlwdCc7XG5cbiAgICAgICAgZ2V0ICgpOiBUb2RvSXRlbVtdIHtcbiAgICAgICAgICAg
IHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCkg
fHwgJ1tdJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXQodG9kb3M6IFRvZG9JdGVtW10pIHtc
biAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCwgSlNPTi5z
dHJpbmdpZnkodG9kb3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn0vLyBjb250cm9sbGVycy9Ub2Rv
Q3RybC50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAq
IFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBhcHAuIFRoZSBjb250cm9sbGVyOlxuXHQgKiAt
IHJldHJpZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1vZGVsIHZpYSB0aGUgdG9kb1N0b3JhZ2Ugc2Vy
dmljZVxuXHQgKiAtIGV4cG9zZXMgdGhlIG1vZGVsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgcHJvdmlk
ZXMgZXZlbnQgaGFuZGxlcnNcblx0ICovXG5cdGV4cG9ydCBjbGFzcyBUb2RvQ3RybCB7XG5cblx0
XHRwcml2YXRlIHRvZG9zOiBUb2RvSXRlbVtdO1xuXG5cdFx0Ly8gJGluamVjdCBhbm5vdGF0aW9u
LlxuXHRcdC8vIEl0IHByb3ZpZGVzICRpbmplY3RvciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGRl
cGVuZGVuY2llcyB0byBiZSBpbmplY3RlZCBpbnRvIGNvbnN0cnVjdG9yXG5cdFx0Ly8gaXQgaXMg
YmV0dGVyIHRvIGhhdmUgaXQgY2xvc2UgdG8gdGhlIGNvbnN0cnVjdG9yLCBiZWNhdXNlIHRoZSBw
YXJhbWV0ZXJzIG11c3QgbWF0Y2ggaW4gY291bnQgYW5kIHR5cGUuXG5cdFx0Ly8gU2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlcblx0XHRwdWJsaWMgc3RhdGljICRpbmplY3Qg
PSBbXG5cdFx0XHQnJHNjb3BlJyxcblx0XHRcdCckbG9jYXRpb24nLFxuXHRcdFx0J3RvZG9TdG9y
YWdlJyxcblx0XHRcdCdmaWx0ZXJGaWx0ZXInXG5cdFx0XTtcblxuXHRcdC8vIGRlcGVuZGVuY2ll
cyBhcmUgaW5qZWN0ZWQgdmlhIEFuZ3VsYXJKUyAkaW5qZWN0b3Jcblx0XHQvLyBjb250cm9sbGVy
J3MgbmFtZSBpcyByZWdpc3RlcmVkIGluIEFwcGxpY2F0aW9uLnRzIGFuZCBzcGVjaWZpZWQgZnJv
bSBuZy1jb250cm9sbGVyIGF0dHJpYnV0ZSBpbiBpbmRleC5odG1sXG5cdFx0Y29uc3RydWN0b3Io
XG5cdFx0XHRwcml2YXRlICRzY29wZTogSVRvZG9TY29wZSxcblx0XHRcdHByaXZhdGUgJGxvY2F0
aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxuXHRcdFx0cHJpdmF0ZSB0b2RvU3RvcmFnZTogSVRv
ZG9TdG9yYWdlLFxuXHRcdFx0cHJpdmF0ZSBmaWx0ZXJGaWx0ZXJcblx0XHQpIHtcblx0XHRcdHRo
aXMudG9kb3MgPSAkc2NvcGUudG9kb3MgPSB0b2RvU3RvcmFnZS5nZXQoKTtcblxuXHRcdFx0JHNj
b3BlLm5ld1RvZG8gPSAnJztcblx0XHRcdCRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblxuXHRc
dFx0Ly8gJ3ZtJyBzdGFuZHMgZm9yICd2aWV3IG1vZGVsJy4gV2UncmUgYWRkaW5nIGEgcmVmZXJl
bmNlIHRvIHRoZSBjb250cm9sbGVyIHRvIHRoZSBzY29wZVxuXHRcdFx0Ly8gZm9yIGl0cyBtZXRo
b2RzIHRvIGJlIGFjY2Vzc2libGUgZnJvbSB2aWV3IC8gSFRNTFxuXHRcdFx0JHNjb3BlLnZtID0g
dGhpcztcblxuXHRcdFx0Ly8gd2F0Y2hpbmcgZm9yIGV2ZW50cy9jaGFuZ2VzIGluIHNjb3BlLCB3
aGljaCBhcmUgY2F1c2VkIGJ5IHZpZXcvdXNlciBpbnB1dFxuXHRcdFx0Ly8gaWYgeW91IHN1YnNj
cmliZSB0byBzY29wZSBvciBldmVudCB3aXRoIGxpZmV0aW1lIGxvbmdlciB0aGFuIHRoaXMgY29u
dHJvbGxlciwgbWFrZSBzdXJlIHlvdSB1bnN1YnNjcmliZS5cblx0XHRcdCRzY29wZS4kd2F0Y2go
J3RvZG9zJywgKCkgPT4gdGhpcy5vblRvZG9zKCksIHRydWUpO1xuXHRcdFx0JHNjb3BlLiR3YXRj
aCgnbG9jYXRpb24ucGF0aCgpJywgcGF0aCA9PiB0aGlzLm9uUGF0aChwYXRoKSlcblxuXHRcdFx0
aWYgKCRsb2NhdGlvbi5wYXRoKCkgPT09ICcnKSAkbG9jYXRpb24ucGF0aCgnLycpO1xuXHRcdFx0
JHNjb3BlLmxvY2F0aW9uID0gJGxvY2F0aW9uO1xuXHRcdH1cblxuXHRcdG9uUGF0aChwYXRoOiBz
dHJpbmcpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnN0YXR1c0ZpbHRlciA9IChwYXRoID09PSAnL2Fj
dGl2ZScpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IGZhbHNlIH0gOiAocGF0aCA9PT0gJy9jb21w
bGV0ZWQnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiB0cnVlIH0gOiB7fTtcblx0XHR9XG5cblx0
XHRvblRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnQgPSB0aGlzLmZp
bHRlckZpbHRlcih0aGlzLnRvZG9zLCB7IGNvbXBsZXRlZDogZmFsc2UgfSkubGVuZ3RoO1xuXHRc
dFx0dGhpcy4kc2NvcGUuZG9uZUNvdW50ID0gdGhpcy50b2Rvcy5sZW5ndGggLSB0aGlzLiRzY29w
ZS5yZW1haW5pbmdDb3VudDtcblx0XHRcdHRoaXMuJHNjb3BlLmFsbENoZWNrZWQgPSAhdGhpcy4k
c2NvcGUucmVtYWluaW5nQ291bnRcblx0XHRcdHRoaXMudG9kb1N0b3JhZ2UucHV0KHRoaXMudG9k
b3MpO1xuXHRcdH1cblxuXHRcdGFkZFRvZG8oKSB7XG5cdFx0XHR2YXIgbmV3VG9kbyA6IHN0cmlu
ZyA9IHRoaXMuJHNjb3BlLm5ld1RvZG8udHJpbSgpO1xuXHRcdFx0aWYgKCFuZXdUb2RvLmxlbmd0
aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudG9kb3MucHVzaChu
ZXcgVG9kb0l0ZW0obmV3VG9kbywgZmFsc2UpKTtcblx0XHRcdHRoaXMuJHNjb3BlLm5ld1RvZG8g
PSAnJztcblx0XHR9XG5cblx0XHRlZGl0VG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRc
dHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSB0b2RvSXRlbTtcblxuXHRcdFx0Ly8gQ2xvbmUgdGhl
IG9yaWdpbmFsIHRvZG8gaW4gY2FzZSBlZGl0aW5nIGlzIGNhbmNlbGxlZC5cblx0XHRcdHRoaXMu
JHNjb3BlLm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCB0b2RvSXRlbSk7XG5cdFx0
fVxuXG5cdFx0cmV2ZXJ0RWRpdHModG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRv
ZG9zW3RoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSldID0gdGhpcy4kc2NvcGUub3JpZ2luYWxU
b2RvO1xuXHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGRv
bmVFZGl0aW5nKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVk
VG9kbyA9IG51bGw7XG5cdFx0XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBudWxsO1xuXHRc
dFx0aWYgKHRoaXMuJHNjb3BlLnJldmVydGVkKSB7XG5cdFx0XHRcdC8vIFRvZG8gZWRpdHMgd2Vy
ZSByZXZlcnRlZCwgZG9uJ3Qgc2F2ZS5cblx0XHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSBu
dWxsO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0b2RvSXRlbS50aXRsZSA9IHRv
ZG9JdGVtLnRpdGxlLnRyaW0oKTtcblx0XHRcdGlmICghdG9kb0l0ZW0udGl0bGUpIHtcblx0XHRc
dFx0dGhpcy5yZW1vdmVUb2RvKHRvZG9JdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZW1v
dmVUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvcy5zcGxpY2UodGhp
cy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKSwgMSk7XG5cdFx0fVxuXG5cdFx0Y2xlYXJEb25lVG9k
b3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS50b2RvcyA9IHRoaXMudG9kb3MgPSB0aGlzLnRvZG9z
LmZpbHRlcih0b2RvSXRlbSA9PiAhdG9kb0l0ZW0uY29tcGxldGVkKTtcblx0XHR9XG5cblx0XHRt
YXJrQWxsKGNvbXBsZXRlZDogYm9vbGVhbikge1xuXHRcdFx0dGhpcy50b2Rvcy5mb3JFYWNoKHRv
ZG9JdGVtID0+IHsgdG9kb0l0ZW0uY29tcGxldGVkID0gY29tcGxldGVkOyB9KTtcblx0XHR9XG5c
dH1cblxufVxuLy8gQXBwbGljYXRpb24udHNcblxuLyoqXG4gKiBUaGUgbWFpbiBUb2RvTVZDIGFw
cCBtb2R1bGUuXG4gKlxuICogQHR5cGUge2FuZ3VsYXIuTW9kdWxlfVxuICovXG5tb2R1bGUgdG9k
b3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0b2RvbXZjID0gYW5ndWxhci5tb2R1
bGUoJ3RvZG9tdmMnLCBbXSlcbiAgICAgICAgICAgIC5jb250cm9sbGVyKCd0b2RvQ3RybCcsIFRv
ZG9DdHJsKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0JsdXInLCB0b2RvQmx1cilcbiAg
ICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1cycsIHRvZG9Gb2N1cylcbiAgICAgICAgICAg
IC5kaXJlY3RpdmUoJ3RvZG9Fc2NhcGUnLCB0b2RvRXNjYXBlKVxuICAgICAgICAgICAgLnNlcnZp
Y2UoJ3RvZG9TdG9yYWdlJywgVG9kb1N0b3JhZ2UpO1xufVxuIgorbW9kdWxlLmV4cG9ydHMgPSAi
Ly8gbGlicy9qcXVlcnkvanF1ZXJ5LmQudHNcbi8qICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5
cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbkxp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vu
c2VcIik7IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcbkxpY2Vuc2UgYXQg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblRISVMgQ09ERSBJ
UyBQUk9WSURFRCAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRI
T1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBU
SVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXG5NRVJDSEFOVEFCTElUWSBP
UiBOT04tSU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNl
IGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbmFuZCBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5cbi8vIFR5
cGluZyBmb3IgdGhlIGpRdWVyeSBsaWJyYXJ5LCB2ZXJzaW9uIDEuMTAueCAvIDIuMC54XG4vLyBQ
cm9qZWN0OiBodHRwOi8vanF1ZXJ5LmNvbS9cbi8vIERlZmluaXRpb25zIGJ5OiBCb3JpcyBZYW5r
b3YgPGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi8+LCBDaHJpc3RpYW4gSG9mZm1laXN0
ZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9mZm1laXN0ZXI+LCBTdGV2ZSBGZW50b24sIERpdWxs
ZWkgR29tZXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9EaXVsbGVpPiwgVGFzcyBJbGlvcG91bG9zIDxo
dHRwczovL2dpdGh1Yi5jb20vdGFzb2lsaT4sIEphc29uIFN3ZWFyaW5nZW4sIFNlYW4gSGlsbCA8
aHR0cHM6Ly9naXRodWIuY29tL3NlYW5za2k+LCBHdXVzIEdvb3NzZW5zIDxodHRwczovL2dpdGh1
Yi5jb20vR3V1ej4sIEtlbGx5IFN1bW1lcmxpbiA8aHR0cHM6Ly9naXRodWIuY29tL2tzdW1tZXJs
aW4+LCBCYXNhcmF0IEFsaSBTeWVkIDxodHRwczovL2dpdGh1Yi5jb20vYmFzYXJhdD4sIE5pY2hv
bGFzIFdvbHZlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL253b2x2ZXJzb24+LCBEZXJlayBDaWNl
cm9uZSA8aHR0cHM6Ly9naXRodWIuY29tL2RlcmVrY2ljZXJvbmU+LCBBbmRyZXcgR2FzcGFyIDxo
dHRwczovL2dpdGh1Yi5jb20vQW5kcmV3R2FzcGFyPiwgSmFtZXMgSGFycmlzb24gRmlzaGVyIDxo
dHRwczovL2dpdGh1Yi5jb20vamFtZXNoZmlzaGVyPiwgU2Vpa2ljaGkgS29uZG8gPGh0dHBzOi8v
Z2l0aHViLmNvbS9zZWlraWNoaT4sIEJlbmphbWluIEphY2ttYW4gPGh0dHBzOi8vZ2l0aHViLmNv
bS9iZW5qYW1pbmphY2ttYW4+LCBQb3VsIFNvcmVuc2VuIDxodHRwczovL2dpdGh1Yi5jb20vczA5
MzI5ND4sIEpvc2ggU3Ryb2JsIDxodHRwczovL2dpdGh1Yi5jb20vSm9zaFN0cm9ibD4sIEpvaG4g
UmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVpbGx5Lz5cbi8vIERlZmluaXRpb25z
OiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkXG5cbi8qXG4g
ICAgSW50ZXJmYWNlIGZvciB0aGUgQUpBWCBzZXR0aW5nIHRoYXQgd2lsbCBjb25maWd1cmUgdGhl
IEFKQVggcmVxdWVzdFxuKi9cbmludGVyZmFjZSBKUXVlcnlBamF4U2V0dGluZ3Mge1xuICAgIC8q
KlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgc2VudCBpbiB0aGUgcmVxdWVzdCBoZWFkZXIgdGhh
dCB0ZWxscyB0aGUgc2VydmVyIHdoYXQga2luZCBvZiByZXNwb25zZSBpdCB3aWxsIGFjY2VwdCBp
biByZXR1cm4uIElmIHRoZSBhY2NlcHRzIHNldHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBpdCBp
cyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhvZC5c
biAgICAgKi9cbiAgICBhY2NlcHRzPzogYW55O1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQs
IGFsbCByZXF1ZXN0cyBhcmUgc2VudCBhc3luY2hyb25vdXNseSAoaS5lLiB0aGlzIGlzIHNldCB0
byB0cnVlIGJ5IGRlZmF1bHQpLiBJZiB5b3UgbmVlZCBzeW5jaHJvbm91cyByZXF1ZXN0cywgc2V0
IHRoaXMgb3B0aW9uIHRvIGZhbHNlLiBDcm9zcy1kb21haW4gcmVxdWVzdHMgYW5kIGRhdGFUeXBl
OiBcImpzb25wXCIgcmVxdWVzdHMgZG8gbm90IHN1cHBvcnQgc3luY2hyb25vdXMgb3BlcmF0aW9u
LiBOb3RlIHRoYXQgc3luY2hyb25vdXMgcmVxdWVzdHMgbWF5IHRlbXBvcmFyaWx5IGxvY2sgdGhl
IGJyb3dzZXIsIGRpc2FibGluZyBhbnkgYWN0aW9ucyB3aGlsZSB0aGUgcmVxdWVzdCBpcyBhY3Rp
dmUuIEFzIG9mIGpRdWVyeSAxLjgsIHRoZSB1c2Ugb2YgYXN5bmM6IGZhbHNlIHdpdGgganFYSFIg
KCQuRGVmZXJyZWQpIGlzIGRlcHJlY2F0ZWQ7IHlvdSBtdXN0IHVzZSB0aGUgc3VjY2Vzcy9lcnJv
ci9jb21wbGV0ZSBjYWxsYmFjayBvcHRpb25zIGluc3RlYWQgb2YgdGhlIGNvcnJlc3BvbmRpbmcg
bWV0aG9kcyBvZiB0aGUganFYSFIgb2JqZWN0IHN1Y2ggYXMganFYSFIuZG9uZSgpIG9yIHRoZSBk
ZXByZWNhdGVkIGpxWEhSLnN1Y2Nlc3MoKS5cbiAgICAgKi9cbiAgICBhc3luYz86IGJvb2xlYW47
XG4gICAgLyoqXG4gICAgICogQSBwcmUtcmVxdWVzdCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNh
biBiZSB1c2VkIHRvIG1vZGlmeSB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSFRUUFJl
cXVlc3QpIG9iamVjdCBiZWZvcmUgaXQgaXMgc2VudC4gVXNlIHRoaXMgdG8gc2V0IGN1c3RvbSBo
ZWFkZXJzLCBldGMuIFRoZSBqcVhIUiBhbmQgc2V0dGluZ3Mgb2JqZWN0cyBhcmUgcGFzc2VkIGFz
IGFyZ3VtZW50cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LiBSZXR1cm5pbmcgZmFsc2UgaW4gdGhl
IGJlZm9yZVNlbmQgZnVuY3Rpb24gd2lsbCBjYW5jZWwgdGhlIHJlcXVlc3QuIEFzIG9mIGpRdWVy
eSAxLjUsIHRoZSBiZWZvcmVTZW5kIG9wdGlvbiB3aWxsIGJlIGNhbGxlZCByZWdhcmRsZXNzIG9m
IHRoZSB0eXBlIG9mIHJlcXVlc3QuXG4gICAgICovXG4gICAgYmVmb3JlU2VuZD8gKGpxWEhSOiBK
UXVlcnlYSFIsIHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3MpOiBhbnk7XG4gICAgLyoqXG4g
ICAgICogSWYgc2V0IHRvIGZhbHNlLCBpdCB3aWxsIGZvcmNlIHJlcXVlc3RlZCBwYWdlcyBub3Qg
dG8gYmUgY2FjaGVkIGJ5IHRoZSBicm93c2VyLiBOb3RlOiBTZXR0aW5nIGNhY2hlIHRvIGZhbHNl
IHdpbGwgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEhFQUQgYW5kIEdFVCByZXF1ZXN0cy4gSXQg
d29ya3MgYnkgYXBwZW5kaW5nIFwiXz17dGltZXN0YW1wfVwiIHRvIHRoZSBHRVQgcGFyYW1ldGVy
cy4gVGhlIHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIGZvciBvdGhlciB0eXBlcyBvZiByZXF1ZXN0
cywgZXhjZXB0IGluIElFOCB3aGVuIGEgUE9TVCBpcyBtYWRlIHRvIGEgVVJMIHRoYXQgaGFzIGFs
cmVhZHkgYmVlbiByZXF1ZXN0ZWQgYnkgYSBHRVQuXG4gICAgICovXG4gICAgY2FjaGU/OiBib29s
ZWFuO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJl
cXVlc3QgZmluaXNoZXMgKGFmdGVyIHN1Y2Nlc3MgYW5kIGVycm9yIGNhbGxiYWNrcyBhcmUgZXhl
Y3V0ZWQpLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdHdvIGFyZ3VtZW50czogVGhlIGpxWEhS
IChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3QgYW5kIGEgc3RyaW5nIGNh
dGVnb3JpemluZyB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0IChcInN1Y2Nlc3NcIiwgXCJub3Rt
b2RpZmllZFwiLCBcImVycm9yXCIsIFwidGltZW91dFwiLCBcImFib3J0XCIsIG9yIFwicGFyc2Vy
ZXJyb3JcIikuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBjb21wbGV0ZSBzZXR0aW5nIGNhbiBhY2Nl
cHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGlu
IHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBjb21wbGV0ZT8gKGpx
WEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAg
KiBBbiBvYmplY3Qgb2Ygc3RyaW5nL3JlZ3VsYXItZXhwcmVzc2lvbiBwYWlycyB0aGF0IGRldGVy
bWluZSBob3cgalF1ZXJ5IHdpbGwgcGFyc2UgdGhlIHJlc3BvbnNlLCBnaXZlbiBpdHMgY29udGVu
dCB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNvbnRlbnRzPzogeyBb
a2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLy9BY2NvcmRpbmcgdG8galF1ZXJ5LmFqYXggc291
cmNlIGNvZGUsIGFqYXgncyBvcHRpb24gYWN0dWFsbHkgYWxsb3dzIGNvbnRlbnRUeXBlIHRvIHNl
dCB0byBcImZhbHNlXCJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVm
aW5pdGVseVR5cGVkL2lzc3Vlcy83NDJcbiAgICAvKipcbiAgICAgKiBXaGVuIHNlbmRpbmcgZGF0
YSB0byB0aGUgc2VydmVyLCB1c2UgdGhpcyBjb250ZW50IHR5cGUuIERlZmF1bHQgaXMgXCJhcHBs
aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIiwgd2hpY2ggaXMg
ZmluZSBmb3IgbW9zdCBjYXNlcy4gSWYgeW91IGV4cGxpY2l0bHkgcGFzcyBpbiBhIGNvbnRlbnQt
dHlwZSB0byAkLmFqYXgoKSwgdGhlbiBpdCBpcyBhbHdheXMgc2VudCB0byB0aGUgc2VydmVyIChl
dmVuIGlmIG5vIGRhdGEgaXMgc2VudCkuIFRoZSBXM0MgWE1MSHR0cFJlcXVlc3Qgc3BlY2lmaWNh
dGlvbiBkaWN0YXRlcyB0aGF0IHRoZSBjaGFyc2V0IGlzIGFsd2F5cyBVVEYtODsgc3BlY2lmeWlu
ZyBhbm90aGVyIGNoYXJzZXQgd2lsbCBub3QgZm9yY2UgdGhlIGJyb3dzZXIgdG8gY2hhbmdlIHRo
ZSBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50VHlwZT86IGFueTtcbiAgICAvKipcbiAg
ICAgKiBUaGlzIG9iamVjdCB3aWxsIGJlIG1hZGUgdGhlIGNvbnRleHQgb2YgYWxsIEFqYXgtcmVs
YXRlZCBjYWxsYmFja3MuIEJ5IGRlZmF1bHQsIHRoZSBjb250ZXh0IGlzIGFuIG9iamVjdCB0aGF0
IHJlcHJlc2VudHMgdGhlIGFqYXggc2V0dGluZ3MgdXNlZCBpbiB0aGUgY2FsbCAoJC5hamF4U2V0
dGluZ3MgbWVyZ2VkIHdpdGggdGhlIHNldHRpbmdzIHBhc3NlZCB0byAkLmFqYXgpLlxuICAgICAq
L1xuICAgIGNvbnRleHQ/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YVR5cGUtdG8tZGF0YVR5cGUgY29udmVydGVycy4gRWFjaCBjb252ZXJ0ZXIncyB2YWx1
ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgdmFsdWUgb2YgdGhl
IHJlc3BvbnNlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNvbnZlcnRlcnM/
OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBJZiB5b3Ugd2lzaCB0
byBmb3JjZSBhIGNyb3NzRG9tYWluIHJlcXVlc3QgKHN1Y2ggYXMgSlNPTlApIG9uIHRoZSBzYW1l
IGRvbWFpbiwgc2V0IHRoZSB2YWx1ZSBvZiBjcm9zc0RvbWFpbiB0byB0cnVlLiBUaGlzIGFsbG93
cywgZm9yIGV4YW1wbGUsIHNlcnZlci1zaWRlIHJlZGlyZWN0aW9uIHRvIGFub3RoZXIgZG9tYWlu
LiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNyb3NzRG9tYWluPzogYm9vbGVh
bjtcbiAgICAvKipcbiAgICAgKiBEYXRhIHRvIGJlIHNlbnQgdG8gdGhlIHNlcnZlci4gSXQgaXMg
Y29udmVydGVkIHRvIGEgcXVlcnkgc3RyaW5nLCBpZiBub3QgYWxyZWFkeSBhIHN0cmluZy4gSXQn
cyBhcHBlbmRlZCB0byB0aGUgdXJsIGZvciBHRVQtcmVxdWVzdHMuIFNlZSBwcm9jZXNzRGF0YSBv
cHRpb24gdG8gcHJldmVudCB0aGlzIGF1dG9tYXRpYyBwcm9jZXNzaW5nLiBPYmplY3QgbXVzdCBi
ZSBLZXkvVmFsdWUgcGFpcnMuIElmIHZhbHVlIGlzIGFuIEFycmF5LCBqUXVlcnkgc2VyaWFsaXpl
cyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBzYW1lIGtleSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhl
IHRyYWRpdGlvbmFsIHNldHRpbmcgKGRlc2NyaWJlZCBiZWxvdykuXG4gICAgICovXG4gICAgZGF0
YT86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gaGFuZGxl
IHRoZSByYXcgcmVzcG9uc2UgZGF0YSBvZiBYTUxIdHRwUmVxdWVzdC5UaGlzIGlzIGEgcHJlLWZp
bHRlcmluZyBmdW5jdGlvbiB0byBzYW5pdGl6ZSB0aGUgcmVzcG9uc2UuIFlvdSBzaG91bGQgcmV0
dXJuIHRoZSBzYW5pdGl6ZWQgZGF0YS4gVGhlIGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGFyZ3VtZW50
czogVGhlIHJhdyBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciBhbmQgdGhlICdkYXRhVHlw
ZScgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIGRhdGFGaWx0ZXI/IChkYXRhOiBhbnksIHR5OiBh
bnkpOiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgZGF0YSB0aGF0IHlvdSdyZSBl
eHBlY3RpbmcgYmFjayBmcm9tIHRoZSBzZXJ2ZXIuIElmIG5vbmUgaXMgc3BlY2lmaWVkLCBqUXVl
cnkgd2lsbCB0cnkgdG8gaW5mZXIgaXQgYmFzZWQgb24gdGhlIE1JTUUgdHlwZSBvZiB0aGUgcmVz
cG9uc2UgKGFuIFhNTCBNSU1FIHR5cGUgd2lsbCB5aWVsZCBYTUwsIGluIDEuNCBKU09OIHdpbGwg
eWllbGQgYSBKYXZhU2NyaXB0IG9iamVjdCwgaW4gMS40IHNjcmlwdCB3aWxsIGV4ZWN1dGUgdGhl
IHNjcmlwdCwgYW5kIGFueXRoaW5nIGVsc2Ugd2lsbCBiZSByZXR1cm5lZCBhcyBhIHN0cmluZyku
XG4gICAgICovXG4gICAgZGF0YVR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBmdW5j
dGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFRoZSBmdW5jdGlvbiByZWNl
aXZlcyB0aHJlZSBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIdHRw
UmVxdWVzdCkgb2JqZWN0LCBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGVycm9yIHRo
YXQgb2NjdXJyZWQgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlvbiBvYmplY3QsIGlmIG9uZSBvY2N1
cnJlZC4gUG9zc2libGUgdmFsdWVzIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IChiZXNpZGVzIG51
bGwpIGFyZSBcInRpbWVvdXRcIiwgXCJlcnJvclwiLCBcImFib3J0XCIsIGFuZCBcInBhcnNlcmVy
cm9yXCIuIFdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMsIGVycm9yVGhyb3duIHJlY2VpdmVzIHRo
ZSB0ZXh0dWFsIHBvcnRpb24gb2YgdGhlIEhUVFAgc3RhdHVzLCBzdWNoIGFzIFwiTm90IEZvdW5k
XCIgb3IgXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IuXCIgQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGVy
cm9yIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rp
b24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gTm90ZTogVGhpcyBoYW5kbGVyIGlzIG5vdCBjYWxs
ZWQgZm9yIGNyb3NzLWRvbWFpbiBzY3JpcHQgYW5kIGNyb3NzLWRvbWFpbiBKU09OUCByZXF1ZXN0
cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGVycm9yPyAoanFYSFI6IEpR
dWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nLCBlcnJvclRocm93OiBzdHJpbmcpOiBhbnk7XG4g
ICAgLyoqXG4gICAgICogV2hldGhlciB0byB0cmlnZ2VyIGdsb2JhbCBBamF4IGV2ZW50IGhhbmRs
ZXJzIGZvciB0aGlzIHJlcXVlc3QuIFRoZSBkZWZhdWx0IGlzIHRydWUuIFNldCB0byBmYWxzZSB0
byBwcmV2ZW50IHRoZSBnbG9iYWwgaGFuZGxlcnMgbGlrZSBhamF4U3RhcnQgb3IgYWpheFN0b3Ag
ZnJvbSBiZWluZyB0cmlnZ2VyZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB2YXJpb3Vz
IEFqYXggRXZlbnRzLlxuICAgICAqL1xuICAgIGdsb2JhbD86IGJvb2xlYW47XG4gICAgLyoqXG4g
ICAgICogQW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgaGVhZGVyIGtleS92YWx1ZSBwYWlycyB0byBz
ZW5kIGFsb25nIHdpdGggcmVxdWVzdHMgdXNpbmcgdGhlIFhNTEh0dHBSZXF1ZXN0IHRyYW5zcG9y
dC4gVGhlIGhlYWRlciBYLVJlcXVlc3RlZC1XaXRoOiBYTUxIdHRwUmVxdWVzdCBpcyBhbHdheXMg
YWRkZWQsIGJ1dCBpdHMgZGVmYXVsdCBYTUxIdHRwUmVxdWVzdCB2YWx1ZSBjYW4gYmUgY2hhbmdl
ZCBoZXJlLiBWYWx1ZXMgaW4gdGhlIGhlYWRlcnMgc2V0dGluZyBjYW4gYWxzbyBiZSBvdmVyd3Jp
dHRlbiBmcm9tIHdpdGhpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbi4gKHZlcnNpb24gYWRkZWQ6
IDEuNSlcbiAgICAgKi9cbiAgICBoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4g
ICAgLyoqXG4gICAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8gYmUgc3VjY2Vzc2Z1bCBvbmx5IGlm
IHRoZSByZXNwb25zZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCByZXF1ZXN0LiBUaGlzIGlz
IGRvbmUgYnkgY2hlY2tpbmcgdGhlIExhc3QtTW9kaWZpZWQgaGVhZGVyLiBEZWZhdWx0IHZhbHVl
IGlzIGZhbHNlLCBpZ25vcmluZyB0aGUgaGVhZGVyLiBJbiBqUXVlcnkgMS40IHRoaXMgdGVjaG5p
cXVlIGFsc28gY2hlY2tzIHRoZSAnZXRhZycgc3BlY2lmaWVkIGJ5IHRoZSBzZXJ2ZXIgdG8gY2F0
Y2ggdW5tb2RpZmllZCBkYXRhLlxuICAgICAqL1xuICAgIGlmTW9kaWZpZWQ/OiBib29sZWFuO1xu
ICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSBjdXJyZW50IGVudmlyb25tZW50IHRvIGJlIHJlY29n
bml6ZWQgYXMgXCJsb2NhbCxcIiAoZS5nLiB0aGUgZmlsZXN5c3RlbSksIGV2ZW4gaWYgalF1ZXJ5
IGRvZXMgbm90IHJlY29nbml6ZSBpdCBhcyBzdWNoIGJ5IGRlZmF1bHQuIFRoZSBmb2xsb3dpbmcg
cHJvdG9jb2xzIGFyZSBjdXJyZW50bHkgcmVjb2duaXplZCBhcyBsb2NhbDogZmlsZSwgKi1leHRl
bnNpb24sIGFuZCB3aWRnZXQuIElmIHRoZSBpc0xvY2FsIHNldHRpbmcgbmVlZHMgbW9kaWZpY2F0
aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAkLmFqYXhTZXR1cCgp
IG1ldGhvZC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIGlzTG9jYWw/OiBi
b29sZWFuO1xuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBu
YW1lIGluIGEganNvbnAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBv
ZiAnY2FsbGJhY2snIGluIHRoZSAnY2FsbGJhY2s9PycgcGFydCBvZiB0aGUgcXVlcnkgc3RyaW5n
IGluIHRoZSB1cmwuIFNvIHtqc29ucDonb25KU09OUExvYWQnfSB3b3VsZCByZXN1bHQgaW4gJ29u
SlNPTlBMb2FkPT8nIHBhc3NlZCB0byB0aGUgc2VydmVyLiBBcyBvZiBqUXVlcnkgMS41LCBzZXR0
aW5nIHRoZSBqc29ucCBvcHRpb24gdG8gZmFsc2UgcHJldmVudHMgalF1ZXJ5IGZyb20gYWRkaW5n
IHRoZSBcIj9jYWxsYmFja1wiIHN0cmluZyB0byB0aGUgVVJMIG9yIGF0dGVtcHRpbmcgdG8gdXNl
IFwiPT9cIiBmb3IgdHJhbnNmb3JtYXRpb24uIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCBhbHNv
IGV4cGxpY2l0bHkgc2V0IHRoZSBqc29ucENhbGxiYWNrIHNldHRpbmcuIEZvciBleGFtcGxlLCB7
IGpzb25wOiBmYWxzZSwganNvbnBDYWxsYmFjazogXCJjYWxsYmFja05hbWVcIiB9XG4gICAgICov
XG4gICAganNvbnA/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB0aGUgY2FsbGJh
Y2sgZnVuY3Rpb24gbmFtZSBmb3IgYSBKU09OUCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUg
dXNlZCBpbnN0ZWFkIG9mIHRoZSByYW5kb20gbmFtZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBi
eSBqUXVlcnkuIEl0IGlzIHByZWZlcmFibGUgdG8gbGV0IGpRdWVyeSBnZW5lcmF0ZSBhIHVuaXF1
ZSBuYW1lIGFzIGl0J2xsIG1ha2UgaXQgZWFzaWVyIHRvIG1hbmFnZSB0aGUgcmVxdWVzdHMgYW5k
IHByb3ZpZGUgY2FsbGJhY2tzIGFuZCBlcnJvciBoYW5kbGluZy4gWW91IG1heSB3YW50IHRvIHNw
ZWNpZnkgdGhlIGNhbGxiYWNrIHdoZW4geW91IHdhbnQgdG8gZW5hYmxlIGJldHRlciBicm93c2Vy
IGNhY2hpbmcgb2YgR0VUIHJlcXVlc3RzLiBBcyBvZiBqUXVlcnkgMS41LCB5b3UgY2FuIGFsc28g
dXNlIGEgZnVuY3Rpb24gZm9yIHRoaXMgc2V0dGluZywgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUg
b2YganNvbnBDYWxsYmFjayBpcyBzZXQgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGF0IGZ1bmN0
aW9uLlxuICAgICAqL1xuICAgIGpzb25wQ2FsbGJhY2s/OiBhbnk7XG4gICAgLyoqXG4gICAgICog
QSBtaW1lIHR5cGUgdG8gb3ZlcnJpZGUgdGhlIFhIUiBtaW1lIHR5cGUuICh2ZXJzaW9uIGFkZGVk
OiAxLjUuMSlcbiAgICAgKi9cbiAgICBtaW1lVHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAg
KiBBIHBhc3N3b3JkIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBpbiByZXNwb25zZSB0
byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAqL1xuICAgIHBh
c3N3b3JkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGRhdGEgcGFzc2Vk
IGluIHRvIHRoZSBkYXRhIG9wdGlvbiBhcyBhbiBvYmplY3QgKHRlY2huaWNhbGx5LCBhbnl0aGlu
ZyBvdGhlciB0aGFuIGEgc3RyaW5nKSB3aWxsIGJlIHByb2Nlc3NlZCBhbmQgdHJhbnNmb3JtZWQg
aW50byBhIHF1ZXJ5IHN0cmluZywgZml0dGluZyB0byB0aGUgZGVmYXVsdCBjb250ZW50LXR5cGUg
XCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIi4gSWYgeW91IHdhbnQgdG8gc2Vu
ZCBhIERPTURvY3VtZW50LCBvciBvdGhlciBub24tcHJvY2Vzc2VkIGRhdGEsIHNldCB0aGlzIG9w
dGlvbiB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBwcm9jZXNzRGF0YT86IGJvb2xlYW47XG4gICAg
LyoqXG4gICAgICogT25seSBhcHBsaWVzIHdoZW4gdGhlIFwic2NyaXB0XCIgdHJhbnNwb3J0IGlz
IHVzZWQgKGUuZy4sIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyB3aXRoIFwianNvbnBcIiBvciBcInNj
cmlwdFwiIGRhdGFUeXBlIGFuZCBcIkdFVFwiIHR5cGUpLiBTZXRzIHRoZSBjaGFyc2V0IGF0dHJp
YnV0ZSBvbiB0aGUgc2NyaXB0IHRhZyB1c2VkIGluIHRoZSByZXF1ZXN0LiBVc2VkIHdoZW4gdGhl
IGNoYXJhY3RlciBzZXQgb24gdGhlIGxvY2FsIHBhZ2UgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBv
bmUgb24gdGhlIHJlbW90ZSBzY3JpcHQuXG4gICAgICovXG4gICAgc2NyaXB0Q2hhcnNldD86IHN0
cmluZztcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgbnVtZXJpYyBIVFRQIGNvZGVzIGFu
ZCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlc3BvbnNlIGhhcyB0aGUgY29ycmVz
cG9uZGluZyBjb2RlLiBmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIHRoZSBzdGF0dXMgY29k
ZSBmdW5jdGlvbnMgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBzdWNjZXNzIGNhbGxi
YWNrOyBpZiBpdCByZXN1bHRzIGluIGFuIGVycm9yIChpbmNsdWRpbmcgM3h4IHJlZGlyZWN0KSwg
dGhleSB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIGVycm9yIGNhbGxiYWNrLiAodmVy
c2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIHN0YXR1c0NvZGU/OiB7IFtrZXk6IHN0cmlu
Z106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiB0
aGUgcmVxdWVzdCBzdWNjZWVkcy4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHRocmVlIGFyZ3Vt
ZW50czogVGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLCBmb3JtYXR0ZWQgYWNjb3Jk
aW5nIHRvIHRoZSBkYXRhVHlwZSBwYXJhbWV0ZXI7IGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHN0
YXR1czsgYW5kIHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVzdCkgb2Jq
ZWN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgc3VjY2VzcyBzZXR0aW5nIGNhbiBhY2NlcHQgYW4g
YXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4u
IFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBzdWNjZXNzPyAoZGF0YTogYW55
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpOiBhbnk7XG4gICAgLyoqXG4g
ICAgICogU2V0IGEgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSBmb3IgdGhlIHJlcXVlc3QuIFRo
aXMgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHRpbWVvdXQgc2V0IHdpdGggJC5hamF4U2V0dXAo
KS4gVGhlIHRpbWVvdXQgcGVyaW9kIHN0YXJ0cyBhdCB0aGUgcG9pbnQgdGhlICQuYWpheCBjYWxs
IGlzIG1hZGU7IGlmIHNldmVyYWwgb3RoZXIgcmVxdWVzdHMgYXJlIGluIHByb2dyZXNzIGFuZCB0
aGUgYnJvd3NlciBoYXMgbm8gY29ubmVjdGlvbnMgYXZhaWxhYmxlLCBpdCBpcyBwb3NzaWJsZSBm
b3IgYSByZXF1ZXN0IHRvIHRpbWUgb3V0IGJlZm9yZSBpdCBjYW4gYmUgc2VudC4gSW4galF1ZXJ5
IDEuNC54IGFuZCBiZWxvdywgdGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdCB3aWxsIGJlIGluIGFu
IGludmFsaWQgc3RhdGUgaWYgdGhlIHJlcXVlc3QgdGltZXMgb3V0OyBhY2Nlc3NpbmcgYW55IG9i
amVjdCBtZW1iZXJzIG1heSB0aHJvdyBhbiBleGNlcHRpb24uIEluIEZpcmVmb3ggMy4wKyBvbmx5
LCBzY3JpcHQgYW5kIEpTT05QIHJlcXVlc3RzIGNhbm5vdCBiZSBjYW5jZWxsZWQgYnkgYSB0aW1l
b3V0OyB0aGUgc2NyaXB0IHdpbGwgcnVuIGV2ZW4gaWYgaXQgYXJyaXZlcyBhZnRlciB0aGUgdGlt
ZW91dCBwZXJpb2QuXG4gICAgICovXG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgICAvKipcbiAg
ICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgdHJhZGl0aW9uYWwg
c3R5bGUgb2YgcGFyYW0gc2VyaWFsaXphdGlvbi5cbiAgICAgKi9cbiAgICB0cmFkaXRpb25hbD86
IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgcmVxdWVzdCB0byBtYWtlIChc
IlBPU1RcIiBvciBcIkdFVFwiKSwgZGVmYXVsdCBpcyBcIkdFVFwiLiBOb3RlOiBPdGhlciBIVFRQ
IHJlcXVlc3QgbWV0aG9kcywgc3VjaCBhcyBQVVQgYW5kIERFTEVURSwgY2FuIGFsc28gYmUgdXNl
ZCBoZXJlLCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMuXG4gICAg
ICovXG4gICAgdHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyBjb250YWlu
aW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKi9cbiAgICB1
cmw/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSB1c2VybmFtZSB0byBiZSB1c2VkIHdpdGgg
WE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRp
b24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICAvKipcbiAg
ICAgKiBDYWxsYmFjayBmb3IgY3JlYXRpbmcgdGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4gRGVm
YXVsdHMgdG8gdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBhdmFpbGFibGUgKElFKSwgdGhlIFhNTEh0
dHBSZXF1ZXN0IG90aGVyd2lzZS4gT3ZlcnJpZGUgdG8gcHJvdmlkZSB5b3VyIG93biBpbXBsZW1l
bnRhdGlvbiBmb3IgWE1MSHR0cFJlcXVlc3Qgb3IgZW5oYW5jZW1lbnRzIHRvIHRoZSBmYWN0b3J5
LlxuICAgICAqL1xuICAgIHhocj86IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Yg
ZmllbGROYW1lLWZpZWxkVmFsdWUgcGFpcnMgdG8gc2V0IG9uIHRoZSBuYXRpdmUgWEhSIG9iamVj
dC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IHRvIHNldCB3aXRoQ3JlZGVudGlhbHMgdG8g
dHJ1ZSBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIGlmIG5lZWRlZC4gSW4galF1ZXJ5IDEuNSwg
dGhlIHdpdGhDcmVkZW50aWFscyBwcm9wZXJ0eSB3YXMgbm90IHByb3BhZ2F0ZWQgdG8gdGhlIG5h
dGl2ZSBYSFIgYW5kIHRodXMgQ09SUyByZXF1ZXN0cyByZXF1aXJpbmcgaXQgd291bGQgaWdub3Jl
IHRoaXMgZmxhZy4gRm9yIHRoaXMgcmVhc29uLCB3ZSByZWNvbW1lbmQgdXNpbmcgalF1ZXJ5IDEu
NS4xKyBzaG91bGQgeW91IHJlcXVpcmUgdGhlIHVzZSBvZiBpdC4gKHZlcnNpb24gYWRkZWQ6IDEu
NS4xKVxuICAgICAqL1xuICAgIHhockZpZWxkcz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xu
fVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIGpxWEhSIG9iamVjdFxuKi9cbmludGVyZmFj
ZSBKUXVlcnlYSFIgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdCwgSlF1ZXJ5UHJvbWlzZTxhbnk+IHtc
biAgICBvdmVycmlkZU1pbWVUeXBlKG1pbWVUeXBlOiBzdHJpbmcpOiBhbnk7XG4gICAgYWJvcnQo
c3RhdHVzVGV4dD86IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0
aGUgSlF1ZXJ5IGNhbGxiYWNrXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUNhbGxiYWNrIHtcbiAgICBh
ZGQoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbiAgICBkaXNhYmxlKCk6IGFueTtcbiAgICBl
bXB0eSgpOiBhbnk7XG4gICAgZmlyZSguLi5hcmd1bWVudHM6IGFueVtdKTogYW55O1xuICAgIGZp
cmVkKCk6IGJvb2xlYW47XG4gICAgZmlyZVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlb
XSk6IGFueTtcbiAgICBoYXMoY2FsbGJhY2s6IGFueSk6IGJvb2xlYW47XG4gICAgbG9jaygpOiBh
bnk7XG4gICAgbG9ja2VkKCk6IGJvb2xlYW47XG4gICAgcmVtb3ZlKC4uLmNhbGxiYWNrczogYW55
W10pOiBhbnk7XG59XG5cbi8qXG4gICAgQWxsb3dzIGpRdWVyeSBQcm9taXNlcyB0byBpbnRlcm9w
IHdpdGggbm9uLWpRdWVyeSBwcm9taXNlc1xuKi9cbmludGVyZmFjZSBKUXVlcnlHZW5lcmljUHJv
bWlzZTxUPiB7XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWpl
Y3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0
aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwg
b25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtc
biAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChyZWFz
b246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9t
aXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNl
IGZvciB0aGUgSlF1ZXJ5IHByb21pc2UsIHBhcnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNl
IEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tz
XG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
biAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAg
ZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIHByb2dy
ZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAg
YWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAg
IGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGZh
aWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIHByb2dy
ZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAg
ICAvLyBEZXByZWNhdGVkIC0gZ2l2ZW4gbm8gdHlwaW5nc1xuICAgIHBpcGUoZG9uZUZpbHRlcj86
ICh4OiBhbnkpID0+IGFueSwgZmFpbEZpbHRlcj86ICh4OiBhbnkpID0+IGFueSwgcHJvZ3Jlc3NG
aWx0ZXI/OiAoeDogYW55KSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPGFueT47XG5cbiAgICB0aGVu
PFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6
IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4g
SlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9
PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5
UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJl
amVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9u
UHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNl
PFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkp
OiBKUXVlcnlQcm9taXNlPFU+O1xuXG4gICAgLy8gQmVjYXVzZSBKUXVlcnkgUHJvbWlzZXMgU3Vj
a1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWpl
Y3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Np
b246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxm
aWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVq
ZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNz
aW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVs
ZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFu
eVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25S
ZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBv
blByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlz
ZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgZGVmZXJyZWQsIHBh
cnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeURlZmVycmVkPFQ+IGV4dGVuZHMg
SlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3Nc
biAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtc
biAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAg
IGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJv
Z3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4g
ICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtc
biAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4g
ICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAg
IHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+
O1xuXG4gICAgbm90aWZ5KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAg
bm90aWZ5V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8
VD47XG5cbiAgICByZWplY3QoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAg
ICByZWplY3RXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJl
ZDxUPjtcblxuICAgIHJlc29sdmUodmFsOiBUKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVz
b2x2ZSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlc29sdmVXaXRo
KGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBz
dGF0ZSgpOiBzdHJpbmc7XG5cbiAgICBwcm9taXNlKHRhcmdldD86IGFueSk6IEpRdWVyeVByb21p
c2U8VD47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIG9mIHRoZSBKUXVlcnkgZXh0ZW5zaW9uIG9m
IHRoZSBXM0MgZXZlbnQgb2JqZWN0XG4qL1xuXG5pbnRlcmZhY2UgQmFzZUpRdWVyeUV2ZW50T2Jq
ZWN0IGV4dGVuZHMgRXZlbnQge1xuICAgIGRhdGE6IGFueTtcbiAgICBkZWxlZ2F0ZVRhcmdldDog
RWxlbWVudDtcbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbjtcbiAgICBpc0ltbWVk
aWF0ZVByb3BvZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIGlzUHJvcGFnYXRpb25TdG9w
cGVkKCk6IGJvb2xlYW47XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgcHJldmVudERlZmF1
bHQoKTogYW55O1xuICAgIHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQ7XG4gICAgcmVzdWx0OiBhbnk7
XG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAgc3RvcFByb3BhZ2F0
aW9uKCk6IHZvaWQ7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAgICBwYWdlWTogbnVtYmVyO1xuICAg
IHdoaWNoOiBudW1iZXI7XG4gICAgbWV0YUtleTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpR
dWVyeUlucHV0RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAg
IGFsdEtleTogYm9vbGVhbjtcbiAgICBjdHJsS2V5OiBib29sZWFuO1xuICAgIG1ldGFLZXk6IGJv
b2xlYW47XG4gICAgc2hpZnRLZXk6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgYnV0dG9u
OiBudW1iZXI7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAgIGNsaWVudFk6IG51bWJlcjtcbiAg
ICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVtYmVyO1xuICAgIHBhZ2VYOiBudW1i
ZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICBzY3JlZW5YOiBudW1iZXI7XG4gICAgc2NyZWVu
WTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5S2V5RXZlbnRPYmplY3QgZXh0ZW5kcyBK
UXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBjaGFyOiBhbnk7XG4gICAgY2hhckNvZGU6IG51
bWJlcjtcbiAgICBrZXk6IGFueTtcbiAgICBrZXlDb2RlOiBudW1iZXI7XG59XG5cbmludGVyZmFj
ZSBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0
IHtcbiAgICBvcmlnaW5hbEV2ZW50OiBQb3BTdGF0ZUV2ZW50O1xufVxuXG5pbnRlcmZhY2UgSlF1
ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QsIEpRdWVyeUlucHV0
RXZlbnRPYmplY3QsIEpRdWVyeU1vdXNlRXZlbnRPYmplY3QsIEpRdWVyeUtleUV2ZW50T2JqZWN0
LCBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IHtcbn1cblxuLypcbiAgICBDb2xsZWN0aW9uIG9m
IHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3NlclxuKi9cblxuaW50ZXJmYWNlIEpRdWVy
eVN1cHBvcnQge1xuICAgIGFqYXg/OiBib29sZWFuO1xuICAgIGJveE1vZGVsPzogYm9vbGVhbjtc
biAgICBjaGFuZ2VCdWJibGVzPzogYm9vbGVhbjtcbiAgICBjaGVja0Nsb25lPzogYm9vbGVhbjtc
biAgICBjaGVja09uPzogYm9vbGVhbjtcbiAgICBjb3JzPzogYm9vbGVhbjtcbiAgICBjc3NGbG9h
dD86IGJvb2xlYW47XG4gICAgaHJlZk5vcm1hbGl6ZWQ/OiBib29sZWFuO1xuICAgIGh0bWxTZXJp
YWxpemU/OiBib29sZWFuO1xuICAgIGxlYWRpbmdXaGl0ZXNwYWNlPzogYm9vbGVhbjtcbiAgICBu
b0Nsb25lQ2hlY2tlZD86IGJvb2xlYW47XG4gICAgbm9DbG9uZUV2ZW50PzogYm9vbGVhbjtcbiAg
ICBvcGFjaXR5PzogYm9vbGVhbjtcbiAgICBvcHREaXNhYmxlZD86IGJvb2xlYW47XG4gICAgb3B0
U2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIHNjcmlwdEV2YWw/ICgpOiBib29sZWFuO1xuICAgIHN0
eWxlPzogYm9vbGVhbjtcbiAgICBzdWJtaXRCdWJibGVzPzogYm9vbGVhbjtcbiAgICB0Ym9keT86
IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlQYXJhbSB7XG4gICAgKG9iajogYW55KTog
c3RyaW5nO1xuICAgIChvYmo6IGFueSwgdHJhZGl0aW9uYWw6IGJvb2xlYW4pOiBzdHJpbmc7XG59
XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIGNvbnN0cnVjdCBqUXVlcnkgZXZlbnRz
ICh3aXRoICQuRXZlbnQpLiBJdCBpc1xuICogZGVmaW5lZCBzZXBhcmF0ZWx5IGluc3RlYWQgb2Yg
aW5saW5lIGluIEpRdWVyeVN0YXRpYyB0byBhbGxvd1xuICogb3ZlcnJpZGluZyB0aGUgY29uc3Ry
dWN0aW9uIGZ1bmN0aW9uIHdpdGggc3BlY2lmaWMgc3RyaW5nc1xuICogcmV0dXJuaW5nIHNwZWNp
ZmljIGV2ZW50IG9iamVjdHMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFdmVudENvbnN0cnVjdG9y
IHtcbiAgICAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlFdmVu
dE9iamVjdDtcbiAgICBuZXcgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTog
SlF1ZXJ5RXZlbnRPYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIHNw
ZWNpZnkgZWFzaW5nIGZ1bmN0aW9ucy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVyeUVhc2luZyB7XG4g
ICAgbGluZWFyKHA6IG51bWJlcik6IG51bWJlcjtcbiAgICBzd2luZyhwOiBudW1iZXIpOiBudW1i
ZXI7XG59XG5cbi8qXG4gICAgU3RhdGljIG1lbWJlcnMgb2YgalF1ZXJ5ICh0aG9zZSBvbiAkIGFu
ZCBqUXVlcnkgdGhlbXNlbHZlcylcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5U3RhdGljIHtcblxuICAg
IC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAgKEFqYXgpIHJlcXVlc3Qu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJz
IHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0aW5ncyBhcmUgb3B0aW9u
YWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdpdGggJC5hamF4U2V0dXAo
KS5cbiAgICAgKi9cbiAgICBhamF4KHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3MpOiBKUXVl
cnlYSFI7XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAoQWph
eCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHNl
dHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCBy
ZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBm
b3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4gICAgICovXG4gICAgYWpheCh1cmw6
IHN0cmluZywgc2V0dGluZ3M/OiBKUXVlcnlBamF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7XG5cbiAg
ICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rp
bmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFy
ZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVR5cGVz
IEFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRl
ZCBkYXRhVHlwZXNcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1
bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJl
ZmlsdGVyKGRhdGFUeXBlczogc3RyaW5nLCBoYW5kbGVyOiAob3B0czogYW55LCBvcmlnaW5hbE9w
dHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogdm9pZDtc
biAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0aW9ucyBvciBtb2RpZnkgZXhp
c3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNlbnQgYW5kIGJlZm9yZSB0aGV5
IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0
cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdp
bmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2
b2lkO1xuXG4gICAgYWpheFNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3M7XG5cbiAgICAgLyoq
XG4gICAgICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuIEl0
cyB1c2UgaXMgbm90IHJlY29tbWVuZGVkLlxuICAgICAgKlxuICAgICAgKiBAcGFyYW0gb3B0aW9u
cyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIGRlZmF1bHQgQWph
eCByZXF1ZXN0LiBBbGwgb3B0aW9ucyBhcmUgb3B0aW9uYWwuXG4gICAgICAqL1xuICAgIGFqYXhT
ZXR1cChvcHRpb25zOiBKUXVlcnlBamF4U2V0dGluZ3MpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAg
ICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3
aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJh
Y2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAg
ICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBz
ZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3Ig
aHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFu
eSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBl
Pzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRo
ZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFt
IHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMg
c2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBp
cyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3Vj
Y2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0
ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29u
LCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgZGF0YT86
IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6
IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAv
KipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVx
dWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUg
VVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBw
bGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhl
IHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0
IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRh
VHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDog
SW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9c
biAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/
OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQg
ZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhl
IHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0
aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4g
ICAgZ2V0SlNPTih1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6
IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxu
ICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VU
IEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFp
bmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFt
IGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVy
IHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5j
dGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xu
ICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTog
YW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVy
eVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNl
cnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJs
IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50
LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNl
bnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNz
IEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNj
ZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBz
dWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhS
KSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBhIEphdmFTY3JpcHQg
ZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LCB0aGVuIGV4ZWN1
dGUgaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhl
IFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNz
IEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNj
ZWVkcy5cbiAgICAgKi9cbiAgICBnZXRTY3JpcHQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoc2Ny
aXB0OiBzdHJpbmcsIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55
KTogSlF1ZXJ5WEhSO1xuXG4gICAgcGFyYW06IEpRdWVyeVBhcmFtO1xuXG4gICAgLyoqXG4gICAg
ICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxi
YWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJl
cXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBj
YXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZy
b20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2Ny
aXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBzdWNjZXNz
PzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBh
bnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQg
ZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRo
ZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Ig
c3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAg
ICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlm
IHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwg
YnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhl
IHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGln
ZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAg
cG9zdCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRl
eHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0
cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2Vy
dmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJs
IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50
LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNl
bnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNz
IEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNj
ZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBp
biB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhw
ZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBq
c29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcs
IGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcs
IGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7
XG5cbiAgICAvKipcbiAgICAgKiBBIG11bHRpLXB1cnBvc2UgY2FsbGJhY2tzIGxpc3Qgb2JqZWN0
IHRoYXQgcHJvdmlkZXMgYSBwb3dlcmZ1bCB3YXkgdG8gbWFuYWdlIGNhbGxiYWNrIGxpc3RzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGZsYWdzIEFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2Vw
YXJhdGVkIGZsYWdzIHRoYXQgY2hhbmdlIGhvdyB0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzLlxu
ICAgICAqL1xuICAgIENhbGxiYWNrcyhmbGFncz86IHN0cmluZyk6IEpRdWVyeUNhbGxiYWNrO1xu
XG4gICAgLyoqXG4gICAgICogSG9sZHMgb3IgcmVsZWFzZXMgdGhlIGV4ZWN1dGlvbiBvZiBqUXVl
cnkncyByZWFkeSBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBob2xkIEluZGljYXRlcyB3
aGV0aGVyIHRoZSByZWFkeSBob2xkIGlzIGJlaW5nIHJlcXVlc3RlZCBvciByZWxlYXNlZFxuICAg
ICAqL1xuICAgIGhvbGRSZWFkeShob2xkOiBib29sZWFuKTogdm9pZDtcblxuICAgIChzZWxlY3Rv
cjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIChlbGVtZW50OiBFbGVtZW50
KTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IHt9KTogSlF1ZXJ5O1xuICAgIChlbGVtZW50QXJyYXk6
IEVsZW1lbnRbXSk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiBKUXVlcnkpOiBKUXVlcnk7XG4gICAg
KGZ1bmM6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIChhcnJheTogYW55W10pOiBKUXVlcnk7XG4g
ICAgKCk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJlbGlucXVpc2ggalF1ZXJ5J3MgY29u
dHJvbCBvZiB0aGUgJCB2YXJpYWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZW1vdmVBbGwg
QSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byByZW1vdmUgYWxsIGpRdWVyeSB2YXJpYWJs
ZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlIChpbmNsdWRpbmcgalF1ZXJ5IGl0c2VsZikuXG4gICAg
ICovXG4gICAgbm9Db25mbGljdChyZW1vdmVBbGw/OiBib29sZWFuKTogT2JqZWN0O1xuXG4gICAg
LyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMg
YmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRo
YXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3Jp
cHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VD5bXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgLyoqXG4gICAgICogUHJv
dmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9y
IG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFz
eW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBv
ciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAg
ICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
biAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0
aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVj
dHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2
YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBhbnlb
XSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBjc3NIb29rczogeyBba2V5OiBzdHJpbmddOiBh
bnk7IH07XG4gICAgY3NzTnVtYmVyOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSBhcmJp
dHJhcnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBlbGVtZW50LiBSZXR1cm5z
IHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBU
aGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFt
IGtleSBBIHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqIEBw
YXJhbSB2YWx1ZSBUaGUgbmV3IGRhdGEgdmFsdWUuXG4gICAgICovXG4gICAgZGF0YTxUPihlbGVt
ZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBUO1xuICAgIC8qKlxuICAgICAq
IFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNl
dCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEg
c3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhl
IERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSBr
ZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAgICAgKi9cbiAg
ICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAg
ICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQsIGFz
IHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSksIG9yIHRoZSBmdWxsIGRh
dGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQg
VGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqL1xuICAg
IGRhdGEoZWxlbWVudDogRWxlbWVudCk6IGFueTtcblxuICAgIGRlcXVldWUoZWxlbWVudDogRWxl
bWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55O1xuXG4gICAgaGFzRGF0YShlbGVtZW50OiBF
bGVtZW50KTogYm9vbGVhbjtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFt
ZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFt
ZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92
ZURhdGEoZWxlbWVudDogRWxlbWVudCwgbmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8v
IERlZmVycmVkXG4gICAgRGVmZXJyZWQ8VD4oYmVmb3JlU3RhcnQ/OiAoZGVmZXJyZWQ6IEpRdWVy
eURlZmVycmVkPFQ+KSA9PiBhbnkpOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIC8vIEVmZmVj
dHNcbiAgICBmeDogeyB0aWNrOiAoKSA9PiB2b2lkOyBpbnRlcnZhbDogbnVtYmVyOyBzdG9wOiAo
KSA9PiB2b2lkOyBzcGVlZHM6IHsgc2xvdzogbnVtYmVyOyBmYXN0OiBudW1iZXI7IH07IG9mZjog
Ym9vbGVhbjsgc3RlcDogYW55OyB9O1xuXG4gICAgLy8gRXZlbnRzXG4gICAgcHJveHkoZm46ICgu
Li5hcmdzOiBhbnlbXSkgPT4gYW55LCBjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55
O1xuICAgIHByb3h5KGNvbnRleHQ6IGFueSwgbmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6
IGFueTtcblxuICAgIEV2ZW50OiBKUXVlcnlFdmVudENvbnN0cnVjdG9yO1xuXG4gICAgLy8gSW50
ZXJuYWxzXG4gICAgZXJyb3IobWVzc2FnZTogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2Vs
bGFuZW91c1xuICAgIGV4cHI6IGFueTtcbiAgICBmbjogYW55OyAgLy9UT0RPOiBEZWNpZGUgaG93
IHdlIHdhbnQgdG8gdHlwZSB0aGlzXG4gICAgaXNSZWFkeTogYm9vbGVhbjtcblxuICAgIC8vIFBy
b3BlcnRpZXNcbiAgICBzdXBwb3J0OiBKUXVlcnlTdXBwb3J0O1xuXG4gICAgLy8gVXRpbGl0aWVz
XG4gICAgY29udGFpbnMoY29udGFpbmVyOiBFbGVtZW50LCBjb250YWluZWQ6IEVsZW1lbnQpOiBi
b29sZWFuO1xuXG4gICAgZWFjaChjb2xsZWN0aW9uOiBhbnksIGNhbGxiYWNrOiAoaW5kZXhJbkFy
cmF5OiBhbnksIHZhbHVlT2ZFbGVtZW50OiBhbnkpID0+IGFueSk6IGFueTtcbiAgICBlYWNoKGNv
bGxlY3Rpb246IEpRdWVyeSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVP
ZkVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFjaDxUPihjb2xsZWN0
aW9uOiBUW10sIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIsIHZhbHVlT2ZFbGVtZW50
OiBUKSA9PiBhbnkpOiBhbnk7XG5cbiAgICBleHRlbmQodGFyZ2V0OiBhbnksIC4uLm9ianM6IGFu
eVtdKTogYW55O1xuICAgIGV4dGVuZChkZWVwOiBib29sZWFuLCB0YXJnZXQ6IGFueSwgLi4ub2Jq
czogYW55W10pOiBhbnk7XG5cbiAgICBnbG9iYWxFdmFsKGNvZGU6IHN0cmluZyk6IGFueTtcblxu
ICAgIGdyZXA8VD4oYXJyYXk6IFRbXSwgZnVuYzogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleElu
QXJyYXk6IG51bWJlcikgPT4gYm9vbGVhbiwgaW52ZXJ0PzogYm9vbGVhbik6IFRbXTtcblxuICAg
IGluQXJyYXk8VD4odmFsdWU6IFQsIGFycmF5OiBUW10sIGZyb21JbmRleD86IG51bWJlcik6IG51
bWJlcjtcblxuICAgIGlzQXJyYXkob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzRW1wdHlPYmpl
Y3Qob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzRnVuY3Rpb24ob2JqOiBhbnkpOiBib29sZWFu
O1xuICAgIGlzTnVtZXJpYyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICBpc1BsYWluT2JqZWN0
KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1dpbmRvdyhvYmo6IGFueSk6IGJvb2xlYW47XG4g
ICAgaXNYTUxEb2Mobm9kZTogTm9kZSk6IGJvb2xlYW47XG5cbiAgICBtYWtlQXJyYXkob2JqOiBh
bnkpOiBhbnlbXTtcblxuICAgIG1hcDxULCBVPihhcnJheTogVFtdLCBjYWxsYmFjazogKGVsZW1l
bnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gVSk6IFVbXTtcbiAgICBtYXAo
YXJyYXk6IGFueSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogYW55LCBpbmRleEluQXJyYXk6
IGFueSkgPT4gYW55KTogYW55O1xuXG4gICAgbWVyZ2U8VD4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBU
W10pOiBUW107XG4gICAgbWVyZ2U8VCxVPihmaXJzdDogVFtdLCBzZWNvbmQ6IFVbXSk6IGFueVtd
O1xuXG4gICAgbm9vcCgpOiBhbnk7XG5cbiAgICBub3coKTogbnVtYmVyO1xuXG4gICAgcGFyc2VK
U09OKGpzb246IHN0cmluZyk6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmlu
ZyBpbnRvIGFuIFhNTCBkb2N1bWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhYSB3ZWxs
LWZvcm1lZCBYTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAgICAqL1xuICAgIHBhcnNlWE1MKGRh
dGE6IHN0cmluZyk6IFhNTERvY3VtZW50O1xuXG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwg
cXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIHRyaW0o
c3RyOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgICB0eXBlKG9iajogYW55KTogc3RyaW5nO1xuXG4g
ICAgdW5pcXVlKGFycjogYW55W10pOiBhbnlbXTtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBh
IHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIERPTSBub2Rlcy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBkYXRhIEhUTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAgICAqIEBwYXJhbSBjb250ZXh0IERP
TSBlbGVtZW50IHRvIHNlcnZlIGFzIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBIVE1MIGZyYWdt
ZW50IHdpbGwgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBrZWVwU2NyaXB0cyBBIEJvb2xlYW4g
aW5kaWNhdGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIEhUTUwg
c3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VIVE1MKGRhdGE6IHN0cmluZywgY29udGV4dD86IEhU
TUxFbGVtZW50LCBrZWVwU2NyaXB0cz86IGJvb2xlYW4pOiBhbnlbXTtcblxuICAgIEFuaW1hdGlv
bihlbGVtOiBhbnksIHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczogYW55KTogYW55O1xuXG4gICAg
ZWFzaW5nOiBKUXVlcnlFYXNpbmc7XG59XG5cbi8qXG4gICAgVGhlIGpRdWVyeSBpbnN0YW5jZSBt
ZW1iZXJzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeSB7XG4gICAgLy8gQUpBWFxuICAgIGFqYXhDb21w
bGV0ZShoYW5kbGVyOiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheEVycm9yKGhhbmRsZXI6IChldmVu
dDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIGFqYXhTZW5kKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55
LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFq
YXhTdGFydChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0b3AoaGFuZGxl
cjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdWNjZXNzKGhhbmRsZXI6IChldmVudDog
YW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgbG9hZCh1cmw6IHN0cmluZywgZGF0YT86IGFueSwgY29tcGxldGU/OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICBzZXJpYWxpemUoKTogc3RyaW5nO1xuICAgIHNlcmlhbGl6ZUFy
cmF5KCk6IGFueVtdO1xuXG4gICAgLy8gQXR0cmlidXRlc1xuICAgIGFkZENsYXNzKGNsYXNzTmFt
ZXM6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGRDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY3Vy
cmVudENsYXNzOiBhbnkpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8vIGh0dHA6Ly9hcGku
anF1ZXJ5LmNvbS9hZGRCYWNrL1xuICAgIGFkZEJhY2soc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVl
cnk7XG5cblxuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICAgIGF0
dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIo
YXR0cmlidXRlTmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6IGFueSwgYXR0cjogYW55KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgYXR0cihtYXA6IGFueSk6IEpRdWVyeTtcblxuICAgIGhhc0NsYXNz
KGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAgIGh0bWwoKTogc3RyaW5nO1xuICAg
IGh0bWwoaHRtbFN0cmluZzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwoaHRtbENvbnRlbnQ6
IChpbmRleDogbnVtYmVyLCBvbGRodG1sOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBodG1sKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0
cmluZyk6IGFueTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTog
SlF1ZXJ5O1xuICAgIHByb3AobWFwOiBhbnkpOiBKUXVlcnk7XG4gICAgcHJvcChwcm9wZXJ0eU5h
bWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIG9sZFByb3BlcnR5VmFsdWU6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICByZW1vdmVDbGFzcyhjbGFzc05hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG4g
ICAgcmVtb3ZlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICByZW1vdmVQcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4g
ICAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHN3dGNoPzogYm9vbGVhbik6IEpRdWVy
eTtcbiAgICB0b2dnbGVDbGFzcyhzd3RjaD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xl
Q2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55LCBzd3RjaDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICB2YWwoKTogYW55O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nW10pOiBKUXVl
cnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBudW1i
ZXIpOiBKUXVlcnk7XG4gICAgdmFsKGZ1bmM6IChpbmRleDogYW55LCB2YWx1ZTogYW55KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHN0eWxlIHBy
b3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVt
ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHku
XG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICAgIC8q
KlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBt
YXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENT
UyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3Ig
dGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFs
dWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NT
IHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFy
YW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBj
c3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1h
dGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NT
IHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0
aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1
ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENT
UyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBh
cmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAg
Y3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyW10pOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9m
IG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEg
Q1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJu
aW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2
ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSBzZXQgYW5kIHRoZSBv
bGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0
cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZv
ciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJv
cGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgZnVu
Y3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1cnJlbnQgZWxl
bWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSBz
ZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGNzcyhwcm9w
ZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSA9
PiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBw
cm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gcHJvcGVydGllcyBBbiBvYmplY3Qgb2YgcHJvcGVydHktdmFsdWUgcGFpcnMgdG8g
c2V0LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0aWVzOiBPYmplY3QpOiBKUXVlcnk7XG5cbiAg
ICBoZWlnaHQoKTogbnVtYmVyO1xuICAgIGhlaWdodCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xu
ICAgIGhlaWdodCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhlaWdodChmdW5jOiAoaW5k
ZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGlubmVySGVpZ2h0
KCk6IG51bWJlcjtcbiAgICBpbm5lckhlaWdodCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4g
ICAgaW5uZXJXaWR0aCgpOiBudW1iZXI7XG4gICAgaW5uZXJXaWR0aCh2YWx1ZTogbnVtYmVyKTog
SlF1ZXJ5O1xuXG4gICAgb2Zmc2V0KCk6IHsgbGVmdDogbnVtYmVyOyB0b3A6IG51bWJlcjsgfTtc
biAgICBvZmZzZXQoY29vcmRpbmF0ZXM6IGFueSk6IEpRdWVyeTtcbiAgICBvZmZzZXQoZnVuYzog
KGluZGV4OiBhbnksIGNvb3JkczogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBvdXRlckhl
aWdodChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlckhlaWdodCh2
YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIG91
dGVyV2lkdGgoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJXaWR0
aCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAg
IHBvc2l0aW9uKCk6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgfTtcblxuICAgIHNjcm9s
bExlZnQoKTogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtc
blxuICAgIHNjcm9sbFRvcCgpOiBudW1iZXI7XG4gICAgc2Nyb2xsVG9wKHZhbHVlOiBudW1iZXIp
OiBKUXVlcnk7XG5cbiAgICB3aWR0aCgpOiBudW1iZXI7XG4gICAgd2lkdGgodmFsdWU6IG51bWJl
cik6IEpRdWVyeTtcbiAgICB3aWR0aCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHdpZHRo
KGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
Ly8gRGF0YVxuICAgIGNsZWFyUXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4g
ICAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBkYXRhKG9iajog
eyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgZGF0YShrZXk/OiBzdHJpbmcp
OiBhbnk7XG5cbiAgICBkZXF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IHJlbW92ZURhdGEobmFtZU9yTGlzdD86IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVycmVk
XG4gICAgcHJvbWlzZSh0eXBlPzogYW55LCB0YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9taXNlPGFu
eT47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIGR1cmF0
aW9uPzogYW55LCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJv
cGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjb21wbGV0ZT86
IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBvcHRpb25z
OiB7IGR1cmF0aW9uPzogYW55OyBlYXNpbmc/OiBzdHJpbmc7IGNvbXBsZXRlPzogRnVuY3Rpb247
IHN0ZXA/OiBGdW5jdGlvbjsgcXVldWU/OiBib29sZWFuOyBzcGVjaWFsRWFzaW5nPzogYW55OyB9
KTogSlF1ZXJ5O1xuXG4gICAgZGVsYXkoZHVyYXRpb246IG51bWJlciwgcXVldWVOYW1lPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlT3V0KGR1cmF0aW9uPzogYW55LCBj
YWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlT3V0KGR1cmF0aW9uPzogYW55LCBlYXNp
bmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvKGR1cmF0
aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAg
ZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgZWFzaW5nPzogc3RyaW5nLCBj
YWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUb2dnbGUoZHVyYXRpb24/OiBhbnks
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVUb2dnbGUoZHVyYXRpb24/OiBhbnks
IGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmaW5pc2go
KTogSlF1ZXJ5O1xuXG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBK
UXVlcnk7XG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIHNob3coZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzog
YW55KTogSlF1ZXJ5O1xuICAgIHNob3coZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZURvd24oZHVyYXRpb24/OiBhbnks
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwg
ZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVG9n
Z2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZVRv
Z2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcblxuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzdG9wKGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1w
VG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHN0b3AocXVldWU/OiBhbnksIGNsZWFyUXVl
dWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgdG9nZ2xl
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dnbGUoZHVy
YXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4g
ICAgdG9nZ2xlKHNob3dPckhpZGU6IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICAvLyBFdmVudHNc
biAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmlu
ZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhOiBhbnksIHByZXZlbnRCdWJibGU6IGJvb2xl
YW4pOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgcHJldmVudEJ1YmJsZTog
Ym9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5kKC4uLmV2ZW50czogYW55W10pOiBKUXVlcnk7XG5c
biAgICBibHVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcbiAgICBibHVyKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwiY2hhbmdlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBjaGFuZ2UoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBUcmlnZ2VyIHRoZSBcImNsaWNrXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAg
Ki9cbiAgICBjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBw
YXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAgY2xpY2soaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3Jp
cHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjbGljayhldmVudERhdGE/OiBhbnksIGhh
bmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImRibGNsaWNrXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBkYmxjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlwdCBl
dmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNsaWNr
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xp
Y2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRUeXBl
OiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiZm9jdXNcIiBldmVu
dCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGZvY3VzKCk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0
IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c1wi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2Jq
ZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5k
bGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhl
IFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBmb2N1c2luKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2
ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNvdXQo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291
dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChldmVu
dERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCB0d28gaGFuZGxlcnMgdG8g
dGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50
ZXIgZW50ZXJzIGFuZCBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXJJbiBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBl
bnRlcnMgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXJPdXQgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAg
ICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55LCBoYW5kbGVyT3V0OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhIHNpbmdsZSBoYW5kbGVyIHRv
IHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBwb2lu
dGVyIGVudGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXJJbk91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRl
ciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRs
ZXJJbk91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlkb3duXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5ZG93blwiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlkb3duKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGtleWRvd25c
IlwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlkb3duKGV2ZW50
RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5cHJl
c3NcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXByZXNzKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJl
c3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAga2V5cHJlc3MoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBrZXlwcmVzcyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBUcmlnZ2VyIHRoZSBcImtleXVwXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAg
ICBrZXl1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAga2V5dXAoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3Jp
cHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWRvd25cIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIG1vdXNlZG93bigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZl
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93bihoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vk
b3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEg
QW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVu
dCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGV2ZW50
RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91
c2VlbnRlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcigp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZp
cmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4g
ZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihldmVudERhdGE6IE9iamVjdCwg
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlbGVhdmVcIiBldmVu
dCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBt
b3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2VsZWF2ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlbGVhdmUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW1vdmVcIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIG1vdXNlbW92ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3Zl
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGV2ZW50RGF0
YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vv
dXRcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlb3V0KCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vv
dXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZW91dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBw
YXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBtb3VzZW91dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcIm1vdXNlb3ZlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4g
ICAgbW91c2VvdmVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0
IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFp
bmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoZXZlbnREYXRhOiBPYmplY3QsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZXVwXCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEphdmFTY3JpcHQg
ZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
dXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKGV2ZW50RGF0
YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5k
bGVyLlxuICAgICAqL1xuICAgIG9mZigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3Zl
IGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBt
b3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywg
b3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2lu
XCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Ig
d2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hl
biBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5k
bGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhl
IHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBz
ZWxlY3Rvcj86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFu
ZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2Vw
YXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0IG5hbWVz
cGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3IgXCIubXlQ
bHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVuY3Rpb24gcHJldmlv
dXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lhbCB2YWx1ZSBmYWxz
ZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBS
ZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4g
b2JqZWN0IHdoZXJlIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Ut
c2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZh
bHVlcyByZXByZXNlbnQgaGFuZGxlciBmdW5jdGlvbnMgcHJldmlvdXNseSBhdHRhY2hlZCBmb3Ig
dGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHdoaWNoIHNo
b3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5vbigpIHdoZW4gYXR0YWNo
aW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHsgW2tleTogc3Ry
aW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVu
dHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5h
bWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhh
bmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuIFJlc3QgcGFy
YW1ldGVyIGFyZ3MgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRlcnMgcGFzc2VkIHRvIGpRdWVyeS50
cmlnZ2VyKCkuIE5vdGUgdGhhdCB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgb24gdGhlIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb24gbXVzdCBiZSBtYXJrZWQgYXMgb3B0aW9uYWwgKD8gc3ludGF4KS5cbiAg
ICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUg
ZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25h
bCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5c
biAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBk
ZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVu
dC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5
cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQg
Zm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4g
ICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRz
IHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMg
T25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1l
c3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAg
KiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5k
YW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYg
dGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmln
Z2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJh
bSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hl
biBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNl
IGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBs
eSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgc2Vs
ZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2
ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0
ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3
aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRl
ZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVw
cmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChzKS5c
biAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBk
ZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhh
bmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlz
IGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAg
ICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50
LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiB7IFtr
ZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBhbnksIGRhdGE/OiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUg
ZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVu
dCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJpbmcg
Y29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwi
Y2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBU
aGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50
IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcg
b25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBhcyBcImNsaWNrXCIgb3Ig
XCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAqIEBwYXJhbSBkYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQg
dGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRz
OiBzdHJpbmcsIGRhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFu
ZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRl
ZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBh
bmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15
UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZp
bHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dl
ciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVu
dCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVu
dC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEg
c2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxu
ICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50
cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBl
dmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFj
ZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMg
XCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMg
bnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJl
YWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBi
ZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2Vk
IGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZh
bHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywg
ZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2
ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25j
ZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1v
cmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBh
bmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBm
b3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmlu
ZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0
IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRl
ZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVj
dGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhl
IGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAg
ICBvbmUoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcs
IGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIERPTSBpcyBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIERPTSBp
cyByZWFkeS5cbiAgICAgKi9cbiAgICByZWFkeShoYW5kbGVyOiBGdW5jdGlvbik6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwicmVzaXplXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICByZXNpemUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNjcm9sbFwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2Nyb2xsKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzZWxlY3RcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNlbGVjdCgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
c2VsZWN0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3Qo
ZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic3Vi
bWl0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzdWJtaXQoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzdWJtaXRc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgc3VibWl0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8g
dGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHN1
Ym1pdChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VyKGV2ZW50VHlwZTogc3RyaW5n
LCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHRyaWdnZXIoZXZlbnQ6
IEpRdWVyeUV2ZW50T2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlckhhbmRsZXIoZXZlbnRU
eXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55W10pOiBPYmplY3Q7XG5cbiAgICB1
bmJpbmQoZXZlbnRUeXBlPzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuYmluZChldmVudFR5cGU6IHN0cmlu
ZywgZmxzOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHVuYmluZChldnQ6IGFueSk6IEpRdWVyeTtc
blxuICAgIHVuZGVsZWdhdGUoKTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFu
eSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBl
dmVudHM6IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKG5hbWVzcGFjZTogc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgdW5sb2FkKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmxvYWQoZXZlbnREYXRhPzogYW55LCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLy8gSW50ZXJuYWxzXG4gICAgY29udGV4dDogRWxlbWVudDtcbiAgICBqcXVlcnk6IHN0
cmluZztcblxuICAgIGVycm9yKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBlcnJvcihldmVudERhdGE6IGFueSwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
cHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwdXNoU3RhY2soZWxlbWVu
dHM6IGFueVtdLCBuYW1lOiBhbnksIGFyZ3VtZW50czogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8g
TWFuaXB1bGF0aW9uXG4gICAgYWZ0ZXIoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAg
YWZ0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZCgu
Li5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhcHBlbmQoZnVuYzogKGluZGV4OiBhbnks
IGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kVG8odGFyZ2V0OiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBiZWZvcmUoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAg
YmVmb3JlKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBjbG9uZSh3
aXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4sIGRlZXBXaXRoRGF0YUFuZEV2ZW50cz86IGJvb2xl
YW4pOiBKUXVlcnk7XG5cbiAgICBkZXRhY2goc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICBlbXB0eSgpOiBKUXVlcnk7XG5cbiAgICBpbnNlcnRBZnRlcih0YXJnZXQ6IGFueSk6IEpRdWVy
eTtcbiAgICBpbnNlcnRCZWZvcmUodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVwZW5k
KC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHByZXBlbmQoZnVuYzogKGluZGV4OiBh
bnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVuZFRvKHRhcmdldDog
YW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgcmVwbGFjZUFsbCh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlcGxhY2VXaXRoKGZ1
bmM6IGFueSk6IEpRdWVyeTtcblxuICAgIHRleHQoKTogc3RyaW5nO1xuICAgIHRleHQodGV4dFN0
cmluZzogYW55KTogSlF1ZXJ5O1xuICAgIHRleHQodGV4dFN0cmluZzogKGluZGV4OiBudW1iZXIs
IHRleHQ6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9BcnJheSgpOiBhbnlb
XTtcblxuICAgIHVud3JhcCgpOiBKUXVlcnk7XG5cbiAgICB3cmFwKHdyYXBwaW5nRWxlbWVudDog
YW55KTogSlF1ZXJ5O1xuICAgIHdyYXAoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIHdyYXBBbGwod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3
cmFwSW5uZXIod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgd3JhcElubmVyKGZ1
bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3Vz
XG4gICAgZWFjaChmdW5jOiAoaW5kZXg6IGFueSwgZWxlbTogRWxlbWVudCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgZ2V0KGluZGV4PzogbnVtYmVyKTogYW55O1xuXG4gICAgaW5kZXgoKTogbnVt
YmVyO1xuICAgIGluZGV4KHNlbGVjdG9yOiBzdHJpbmcpOiBudW1iZXI7XG4gICAgaW5kZXgoZWxl
bWVudDogYW55KTogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVydGllc1xuICAgIGxlbmd0aDogbnVt
YmVyO1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgW3g6IHN0cmluZ106IGFueTtcbiAgICBb
eDogbnVtYmVyXTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBUcmF2ZXJzaW5nXG4gICAgYWRkKHNl
bGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAgYWRkKC4uLmVsZW1l
bnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZGQoaHRtbDogc3RyaW5nKTogSlF1ZXJ5O1xuICAg
IGFkZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGNoaWxkcmVuKHNlbGVjdG9yPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAg
IGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IEVsZW1lbnQpOiBKUXVlcnk7XG4g
ICAgY2xvc2VzdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KGVsZW1lbnQ6IGFu
eSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yczogYW55LCBjb250ZXh0PzogRWxlbWVu
dCk6IGFueVtdO1xuXG4gICAgY29udGVudHMoKTogSlF1ZXJ5O1xuXG4gICAgZW5kKCk6IEpRdWVy
eTtcblxuICAgIGVxKGluZGV4OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBmaWx0ZXIoc2VsZWN0
b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbHRl
cihvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpbmQoc2VsZWN0b3I6IHN0cmluZyk6IEpR
dWVyeTtcbiAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBmaW5kKG9iajogSlF1
ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmlyc3QoKTogSlF1ZXJ5O1xuXG4gICAgaGFzKHNlbGVjdG9y
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGFzKGNvbnRhaW5lZDogRWxlbWVudCk6IEpRdWVyeTtc
blxuICAgIGlzKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGlzKGZ1bmM6IChpbmRl
eDogYW55KSA9PiBhbnkpOiBib29sZWFuO1xuICAgIGlzKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW47
XG4gICAgaXMob2JqOiBKUXVlcnkpOiBib29sZWFuO1xuXG4gICAgbGFzdCgpOiBKUXVlcnk7XG5c
biAgICBtYXAoY2FsbGJhY2s6IChpbmRleDogYW55LCBkb21FbGVtZW50OiBFbGVtZW50KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICBuZXh0KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4g
ICAgbmV4dEFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5leHRVbnRpbChz
ZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5leHRVbnRp
bChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5leHRV
bnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5vdChz
ZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5vdChmdW5jOiAoaW5kZXg6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIG5vdChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgbm90KG9i
ajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0UGFyZW50KCk6IEpRdWVyeTtcblxuICAg
IHBhcmVudChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHBhcmVudHMoc2VsZWN0
b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzVW50aWwoc2VsZWN0b3I/OiBzdHJp
bmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwYXJlbnRzVW50aWwoZWxlbWVudD86
IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwYXJlbnRzVW50aWwob2Jq
PzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2KHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldkFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHByZXZVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIHNpYmxpbmdzKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xu
XG4gICAgc2xpY2Uoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAg
Ly8gVXRpbGl0aWVzXG5cbiAgICBxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAg
ICBxdWV1ZShxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVl
cnk7XG4gICAgcXVldWUobmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG59XG5kZWNs
YXJlIG1vZHVsZSBcImpxdWVyeVwiIHtcbiAgICBleHBvcnQgPSAkO1xufVxuZGVjbGFyZSB2YXIg
alF1ZXJ5OiBKUXVlcnlTdGF0aWM7XG5kZWNsYXJlIHZhciAkOiBKUXVlcnlTdGF0aWM7XG4vLyBs
aWJzL2FuZ3VsYXIvYW5ndWxhci5kLnRzXG4vLyBUeXBlIGRlZmluaXRpb25zIGZvciBBbmd1bGFy
IEpTIDEuMFxuLy8gUHJvamVjdDogaHR0cDovL2FuZ3VsYXJqcy5vcmdcbi8vIERlZmluaXRpb25z
IGJ5OiBEaWVnbyBWaWxhciA8aHR0cDovL2dpdGh1Yi5jb20vZGllZ292aWxhcj5cbi8vIERlZmlu
aXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkXG5c
blxuXG5kZWNsYXJlIHZhciBhbmd1bGFyOiBuZy5JQW5ndWxhclN0YXRpYztcblxuLy8gU3VwcG9y
dCBmb3IgcGFpbmxlc3MgZGVwZW5kZW5jeSBpbmplY3Rpb25cbmludGVyZmFjZSBGdW5jdGlvbiB7
XG4gICAgJGluamVjdDpzdHJpbmdbXTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8g
bmcgbW9kdWxlIChhbmd1bGFyLmpzKVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZGVjbGFyZSBt
b2R1bGUgbmcge1xuXG4gICAgLy8gQWxsIHNlcnZpY2UgcHJvdmlkZXJzIGV4dGVuZCB0aGlzIGlu
dGVyZmFjZVxuICAgIGludGVyZmFjZSBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgJGdldDog
YW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuZ3VsYXJTdGF0
aWNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGlcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJTdGF0aWMge1xuICAgICAgICBiaW5k
KGNvbnRleHQ6IGFueSwgZm46IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlbXSk6IEZ1bmN0aW9uO1xu
ICAgICAgICBib290c3RyYXAoZWxlbWVudDogc3RyaW5nLCBtb2R1bGVzPzogYW55W10pOiBhdXRv
LklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBKUXVlcnksIG1v
ZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFw
KGVsZW1lbnQ6IEVsZW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2Vydmlj
ZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IERvY3VtZW50LCBtb2R1bGVzPzogYW55W10p
OiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGNvcHkoc291cmNlOiBhbnksIGRlc3Rp
bmF0aW9uPzogYW55KTogYW55O1xuICAgICAgICBlbGVtZW50OiBJQXVnbWVudGVkSlF1ZXJ5U3Rh
dGljO1xuICAgICAgICBlcXVhbHModmFsdWUxOiBhbnksIHZhbHVlMjogYW55KTogYm9vbGVhbjtc
biAgICAgICAgZXh0ZW5kKGRlc3RpbmF0aW9uOiBhbnksIC4uLnNvdXJjZXM6IGFueVtdKTogYW55
O1xuICAgICAgICBmb3JFYWNoKG9iajogYW55LCBpdGVyYXRvcjogKHZhbHVlOiBhbnksIGtleTog
YW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBhbnk7XG4gICAgICAgIGZyb21Kc29uKGpzb246
IHN0cmluZyk6IGFueTtcbiAgICAgICAgaWRlbnRpdHkoYXJnPzogYW55KTogYW55O1xuICAgICAg
ICBpbmplY3Rvcihtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAg
ICAgIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGF0ZSh2YWx1ZTog
YW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xu
ICAgICAgICBpc0VsZW1lbnQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRnVuY3Rp
b24odmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBi
b29sZWFuO1xuICAgICAgICBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAg
aXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzVW5kZWZpbmVkKHZhbHVl
OiBhbnkpOiBib29sZWFuO1xuICAgICAgICBsb3dlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7
XG4gICAgICAgIC8qKiBjb25zdHJ1Y3QgeW91ciBhbmd1bGFyIGFwcGxpY2F0aW9uXG5cdFx0b2Zm
aWNpYWwgZG9jczogSW50ZXJmYWNlIGZvciBjb25maWd1cmluZyBhbmd1bGFyIG1vZHVsZXMuXG5c
dFx0c2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuXHRc
dCovXG4gICAgICAgIG1vZHVsZShcbiAgICAgICAgICAgIC8qKiBuYW1lIG9mIHlvdXIgbW9kdWxl
IHlvdSB3YW50IHRvIGNyZWF0ZSAqL1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAg
ICAgICAgLyoqIG5hbWUgb2YgbW9kdWxlcyB5b3VycyBkZXBlbmRzIG9uICovXG4gICAgICAgICAg
ICByZXF1aXJlcz86IHN0cmluZ1tdLFxuICAgICAgICAgICAgY29uZmlnRnVuY3Rpb24/OiBhbnkp
OiBJTW9kdWxlO1xuICAgICAgICBub29wKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICAgICAg
dG9Kc29uKG9iajogYW55LCBwcmV0dHk/OiBib29sZWFuKTogc3RyaW5nO1xuICAgICAgICB1cHBl
cmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIHZlcnNpb246IHtcbiAgICAgICAg
ICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG1ham9yOiBudW1iZXI7XG4gICAgICAgICAg
ICBtaW5vcjogbnVtYmVyO1xuICAgICAgICAgICAgZG90OiBudW1iZXI7XG4gICAgICAgICAgICBj
b2RlbmFtZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIE1vZHVsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9hbmd1bGFyLk1vZHVsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJTW9kdWxlIHtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmluZywgYW5pbWF0aW9uRmFj
dG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5n
LCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBhbmlt
YXRpb24ob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJlIGV4
aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdo
aWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xuICAg
ICAgICBjb25maWcoY29uZmlnRm46IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNv
bmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0
ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0
XHQgKi9cbiAgICAgICAgY29uZmlnKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElN
b2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElNb2R1
bGU7XG4gICAgICAgIGNvbnN0YW50KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAg
Y29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24p
OiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3Rh
ZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihvYmpl
Y3QgOiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBk
aXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4g
ICAgICAgIGRpcmVjdGl2ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGZhY3Rv
cnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1
bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlv
bjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG9iamVjdDogT2JqZWN0KTogSU1v
ZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeUZ1bmN0aW9u
OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGlubGlu
ZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihvYmpl
Y3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgc2Vy
dmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcHJv
dmlkZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJ
TW9kdWxlO1xuICAgICAgICBwcm92aWRlcihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAg
ICAgIHJ1bihpbml0aWFsaXphdGlvbkZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAg
ICAgIHJ1bihpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAg
ICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgc2VydmljZUNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElN
b2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25z
dHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG9iamVjdDogT2JqZWN0
KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1v
ZHVsZTtcbiAgICAgICAgdmFsdWUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuXG4gICAgICAg
IC8vIFByb3BlcnRpZXNcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICByZXF1aXJlczog
c3RyaW5nW107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQXR0cmli
dXRlc1xuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGls
ZS5kaXJlY3RpdmUuQXR0cmlidXRlc1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJQXR0cmlidXRlcyB7XG5cdC8vIHRoaXMgaXMgbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8g
YWNjZXNzIHRoZSBzY29wZWQgYXR0cmlidXRlcy4gaXQncyBub3QgdmVyeSBlbGVnYW50XG5cdC8v
IGJlY2F1c2UgeW91IGhhdmUgdG8gdXNlIGF0dHJzWydmb28nXSBpbnN0ZWFkIG9mIGF0dHJzLmZv
byBidXQgSSBkb24ndCBrbm93IG9mIGEgYmV0dGVyIHdheVxuXHQvLyB0aGlzIHNob3VsZCByZWFs
bHkgYmUgbGltaXRlZCB0byByZXR1cm4gc3RyaW5nIGJ1dCBpdCBjcmVhdGVzIHRoaXMgcHJvYmxl
bTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTcyMDE4NTQvMTY1NjU2XG5cdFtuYW1lOiBz
dHJpbmddOiBhbnk7XG5cbiAgICAgICAgLy8gQWRkcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNp
ZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIHRvIHRoZVxuICAgICAgICAvLyBlbGVtZW50
LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJp
Z2dlcmVkXG4gICAgICAgIC8vIGZvciB0aGUgY2xhc3MgYWRkaXRpb24uXG4gICAgICAgICRhZGRD
bGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAgICAgICAvLyBSZW1vdmVzIHRoZSBD
U1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgZnJvbSB0
aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFu
IGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3JcbiAgICAgICAgLy8gdGhlIGNsYXNzIHJl
bW92YWwuXG4gICAgICAgICRyZW1vdmVDbGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxu
ICAgICAgICAvLyBTZXQgRE9NIGVsZW1lbnQgYXR0cmlidXRlIHZhbHVlLlxuICAgICAgICAkc2V0
KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAgICAvLyBPYnNlcnZlcyBh
biBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlLlxuICAgICAgICAvLyBUaGUgb2JzZXJ2ZXIgZnVuY3Rp
b24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBuZXh0ICRkaWdlc3RcbiAgICAgICAg
Ly8gZm9sbG93aW5nIGNvbXBpbGF0aW9uLiBUaGUgb2JzZXJ2ZXIgaXMgdGhlbiBpbnZva2VkIHdo
ZW5ldmVyIHRoZVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZWQgdmFsdWUgY2hhbmdlcy5cbiAgICAg
ICAgJG9ic2VydmUobmFtZTogc3RyaW5nLCBmbjoodmFsdWU/OmFueSk9PmFueSk6IEZ1bmN0aW9u
O1xuXG4gICAgICAgIC8vIEEgbWFwIG9mIERPTSBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lcyB0byB0
aGUgbm9ybWFsaXplZCBuYW1lLiBUaGlzIGlzIG5lZWRlZFxuICAgICAgICAvLyB0byBkbyByZXZl
cnNlIGxvb2t1cCBmcm9tIG5vcm1hbGl6ZWQgbmFtZSBiYWNrIHRvIGFjdHVhbCBuYW1lLlxuICAg
ICAgICAkYXR0cjogT2JqZWN0O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIEZvcm1Db250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElGb3JtQ29udHJvbGxlciB7XG4gICAgICAgICRwcmlzdGluZTog
Ym9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xl
YW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAg
ICAgICAgJGFkZENvbnRyb2woY29udHJvbDogbmcuSU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtc
biAgICAgICAgJHJlbW92ZUNvbnRyb2woY29udHJvbDogbmcuSU5nTW9kZWxDb250cm9sbGVyKTog
dm9pZDtcbiAgICAgICAgJHNldERpcnR5KCk6IHZvaWQ7XG4gICAgICAgICRzZXRQcmlzdGluZSgp
OiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIE5nTW9kZWxD
b250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLmRp
cmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElOZ01vZGVsQ29udHJvbGxlciB7XG4gICAgICAgICRyZW5kZXIoKTog
dm9pZDtcbiAgICAgICAgJHNldFZhbGlkaXR5KHZhbGlkYXRpb25FcnJvcktleTogc3RyaW5nLCBp
c1ZhbGlkOiBib29sZWFuKTogdm9pZDtcbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMg
dmlld1ZhbHVlIGFuZCBtb2RlbFZhbHVlIHRvIGJlIGEgc3RyaW5nIGJ1dCBvdGhlclxuICAgICAg
ICAvLyB0eXBlcyBkbyB3b3JrIGFuZCBpdCdzIGNvbW1vbiB0byB1c2UgdGhlbS5cbiAgICAgICAg
JHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55KTogdm9pZDtcbiAgICAgICAgJHZpZXdWYWx1ZTogYW55
O1xuXG4gICAgICAgICRtb2RlbFZhbHVlOiBhbnk7XG5cbiAgICAgICAgJHBhcnNlcnM6IElNb2Rl
bFBhcnNlcltdO1xuICAgICAgICAkZm9ybWF0dGVyczogSU1vZGVsRm9ybWF0dGVyW107XG4gICAg
ICAgICRlcnJvcjogYW55O1xuICAgICAgICAkcHJpc3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRk
aXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFuO1xuICAgICAgICAkaW52YWxp
ZDogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsUGFyc2VyIHtcbiAgICAg
ICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbEZvcm1h
dHRlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIFNjb3BlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRyb290U2NvcGUuU2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSVNjb3BlIHtcbiAgICAgICAgJGFwcGx5KCk6IGFueTtcbiAgICAgICAgJGFw
cGx5KGV4cDogc3RyaW5nKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhwOiAoc2NvcGU6IElTY29w
ZSkgPT4gYW55KTogYW55O1xuXG4gICAgICAgICRicm9hZGNhc3QobmFtZTogc3RyaW5nLCAuLi5h
cmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG4gICAgICAgICRkZXN0cm95KCk6IHZvaWQ7XG4g
ICAgICAgICRkaWdlc3QoKTogdm9pZDtcbiAgICAgICAgJGVtaXQobmFtZTogc3RyaW5nLCAuLi5h
cmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBz
YXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNvdW50cyBvbiBp
dFxuICAgICAgICAkZXZhbChleHByZXNzaW9uOiBzdHJpbmcsIGFyZ3M/OiBPYmplY3QpOiBhbnk7
XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGFyZ3M/
OiBPYmplY3QpOiBhbnk7XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBv
cHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNvdW50cyBvbiBpdFxuICAgICAgICAk
ZXZhbEFzeW5jKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQ7XG4gICAgICAgICRldmFsQXN5bmMo
ZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8g
RGVmYXVsdHMgdG8gZmFsc2UgYnkgdGhlIGltcGxlbWVudGF0aW9uIGNoZWNraW5nIHN0cmF0ZWd5
XG4gICAgICAgICRuZXcoaXNvbGF0ZT86IGJvb2xlYW4pOiBJU2NvcGU7XG5cbiAgICAgICAgJG9u
KG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogSUFuZ3VsYXJFdmVudCwgLi4uYXJnczog
YW55W10pID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Np
b246IHN0cmluZywgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6
IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3Rl
bmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFu
eSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3
YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzogc3RyaW5n
LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdh
dGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiAobmV3VmFs
dWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmplY3RFcXVh
bGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdh
dGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcjogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVl
OiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2hD
b2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVu
ZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkp
OiBGdW5jdGlvbjtcblxuICAgICAgICAkcGFyZW50OiBJU2NvcGU7XG5cbiAgICAgICAgJGlkOiBu
dW1iZXI7XG5cbiAgICAgICAgLy8gSGlkZGVuIG1lbWJlcnNcbiAgICAgICAgJCRpc29sYXRlQmlu
ZGluZ3M6IGFueTtcbiAgICAgICAgJCRwaGFzZTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJQW5ndWxhckV2ZW50IHtcbiAgICAgICAgdGFyZ2V0U2NvcGU6IElTY29wZTtcbiAgICAgICAg
Y3VycmVudFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcHJl
dmVudERlZmF1bHQ6IEZ1bmN0aW9uO1xuICAgICAgICBkZWZhdWx0UHJldmVudGVkOiBib29sZWFu
O1xuXG4gICAgICAgIC8vIEF2YWlsYWJsZSBvbmx5IGV2ZW50cyB0aGF0IHdlcmUgJGVtaXQtdGVk
XG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbj86IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIFdpbmRvd1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHdpbmRvd1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJV2luZG93U2VydmljZSBleHRlbmRzIFdpbmRvdyB7fVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQnJvd3NlclNlcnZpY2VcbiAgICAvLyBUT0RPIHVuZG9j
dW1lbnRlZCwgc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgc291cmNlIGNvZGVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUJyb3dzZXJTZXJ2aWNlIHt9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUaW1lb3V0U2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGltZW91dFxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJVGltZW91dFNlcnZpY2Uge1xuICAgICAgICAoZnVuYzog
RnVuY3Rpb24sIGRlbGF5PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJvb2xlYW4pOiBJUHJvbWlz
ZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8YW55Pik6IGJvb2xlYW47
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJ2YWxTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnZhbFxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJ2YWxTZXJ2aWNlIHtc
biAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyLCBjb3VudD86IG51bWJlciwg
aW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHBy
b21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIEZpbHRlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kZmlsdGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUZpbHRlclNlcnZpY2Uge1xuICAgICAgICAobmFtZTogc3RyaW5nKTogRnVu
Y3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJQcm92aWRlciBleHRlbmRzIElT
ZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZh
Y3Rvcnk6IEZ1bmN0aW9uKTogSVNlcnZpY2VQcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBMb2NhbGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhbGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUxvY2FsZVNlcnZpY2Uge1xuICAgICAgICBpZDogc3RyaW5nO1xuXG4gICAg
ICAgIC8vIFRoZXNlIGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAgICAvLyBDaGVjayBhbmd1bGFy
J3MgaTE4biBmaWxlcyBmb3IgZXhlbXBsZXNcbiAgICAgICAgTlVNQkVSX0ZPUk1BVFM6IElMb2Nh
bGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBEQVRFVElNRV9GT1JNQVRTOiBJTG9j
YWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBwbHVyYWxDYXQ6IChudW06IGFu
eSkgPT4gc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlTnVtYmVyRm9ybWF0
RGVzY3JpcHRvciB7XG4gICAgICAgIERFQ0lNQUxfU0VQOiBzdHJpbmc7XG4gICAgICAgIEdST1VQ
X1NFUDogc3RyaW5nO1xuICAgICAgICBQQVRURVJOUzogSUxvY2FsZU51bWJlclBhdHRlcm5EZXNj
cmlwdG9yW107XG4gICAgICAgIENVUlJFTkNZX1NZTTogc3RyaW5nO1xuICAgIH1cblxuICAgIGlu
dGVyZmFjZSBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3Ige1xuICAgICAgICBtaW5JbnQ6
IG51bWJlcjtcbiAgICAgICAgbWluRnJhYzogbnVtYmVyO1xuICAgICAgICBtYXhGcmFjOiBudW1i
ZXI7XG4gICAgICAgIHBvc1ByZTogc3RyaW5nO1xuICAgICAgICBwb3NTdWY6IHN0cmluZztcbiAg
ICAgICAgbmVnUHJlOiBzdHJpbmc7XG4gICAgICAgIG5lZ1N1Zjogc3RyaW5nO1xuICAgICAgICBn
U2l6ZTogbnVtYmVyO1xuICAgICAgICBsZ1NpemU6IG51bWJlcjtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvciB7XG4gICAgICAgIE1PTlRIOiBz
dHJpbmdbXTtcbiAgICAgICAgU0hPUlRNT05USDogc3RyaW5nW107XG4gICAgICAgIERBWTogc3Ry
aW5nW107XG4gICAgICAgIFNIT1JUREFZOiBzdHJpbmdbXTtcbiAgICAgICAgQU1QTVM6IHN0cmlu
Z1tdO1xuICAgICAgICBtZWRpdW06IHN0cmluZztcbiAgICAgICAgc2hvcnQ6IHN0cmluZztcbiAg
ICAgICAgZnVsbERhdGU6IHN0cmluZztcbiAgICAgICAgbG9uZ0RhdGU6IHN0cmluZztcbiAgICAg
ICAgbWVkaXVtRGF0ZTogc3RyaW5nO1xuICAgICAgICBzaG9ydERhdGU6IHN0cmluZztcbiAgICAg
ICAgbWVkaXVtVGltZTogc3RyaW5nO1xuICAgICAgICBzaG9ydFRpbWU6IHN0cmluZztcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2dTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2dcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xuICAgICAgICBkZWJ1ZzogSUxvZ0Nh
bGw7XG4gICAgICAgIGVycm9yOiBJTG9nQ2FsbDtcbiAgICAgICAgaW5mbzogSUxvZ0NhbGw7XG4g
ICAgICAgIGxvZzogSUxvZ0NhbGw7XG4gICAgICAgIHdhcm46IElMb2dDYWxsO1xuICAgIH1cblxu
ICAgIC8vIFdlIGRlZmluZSB0aGlzIGFzIHNlcGFyZXRlIGludGVyZmFjZSBzbyB3ZSBjYW4gcmVv
cGVuIGl0IGxhdGVyIGZvclxuICAgIC8vIHRoZSBuZ01vY2sgbW9kdWxlLlxuICAgIGludGVyZmFj
ZSBJTG9nQ2FsbCB7XG4gICAgICAgICguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUGFyc2VTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRwYXJzZVxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJUGFyc2VTZXJ2aWNlIHtcbiAgICAgICAgKGV4cHJlc3Npb246
IHN0cmluZyk6IElDb21waWxlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElD
b21waWxlZEV4cHJlc3Npb24ge1xuICAgICAgICAoY29udGV4dDogYW55LCBsb2NhbHM/OiBhbnkp
OiBhbnk7XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgbm90IHByb3ZpZGVkLCB1bmRlZmluZWQg
aXMgZ29ubmEgYmUgdXNlZCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb25cbiAgICAgICAgLy8gZG9l
cyBub3QgY2hlY2sgdGhlIHBhcmFtZXRlci4gTGV0J3MgZm9yY2UgYSB2YWx1ZSBmb3IgY29uc2lz
dGVuY3kuIElmIGNvbnN1bWVyXG4gICAgICAgIC8vIHdoYW50cyB0byB1bmRlZmluZSBpdCwgcGFz
cyB0aGUgdW5kZWZpbmVkIHZhbHVlIGV4cGxpY2l0bHkuXG4gICAgICAgIGFzc2lnbihjb250ZXh0
OiBhbnksIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gTG9jYXRpb25TZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRsb2NhdGlvblxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kbG9jYXRpb25Qcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2d1aWRlL2Rldl9ndWlkZS5zZXJ2aWNlcy4kbG9jYXRpb25cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uU2VydmljZSB7XG4gICAgICAgIGFi
c1VybCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2goKTogc3RyaW5nO1xuICAgICAgICBoYXNoKG5l
d0hhc2g6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIGhvc3QoKTogc3RyaW5n
O1xuICAgICAgICBwYXRoKCk6IHN0cmluZztcbiAgICAgICAgcGF0aChuZXdQYXRoOiBzdHJpbmcp
OiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBwb3J0KCk6IG51bWJlcjtcbiAgICAgICAgcHJv
dG9jb2woKTogc3RyaW5nO1xuICAgICAgICByZXBsYWNlKCk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIHNlYXJjaCgpOiBhbnk7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0ZXJzTWFwOiBhbnkp
OiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyOiBzdHJpbmcsIHBh
cmFtZXRlclZhbHVlOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICB1cmwoKTogc3Ry
aW5nO1xuICAgICAgICB1cmwodXJsOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJTG9jYXRpb25Qcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlk
ZXIge1xuICAgICAgICBoYXNoUHJlZml4KCk6IHN0cmluZztcbiAgICAgICAgaGFzaFByZWZpeChw
cmVmaXg6IHN0cmluZyk6IElMb2NhdGlvblByb3ZpZGVyO1xuICAgICAgICBodG1sNU1vZGUoKTog
Ym9vbGVhbjtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IHBhcmFtZXRl
ciBpcyBzdHJpbmcsIGJ1dFxuICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiB0ZXN0cyBpdCBhcyBi
b29sZWFuLCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlXG4gICAgICAgIC8vIHNpbmNlIHRoaXMgaXMg
YSB0b2dnbGVyXG4gICAgICAgIGh0bWw1TW9kZShhY3RpdmU6IGJvb2xlYW4pOiBJTG9jYXRpb25Q
cm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEb2N1bWVu
dFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGRv
Y3VtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElEb2N1bWVudFNl
cnZpY2UgZXh0ZW5kcyBEb2N1bWVudCB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gRXhjZXB0aW9uSGFuZGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGV4Y2VwdGlvbkhhbmRsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSUV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlIHtcbiAgICAgICAgKGV4Y2Vw
dGlvbjogRXJyb3IsIGNhdXNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBSb290RWxlbWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RFbGVtZW50XG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290RWxlbWVudFNlcnZpY2UgZXh0ZW5kcyBKUXVlcnkg
e31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFFTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRxXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElRU2VydmljZSB7XG4gICAgICAgIGFsbChwcm9taXNlczogSVBy
b21pc2U8YW55PltdKTogSVByb21pc2U8YW55W10+O1xuICAgICAgICBkZWZlcjxUPigpOiBJRGVm
ZXJyZWQ8VD47XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiBJUHJvbWlzZTx2b2lkPjtc
biAgICAgICAgd2hlbjxUPih2YWx1ZTogVCk6IElQcm9taXNlPFQ+O1xuICAgIH1cblxuICAgIGlu
dGVyZmFjZSBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxi
YWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJSHR0cFByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2Fs
bGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFu
eSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3Vj
Y2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJUHJvbWlzZTxUUmVzdWx0PiwgZXJy
b3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0
ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0
PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IFRSZXN1bHQsIGVycm9yQ2Fs
bGJhY2s/OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQsIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRl
OiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuXG5cbiAgICAgICAgY2F0Y2g8VFJl
c3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJSHR0cFByb21pc2U8VFJlc3VsdD4p
OiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDog
KHJlYXNvbjogYW55KSA9PiBJUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9taXNlPFRSZXN1bHQ+O1xu
ICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IFRSZXN1
bHQpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuICAgICAgICBmaW5hbGx5PFRSZXN1bHQ+KGZpbmFs
bHlDYWxsYmFjazogKCk9PmFueSk6SVByb21pc2U8VFJlc3VsdD47XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElEZWZlcnJlZDxUPiB7XG4gICAgICAgIHJlc29sdmUodmFsdWU/OiBUKTogdm9pZDtc
biAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IHZvaWQ7XG4gICAgICAgIG5vdGlmeShzdGF0
ZT86YW55KTogdm9pZDtcbiAgICAgICAgcHJvbWlzZTogSVByb21pc2U8VD47XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5jaG9yU2Nyb2xsU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kYW5jaG9yU2Nyb2xsXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmNob3JTY3JvbGxTZXJ2aWNlIHtc
biAgICAgICAgKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmNob3JTY3JvbGxQ
cm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkaXNhYmxlQXV0b1Nj
cm9sbGluZygpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IENhY2hlRmFjdG9yeVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGNhY2hlRmFjdG9yeVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJQ2FjaGVGYWN0b3J5U2VydmljZSB7XG4gICAgICAgIC8vIExldHMgbm90IGZvY2UgdGhl
IG9wdGlvbnNNYXAgdG8gaGF2ZSB0aGUgY2FwYWNpdHkgbWVtYmVyLiBFdmVuIHRob3VnaFxuICAg
ICAgICAvLyBpdCdzIHRoZSBPTkxZIG9wdGlvbiBjb25zaWRlcmVkIGJ5IHRoZSBpbXBsZW1lbnRh
dGlvbiB0b2RheSwgYSBjb25zdW1lclxuICAgICAgICAvLyBtaWdodCBmaW5kIGl0IHVzZWZ1bCB0
byBhc3NvY2lhdGUgc29tZSBvdGhlciBvcHRpb25zIHRvIHRoZSBjYWNoZSBvYmplY3QuXG4gICAg
ICAgIC8vKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsg
fSk6IENhY2hlT2JqZWN0O1xuICAgICAgICAoY2FjaGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzog
eyBjYXBhY2l0eTogbnVtYmVyOyB9KTogSUNhY2hlT2JqZWN0O1xuXG4gICAgICAgIC8vIE1ldGhv
ZHMgYmVsbG93IGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAgICBpbmZvKCk6IGFueTtcbiAgICAg
ICAgZ2V0IChjYWNoZUlkOiBzdHJpbmcpOiBJQ2FjaGVPYmplY3Q7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElDYWNoZU9iamVjdCB7XG4gICAgICAgIGluZm8oKToge1xuICAgICAgICAgICAgaWQ6
IHN0cmluZztcbiAgICAgICAgICAgIHNpemU6IG51bWJlcjtcblxuICAgICAgICAgICAgLy8gTm90
IGdhcmFudGVlZCB0byBoYXZlLCBzaW5jZSBpdCdzIGEgbm9uLW1hbmRhdG9yeSBvcHRpb25cbiAg
ICAgICAgICAgIC8vY2FwYWNpdHk6IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgICAgcHV0KGtl
eTogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHZvaWQ7XG4gICAgICAgIGdldCAoa2V5OiBzdHJpbmcp
OiBhbnk7XG4gICAgICAgIHJlbW92ZShrZXk6IHN0cmluZyk6IHZvaWQ7XG4gICAgICAgIHJlbW92
ZUFsbCgpOiB2b2lkO1xuICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29tcGlsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29tcGlsZVNlcnZpY2Uge1xuICAgICAgICAoZWxlbWVu
dDogc3RyaW5nLCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlv
cml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAgICAgKGVsZW1l
bnQ6IEVsZW1lbnQsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFBy
aW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxl
bWVudDogSlF1ZXJ5LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQ
cmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICB9XG5cbiAg
ICBpbnRlcmZhY2UgSUNvbXBpbGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xu
ICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlv
bik6IElDb21waWxlUHJvdmlkZXI7XG5cbiAgICAgICAgLy8gVW5kb2N1bWVudGVkLCBidXQgaXQg
aXMgdGhlcmUuLi5cbiAgICAgICAgZGlyZWN0aXZlKGRpcmVjdGl2ZXNNYXA6IGFueSk6IElDb21w
aWxlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElUZW1wbGF0ZUxpbmtpbmdGdW5j
dGlvbiB7XG4gICAgICAgIC8vIExldCdzIGhpbnQgYnV0IG5vdCBmb3JjZSBjbG9uZUF0dGFjaEZu
J3Mgc2lnbmF0dXJlXG4gICAgICAgIChzY29wZTogSVNjb3BlLCBjbG9uZUF0dGFjaEZuPzogKGNs
b25lZEVsZW1lbnQ/OiBKUXVlcnksIHNjb3BlPzogSVNjb3BlKSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29udHJvbGxlclNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbnRyb2xsZXJc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbnRyb2xsZXJQ
cm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29udHJvbGxl
clNlcnZpY2Uge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0
IHN0YXRlIHRoaXMsIGxvY2FscyBhcmUgb3B0aW9uYWxcbiAgICAgICAgKGNvbnRyb2xsZXJDb25z
dHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgKGNvbnRyb2xs
ZXJOYW1lOiBzdHJpbmcsIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZh
Y2UgSUNvbnRyb2xsZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAg
ICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24p
OiB2b2lkO1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGRlcGVuZGVuY3lBbm5vdGFk
ZWRDb25zdHJ1Y3RvcjogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIEh0dHBTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRodHRwXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElIdHRwU2VydmljZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0IG1vZXRob2QgYW5kIHVybCBtdXN0
IGJlIHByb3ZpZGVkLi4uXG4gICAgICAgIChjb25maWc6IElSZXF1ZXN0Q29uZmlnKTogSUh0dHBQ
cm9taXNlPGFueT47XG4gICAgICAgIGdldCAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBh
bnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVsZXRlICh1cmw6IHN0cmluZywgUmVx
dWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBoZWFkKHVybDog
c3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAg
IGpzb25wKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFu
eT47XG4gICAgICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86
IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwdXQodXJsOiBzdHJpbmcsIGRhdGE6
IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBk
ZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG5cbiAgICAgICAgLy8gRm9yIGRlYnVnZ2luZywgQlVU
IGl0IGlzIGRvY3VtZW50ZWQgYXMgcHVibGljLCBzby4uLlxuICAgICAgICBwZW5kaW5nUmVxdWVz
dHM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMganVzdCBmb3IgaGludGluZy5cbiAg
ICAvLyBTb21lIG9wZXRpb25zIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgZGVwZW5kaW5nIG9uIHRo
ZSByZXF1ZXN0LlxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
aHR0cCNVc2FnZSBmb3Igb3B0aW9ucyBleHBsYW5hdGlvbnNcbiAgICBpbnRlcmZhY2UgSVJlcXVl
c3RDb25maWcge1xuICAgICAgICBtZXRob2Q6IHN0cmluZztcbiAgICAgICAgdXJsOiBzdHJpbmc7
XG4gICAgICAgIHBhcmFtcz86IGFueTtcblxuICAgICAgICAvLyBYWFggaXQgaGFzIGl0J3Mgb3du
IHN0cnVjdHVyZS4uLiAgcGVyaGFwcyB3ZSBzaG91bGQgZGVmaW5lIGl0IGluIHRoZSBmdXR1cmVc
biAgICAgICAgaGVhZGVycz86IGFueTtcblxuICAgICAgICBjYWNoZT86IGFueTtcbiAgICAgICAg
d2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAgICAgICAvLyBUaGVzZSBhY2NlcHQgbXVs
dGlwbGUgdHlwZXMsIHNvIGxldCdzIGRlZmluZSB0aGVtIGFzIGFueVxuICAgICAgICBkYXRhPzog
YW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1S
ZXNwb25zZT86IGFueTtcbiAgICAgICAgdGltZW91dD86IGFueTsgLy8gbnVtYmVyIHwgcHJvbWlz
ZVxuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2VDYWxsYmFjazxUPiB7XG4gICAg
ICAgIChkYXRhOiBULCBzdGF0dXM6IG51bWJlciwgaGVhZGVyczogKGhlYWRlck5hbWU6IHN0cmlu
ZykgPT4gc3RyaW5nLCBjb25maWc6IElSZXF1ZXN0Q29uZmlnKTogdm9pZDtcbiAgICB9XG5cbiAg
ICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4ge1xuICAgICAgICBkYXRhPzog
VDtcbiAgICAgICAgc3RhdHVzPzogbnVtYmVyO1xuICAgICAgICBoZWFkZXJzPzogKGhlYWRlck5h
bWU6IHN0cmluZykgPT4gc3RyaW5nO1xuICAgICAgICBjb25maWc/OiBJUmVxdWVzdENvbmZpZztc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlPFQ+IGV4dGVuZHMgSVByb21pc2U8
VD4ge1xuICAgICAgICBzdWNjZXNzKGNhbGxiYWNrOiBJSHR0cFByb21pc2VDYWxsYmFjazxUPik6
IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgZXJyb3IoY2FsbGJhY2s6IElIdHRwUHJvbWlzZUNh
bGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nl
c3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gVFJl
c3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8
VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1
Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4g
SVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlz
ZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAg
ICBpbnRlcmZhY2UgSUh0dHBQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAg
ICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG4gICAgICAgIGludGVyY2VwdG9yczogYW55
W107XG4gICAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwQmFja2VuZFNlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBCYWNrZW5kXG4gICAgLy8gWW91
IHNob3VsZCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgZGlyZWN0bHkuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRwQmFja2VuZFNlcnZpY2Uge1xuICAg
ICAgICAvLyBYWFggUGVyaGFwcyBkZWZpbmUgY2FsbGJhY2sgc2lnbmF0dXJlIGluIHRoZSBmdXR1
cmVcbiAgICAgICAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgcG9zdD86IGFueSwgY2Fs
bGJhY2s/OiBGdW5jdGlvbiwgaGVhZGVycz86IGFueSwgdGltZW91dD86IG51bWJlciwgd2l0aENy
ZWRlbnRpYWxzPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gSW50ZXJwb2xhdGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVTZXJ2aWNlIHtcbiAgICAgICAgKHRl
eHQ6IHN0cmluZywgbXVzdEhhdmVFeHByZXNzaW9uPzogYm9vbGVhbik6IElJbnRlcnBvbGF0aW9u
RnVuY3Rpb247XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3lt
Ym9sKCk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRpb25GdW5j
dGlvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnkpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElJbnRlcnBvbGF0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4g
ICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2wodmFsdWU6
IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgICAgICBlbmRTeW1ib2woKTogc3Ry
aW5nO1xuICAgICAgICBlbmRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3Zp
ZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFRlbXBsYXRlQ2Fj
aGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0
ZW1wbGF0ZUNhY2hlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElUZW1w
bGF0ZUNhY2hlU2VydmljZSBleHRlbmRzIElDYWNoZU9iamVjdCB7fVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gUm9vdFNjb3BlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElSb290U2NvcGVTZXJ2aWNlIGV4dGVuZHMgSVNjb3BlIHt9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
blx0aW50ZXJmYWNlIElTQ0VTZXJ2aWNlIHtcblx0XHRnZXRUcnVzdGVkKHR5cGU6IHN0cmluZywg
bWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZENzcyh2YWx1ZTogYW55KTog
YW55O1xuXHRcdGdldFRydXN0ZWRIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3Rl
ZEpzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFJlc291cmNlVXJsKHZhbHVlOiBh
bnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHBhcnNl
KHR5cGU6IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxz
OiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzQ3NzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250
ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0h0bWwoZXhwcmVzc2lv
bjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJz
ZUFzSnMoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+
IGFueTtcblx0XHRwYXJzZUFzUmVzb3VyY2VVcmwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRl
eHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzVXJsKGV4cHJlc3Npb246
IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0dHJ1c3RB
cyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0h0bWwodmFsdWU6
IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSnModmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFz
UmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzVXJsKHZhbHVlOiBhbnkp
OiBhbnk7XG5cdFx0aXNFbmFibGVkKCk6IGJvb2xlYW47XG5cdH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIFNDRVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRzY2VQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJU0NFUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAg
ICAgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVTZXJ2aWNlIHtcbiAgICAgICAgZ2V0VHJ1
c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuICAgICAgICB0cnVz
dEFzKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgdmFsdWVPZih2YWx1
ZTogYW55KTogYW55O1xuICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
U0NFRGVsZWdhdGVQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kc2NlRGVsZWdhdGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJU0NFRGVsZWdhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIg
e1xuICAgICAgICByZXNvdXJjZVVybEJsb2NrbGlzdChibG9ja2xpc3Q6IGFueVtdKTogdm9pZDtc
biAgICAgICAgcmVzb3VyY2VVcmxBbGxvd2xpc3QoYWxsb3dsaXN0OiBhbnlbXSk6IHZvaWQ7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRGlyZWN0aXZlXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXIjZGly
ZWN0aXZlXG4gICAgLy8gYW5kIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlyZWN0
aXZlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpbnRlcmZhY2UgSURpcmVjdGl2ZXtc
biAgICAgICAgY29tcGlsZT86XG4gICAgICAgICAgICAodGVtcGxhdGVFbGVtZW50OiBhbnksXG4g
ICAgICAgICAgICB0ZW1wbGF0ZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAg
dHJhbnNjbHVkZTogKHNjb3BlOiBJU2NvcGUsIGNsb25lTGlua2luZ0ZuOiBGdW5jdGlvbikgPT4g
dm9pZFxuICAgICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIGNvbnRyb2xsZXI/OiBhbnk7XG4g
ICAgICAgIGNvbnRyb2xsZXJBcz86IHN0cmluZztcbiAgICAgICAgbGluaz86XG4gICAgICAgICAg
ICAoc2NvcGU6IElTY29wZSxcbiAgICAgICAgICAgIGluc3RhbmNlRWxlbWVudDogYW55LFxuICAg
ICAgICAgICAgaW5zdGFuY2VBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAgICAgICAgIGNv
bnRyb2xsZXI6IGFueVxuICAgICAgICAgICAgKSA9PiB2b2lkO1xuICAgICAgICBuYW1lPzogc3Ry
aW5nO1xuICAgICAgICBwcmlvcml0eT86IG51bWJlcjtcbiAgICAgICAgcmVwbGFjZT86IGJvb2xl
YW47XG4gICAgICAgIHJlcXVpcmU/OiBhbnk7XG4gICAgICAgIHJlc3RyaWN0Pzogc3RyaW5nO1xu
ICAgICAgICBzY29wZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGU/OiBhbnk7XG4gICAgICAgIHRl
bXBsYXRlVXJsPzogYW55O1xuICAgICAgICB0ZXJtaW5hbD86IGJvb2xlYW47XG4gICAgICAgIHRy
YW5zY2x1ZGU/OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
YW5ndWxhci5lbGVtZW50XG4gICAgLy8gd2hlbiBjYWxsaW5nIGFuZ3VsYXIuZWxlbWVudCwgYW5n
dWxhciByZXR1cm5zIGEgalF1ZXJ5IG9iamVjdCxcbiAgICAvLyBhdWdtZW50ZWQgd2l0aCBhZGRp
dGlvbmFsIG1ldGhvZHMgbGlrZSBlLmcuIHNjb3BlLlxuICAgIC8vIHNlZTogaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5lbGVtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnlTdGF0aWMgZXh0ZW5kcyBKUXVlcnlTdGF0
aWMge1xuICAgICAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IElBdWdtZW50
ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50KTogSUF1Z21lbnRlZEpRdWVyeTtc
biAgICAgICAgKG9iamVjdDoge30pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVu
dEFycmF5OiBFbGVtZW50W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAob2JqZWN0OiBK
UXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZnVuYzogRnVuY3Rpb24pOiBJQXVn
bWVudGVkSlF1ZXJ5O1xuICAgICAgICAoYXJyYXk6IGFueVtdKTogSUF1Z21lbnRlZEpRdWVyeTtc
biAgICAgICAgKCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElB
dWdtZW50ZWRKUXVlcnkgZXh0ZW5kcyBKUXVlcnkge1xuICAgICAgICAvLyBUT0RPOiBldmVudHMs
IGhvdyB0byBkZWZpbmU/XG4gICAgICAgIC8vJGRlc3Ryb3lcblxuICAgICAgICBmaW5kKHNlbGVj
dG9yOiBzdHJpbmcpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKGVsZW1lbnQ6IGFu
eSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQob2JqOiBKUXVlcnkpOiBJQXVnbWVu
dGVkSlF1ZXJ5O1xuXG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nKTogYW55O1xuICAg
ICAgICBpbmplY3RvcigpOiBhbnk7XG4gICAgICAgIHNjb3BlKCk6IElTY29wZTtcblxuICAgICAg
ICBpbmhlcml0ZWREYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgICAg
ICBpbmhlcml0ZWREYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4g
ICAgICAgIGluaGVyaXRlZERhdGEoa2V5Pzogc3RyaW5nKTogYW55O1xuXG5cbiAgICB9XG5cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFVVE8gbW9kdWxlIChhbmd1bGFyLmpzKVxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGV4cG9ydCBtb2R1bGUgYXV0byB7XG5cbiAgICAg
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gSW5qZWN0b3JTZXJ2aWNlXG4gICAgICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRPLiRpbmplY3RvclxuICAgICAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2UgSUluamVjdG9yU2VydmljZSB7XG4g
ICAgICAgICAgICBhbm5vdGF0ZShmbjogRnVuY3Rpb24pOiBzdHJpbmdbXTtcbiAgICAgICAgICAg
IGFubm90YXRlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IHN0cmluZ1tdO1xuICAg
ICAgICAgICAgZ2V0IChuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgICAgICBpbnN0YW50aWF0
ZSh0eXBlQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAg
ICAgICBpbnZva2UoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogYW55O1xuICAgICAg
ICAgICAgaW52b2tlKGZ1bmM6IEZ1bmN0aW9uLCBjb250ZXh0PzogYW55LCBsb2NhbHM/OiBhbnkp
OiBhbnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAvLyBQ
cm92aWRlU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvQVVUTy4kcHJvdmlkZVxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZh
Y2UgSVByb3ZpZGVTZXJ2aWNlIHtcbiAgICAgICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBp
dCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGluc3RhbmNlLCBidXQgYWN0dWFsXG4gICAgICAgICAg
ICAvLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuXG4gICAgICAgICAg
ICAvLyBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgICAg
ICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAgICAg
ICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAg
ICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcklubGluZTogYW55W10p
OiB2b2lkO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIHNlcnZpY2VGYWN0b3J5
RnVuY3Rpb246IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIGZh
Y3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBuZy5J
U2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBwcm92
aWRlcjogbmcuSVNlcnZpY2VQcm92aWRlcik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAg
ICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBG
dW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBzZXJ2aWNlKG5hbWU6
IHN0cmluZywgY29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAg
ICAgICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IG5nLklTZXJ2aWNlUHJv
dmlkZXI7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbi8vIG1vZGVscy9Ub2RvSXRlbS50c1xuXG5t
b2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGV4cG9ydCBjbGFzcyBUb2Rv
SXRlbSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAgICAgcHVibGljIHRpdGxlOiBz
dHJpbmcsXG4gICAgICAgICAgICBwdWJsaWMgY29tcGxldGVkOiBib29sZWFuXG4gICAgICAgICAg
ICApIHsgfVxuICAgIH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TY29wZS50c1xuXG5tb2R1bGUg
dG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU2NvcGUgZXh0ZW5kcyBuZy5JU2NvcGUg
e1xuXHRcdHRvZG9zOiBUb2RvSXRlbVtdO1xuXHRcdG5ld1RvZG86IHN0cmluZztcblx0XHRlZGl0
ZWRUb2RvOiBUb2RvSXRlbTtcblx0XHRvcmlnaW5hbFRvZG86IFRvZG9JdGVtO1xuXHRcdHJlbWFp
bmluZ0NvdW50OiBudW1iZXI7XG5cdFx0ZG9uZUNvdW50OiBudW1iZXI7XG5cdFx0YWxsQ2hlY2tl
ZDogYm9vbGVhbjtcblx0XHRyZXZlcnRlZDogYm9vbGVhbjtcblx0XHRzdGF0dXNGaWx0ZXI6IHsg
Y29tcGxldGVkPzogYm9vbGVhbiB9O1xuXHRcdGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNl
O1xuXHRcdHZtOiBUb2RvQ3RybDtcblx0fVxufVxuLy8gaW50ZXJmYWNlcy9JVG9kb1N0b3JhZ2Uu
dHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1N0b3JhZ2Uge1xu
XHRcdGdldCAoKTogVG9kb0l0ZW1bXTtcblx0XHRwdXQodG9kb3M6IFRvZG9JdGVtW10pO1xuXHR9
XG59Ly8gZGlyZWN0aXZlcy9Ub2RvRm9jdXMudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBz
dHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBwbGFjZXMgZm9jdXMgb24gdGhl
IGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZSBleHByZXNzaW9uIGl0IGJpbmRzIHRv
IGV2YWx1YXRlcyB0byB0cnVlLlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRvZG9Gb2N1cygk
dGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlKTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJu
IHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRy
aWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0JHNjb3BlLiR3YXRjaChhdHRyaWJ1dGVzLnRvZG9G
b2N1cywgbmV3dmFsID0+IHtcblx0XHRcdFx0XHRpZiAobmV3dmFsKSB7XG5cdFx0XHRcdFx0XHQk
dGltZW91dCgoKSA9PiBlbGVtZW50WzBdLmZvY3VzKCksIDAsIGZhbHNlKTtcblx0XHRcdFx0XHR9
XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHR0b2RvRm9jdXMuJGluamVj
dCA9IFsnJHRpbWVvdXQnXTtcblxufS8vIGRpcmVjdGl2ZXMvVG9kb0JsdXIudHNcblxubW9kdWxl
IHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBEaXJlY3RpdmUg
dGhhdCBleGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGll
ZCB0byBsb3NlcyBmb2N1cy5cbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdG9kb0JsdXIo
KTogbmcuSURpcmVjdGl2ZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5rOiAo
JHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7
XG4gICAgICAgICAgICAgICAgZWxlbWVudC5iaW5kKCdibHVyJywgKCkgPT4geyAkc2NvcGUuJGFw
cGx5KGF0dHJpYnV0ZXMudG9kb0JsdXIpOyB9KTtcbiAgICAgICAgICAgICAgICAkc2NvcGUuJG9u
KCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQoJ2JsdXInKTsgfSk7XG4gICAgICAg
ICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gZGlyZWN0aXZlcy9Ub2RvRXNjYXBlLnRz
XG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHRjb25zdCBFU0NBUEVfS0VZ
ID0gMjc7XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IGNhbmNlbHMgZWRpdGluZyBhIHRv
ZG8gaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgRXNjIGtleS5cblx0ICovXG5cdGV4cG9ydCBmdW5j
dGlvbiB0b2RvRXNjYXBlKCk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRs
aW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55
KSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuYmluZCgna2V5ZG93bicsIChldmVudCkgPT4ge1xuXHRc
dFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVfS0VZKSB7XG5cdFx0XHRcdFx0XHQk
c2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0VzY2FwZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0
XHR9KTtcblxuXHRcdFx0XHQkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51
bmJpbmQoJ2tleWRvd24nKTsgfSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufVxuLy8gc2Vydmlj
ZXMvVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5c
biAgICAvKipcbiAgICAgKiBTZXJ2aWNlcyB0aGF0IHBlcnNpc3RzIGFuZCByZXRyaWV2ZXMgVE9E
T3MgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAgICovXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9TdG9y
YWdlIGltcGxlbWVudHMgSVRvZG9TdG9yYWdlIHtcblxuICAgICAgICBTVE9SQUdFX0lEID0gJ3Rv
ZG9zLWFuZ3VsYXJqcy10eXBlc2NyaXB0JztcblxuICAgICAgICBnZXQgKCk6IFRvZG9JdGVtW10g
e1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhp
cy5TVE9SQUdFX0lEKSB8fCAnW10nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1dCh0b2Rvczog
VG9kb0l0ZW1bXSkge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5TVE9S
QUdFX0lELCBKU09OLnN0cmluZ2lmeSh0b2RvcykpO1xuICAgICAgICB9XG4gICAgfVxufS8vIGNv
bnRyb2xsZXJzL1RvZG9DdHJsLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0Jztc
blxuXHQvKipcblx0ICogVGhlIG1haW4gY29udHJvbGxlciBmb3IgdGhlIGFwcC4gVGhlIGNvbnRy
b2xsZXI6XG5cdCAqIC0gcmV0cmlldmVzIGFuZCBwZXJzaXN0cyB0aGUgbW9kZWwgdmlhIHRoZSB0
b2RvU3RvcmFnZSBzZXJ2aWNlXG5cdCAqIC0gZXhwb3NlcyB0aGUgbW9kZWwgdG8gdGhlIHRlbXBs
YXRlIGFuZCBwcm92aWRlcyBldmVudCBoYW5kbGVyc1xuXHQgKi9cblx0ZXhwb3J0IGNsYXNzIFRv
ZG9DdHJsIHtcblxuXHRcdHByaXZhdGUgdG9kb3M6IFRvZG9JdGVtW107XG5cblx0XHQvLyAkaW5q
ZWN0IGFubm90YXRpb24uXG5cdFx0Ly8gSXQgcHJvdmlkZXMgJGluamVjdG9yIHdpdGggaW5mb3Jt
YXRpb24gYWJvdXQgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVjdGVkIGludG8gY29uc3RydWN0b3Jc
blx0XHQvLyBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBpdCBjbG9zZSB0byB0aGUgY29uc3RydWN0b3Is
IGJlY2F1c2UgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaCBpbiBjb3VudCBhbmQgdHlwZS5cblx0
XHQvLyBTZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaVxuXHRcdHB1YmxpYyBz
dGF0aWMgJGluamVjdCA9IFtcblx0XHRcdCckc2NvcGUnLFxuXHRcdFx0JyRsb2NhdGlvbicsXG5c
dFx0XHQndG9kb1N0b3JhZ2UnLFxuXHRcdFx0J2ZpbHRlckZpbHRlcidcblx0XHRdO1xuXG5cdFx0
Ly8gZGVwZW5kZW5jaWVzIGFyZSBpbmplY3RlZCB2aWEgQW5ndWxhckpTICRpbmplY3RvclxuXHRc
dC8vIGNvbnRyb2xsZXIncyBuYW1lIGlzIHJlZ2lzdGVyZWQgaW4gQXBwbGljYXRpb24udHMgYW5k
IHNwZWNpZmllZCBmcm9tIG5nLWNvbnRyb2xsZXIgYXR0cmlidXRlIGluIGluZGV4Lmh0bWxcblx0
XHRjb25zdHJ1Y3Rvcihcblx0XHRcdHByaXZhdGUgJHNjb3BlOiBJVG9kb1Njb3BlLFxuXHRcdFx0
cHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXG5cdFx0XHRwcml2YXRlIHRv
ZG9TdG9yYWdlOiBJVG9kb1N0b3JhZ2UsXG5cdFx0XHRwcml2YXRlIGZpbHRlckZpbHRlclxuXHRc
dCkge1xuXHRcdFx0dGhpcy50b2RvcyA9ICRzY29wZS50b2RvcyA9IHRvZG9TdG9yYWdlLmdldCgp
O1xuXG5cdFx0XHQkc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdFx0JHNjb3BlLmVkaXRlZFRvZG8g
PSBudWxsO1xuXG5cdFx0XHQvLyAndm0nIHN0YW5kcyBmb3IgJ3ZpZXcgbW9kZWwnLiBXZSdyZSBh
ZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIgdG8gdGhlIHNjb3BlXG5cdFx0XHQv
LyBmb3IgaXRzIG1ldGhvZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIHZpZXcgLyBIVE1MXG5cdFx0
XHQkc2NvcGUudm0gPSB0aGlzO1xuXG5cdFx0XHQvLyB3YXRjaGluZyBmb3IgZXZlbnRzL2NoYW5n
ZXMgaW4gc2NvcGUsIHdoaWNoIGFyZSBjYXVzZWQgYnkgdmlldy91c2VyIGlucHV0XG5cdFx0XHQv
LyBpZiB5b3Ugc3Vic2NyaWJlIHRvIHNjb3BlIG9yIGV2ZW50IHdpdGggbGlmZXRpbWUgbG9uZ2Vy
IHRoYW4gdGhpcyBjb250cm9sbGVyLCBtYWtlIHN1cmUgeW91IHVuc3Vic2NyaWJlLlxuXHRcdFx0
JHNjb3BlLiR3YXRjaCgndG9kb3MnLCAoKSA9PiB0aGlzLm9uVG9kb3MoKSwgdHJ1ZSk7XG5cdFx0
XHQkc2NvcGUuJHdhdGNoKCdsb2NhdGlvbi5wYXRoKCknLCBwYXRoID0+IHRoaXMub25QYXRoKHBh
dGgpKVxuXG5cdFx0XHRpZiAoJGxvY2F0aW9uLnBhdGgoKSA9PT0gJycpICRsb2NhdGlvbi5wYXRo
KCcvJyk7XG5cdFx0XHQkc2NvcGUubG9jYXRpb24gPSAkbG9jYXRpb247XG5cdFx0fVxuXG5cdFx0
b25QYXRoKHBhdGg6IHN0cmluZykge1xuXHRcdFx0dGhpcy4kc2NvcGUuc3RhdHVzRmlsdGVyID0g
KHBhdGggPT09ICcvYWN0aXZlJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogZmFsc2UgfSA6IChw
YXRoID09PSAnL2NvbXBsZXRlZCcpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IHRydWUgfSA6IHt9
O1xuXHRcdH1cblxuXHRcdG9uVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5yZW1haW5pbmdD
b3VudCA9IHRoaXMuZmlsdGVyRmlsdGVyKHRoaXMudG9kb3MsIHsgY29tcGxldGVkOiBmYWxzZSB9
KS5sZW5ndGg7XG5cdFx0XHR0aGlzLiRzY29wZS5kb25lQ291bnQgPSB0aGlzLnRvZG9zLmxlbmd0
aCAtIHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50O1xuXHRcdFx0dGhpcy4kc2NvcGUuYWxsQ2hl
Y2tlZCA9ICF0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudFxuXHRcdFx0dGhpcy50b2RvU3RvcmFn
ZS5wdXQodGhpcy50b2Rvcyk7XG5cdFx0fVxuXG5cdFx0YWRkVG9kbygpIHtcblx0XHRcdHZhciBu
ZXdUb2RvIDogc3RyaW5nID0gdGhpcy4kc2NvcGUubmV3VG9kby50cmltKCk7XG5cdFx0XHRpZiAo
IW5ld1RvZG8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhp
cy50b2Rvcy5wdXNoKG5ldyBUb2RvSXRlbShuZXdUb2RvLCBmYWxzZSkpO1xuXHRcdFx0dGhpcy4k
c2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdH1cblxuXHRcdGVkaXRUb2RvKHRvZG9JdGVtOiBUb2Rv
SXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IHRvZG9JdGVtO1xuXG5cdFx0
XHQvLyBDbG9uZSB0aGUgb3JpZ2luYWwgdG9kbyBpbiBjYXNlIGVkaXRpbmcgaXMgY2FuY2VsbGVk
LlxuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gYW5ndWxhci5leHRlbmQoe30sIHRv
ZG9JdGVtKTtcblx0XHR9XG5cblx0XHRyZXZlcnRFZGl0cyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtc
blx0XHRcdHRoaXMudG9kb3NbdGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKV0gPSB0aGlzLiRz
Y29wZS5vcmlnaW5hbFRvZG87XG5cdFx0XHR0aGlzLiRzY29wZS5yZXZlcnRlZCA9IHRydWU7XG5c
dFx0fVxuXG5cdFx0ZG9uZUVkaXRpbmcodG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlz
LiRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9k
byA9IG51bGw7XG5cdFx0XHRpZiAodGhpcy4kc2NvcGUucmV2ZXJ0ZWQpIHtcblx0XHRcdFx0Ly8g
VG9kbyBlZGl0cyB3ZXJlIHJldmVydGVkLCBkb24ndCBzYXZlLlxuXHRcdFx0XHR0aGlzLiRzY29w
ZS5yZXZlcnRlZCA9IG51bGw7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRvZG9J
dGVtLnRpdGxlID0gdG9kb0l0ZW0udGl0bGUudHJpbSgpO1xuXHRcdFx0aWYgKCF0b2RvSXRlbS50
aXRsZSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVRvZG8odG9kb0l0ZW0pO1xuXHRcdFx0fVxuXHRc
dH1cblxuXHRcdHJlbW92ZVRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRv
ZG9zLnNwbGljZSh0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pLCAxKTtcblx0XHR9XG5cblx0
XHRjbGVhckRvbmVUb2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnRvZG9zID0gdGhpcy50b2Rv
cyA9IHRoaXMudG9kb3MuZmlsdGVyKHRvZG9JdGVtID0+ICF0b2RvSXRlbS5jb21wbGV0ZWQpO1xu
XHRcdH1cblxuXHRcdG1hcmtBbGwoY29tcGxldGVkOiBib29sZWFuKSB7XG5cdFx0XHR0aGlzLnRv
ZG9zLmZvckVhY2godG9kb0l0ZW0gPT4geyB0b2RvSXRlbS5jb21wbGV0ZWQgPSBjb21wbGV0ZWQ7
IH0pO1xuXHRcdH1cblx0fVxuXG59XG4vLyBBcHBsaWNhdGlvbi50c1xuXG4vKipcbiAqIFRoZSBt
YWluIFRvZG9NVkMgYXBwIG1vZHVsZS5cbiAqXG4gKiBAdHlwZSB7YW5ndWxhci5Nb2R1bGV9XG4g
Ki9cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRvZG9tdmMg
PSBhbmd1bGFyLm1vZHVsZSgndG9kb212YycsIFtdKVxuICAgICAgICAgICAgLmNvbnRyb2xsZXIo
J3RvZG9DdHJsJywgVG9kb0N0cmwpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvQmx1cics
IHRvZG9CbHVyKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0ZvY3VzJywgdG9kb0ZvY3Vz
KVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0VzY2FwZScsIHRvZG9Fc2NhcGUpXG4gICAg
ICAgICAgICAuc2VydmljZSgndG9kb1N0b3JhZ2UnLCBUb2RvU3RvcmFnZSk7XG59XG4iCiAKIC8q
KiovIH0pLAogLyogNDIxICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAK
LW1vZHVsZS5leHBvcnRzID0gIi8vICAgICBVbmRlcnNjb3JlLmpzIDEuOC4zXG4vLyAgICAgaHR0
cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5h
cywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4v
LyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQg
bGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJhc2VsaW5lIHNldHVwXG4gIC8vIC0t
LS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2Ag
aW4gdGhlIGJyb3dzZXIsIG9yIGBleHBvcnRzYCBvbiB0aGUgc2VydmVyLlxuICB2YXIgcm9vdCA9
IHRoaXM7XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGBfYCB2YXJpYWJs
ZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3QuXztcblxuICAvLyBTYXZlIGJ5dGVz
IGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQ
cm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5j
UHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5j
ZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuXG4gIHZhclxu
ICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1c2gsXG4gICAgc2xpY2UgICAgICAg
ICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJpbmcgICAgICAgICA9IE9ialByb3Rv
LnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0
eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50
YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZh
clxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5
cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQmluZCAgICAgICAgID0gRnVuY1By
b3RvLmJpbmQsXG4gICAgbmF0aXZlQ3JlYXRlICAgICAgID0gT2JqZWN0LmNyZWF0ZTtcblxuICAv
LyBOYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBp
bmcuXG4gIHZhciBDdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4gIC8vIENyZWF0ZSBhIHNhZmUgcmVm
ZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LlxuICB2YXIgXyA9
IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xu
ICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gICAgdGhp
cy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2Jq
ZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBm
b3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3JlIGluXG4gIC8vIHRoZSBicm93c2Vy
LCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAn
dW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBt
b2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gXztcbiAg
ICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtcbiAgICByb290Ll8gPSBfO1xuICB9
XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJT04gPSAnMS44LjMnO1xuXG4gIC8v
IEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50
IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUg
cmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbiAgLy8gZnVuY3Rpb25zLlxu
ICB2YXIgb3B0aW1pemVDYiA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4g
ICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gICAgc3dpdGNoIChhcmdD
b3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5j
dGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtc
biAgICAgIH07XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtc
biAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgb3RoZXIpO1xuICAgICAg
fTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlv
bikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29s
bGVjdGlvbik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11
bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAg
ICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMu
YXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEEgbW9zdGx5
LWludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBs
aWVkXG4gIC8vIHRvIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUg
ZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlclxuICAvLyBpZGVudGl0eSwgYW4gYXJiaXRyYXJ5IGNh
bGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZh
ciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmICh2YWx1
ZSA9PSBudWxsKSByZXR1cm4gXy5pZGVudGl0eTtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVl
KSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAo
Xy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBf
LnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcbiAgXy5pdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBj
b250ZXh0KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7XG4gIH07
XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0
aW9ucy5cbiAgdmFyIGNyZWF0ZUFzc2lnbmVyID0gZnVuY3Rpb24oa2V5c0Z1bmMsIHVuZGVmaW5l
ZE9ubHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0g
YXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSBy
ZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGxlbmd0aDsgaW5k
ZXgrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAg
ICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAgICAgbCA9IGtleXMubGVuZ3Ro
O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHZhciBr
ZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICghdW5kZWZpbmVkT25seSB8fCBvYmpba2V5XSA9
PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4g
ICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rp
b24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5c
biAgdmFyIGJhc2VDcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUpIHtcbiAgICBpZiAoIV8uaXNP
YmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVy
biBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlw
ZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBudWxs
O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIHByb3BlcnR5ID0gZnVuY3Rpb24o
a2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA9PSBu
dWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBIZWxwZXIgZm9y
IGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbiAg
Ly8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9yIGFzIGFuIG9iamVjdFxuICAvLyBS
ZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5o
dG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcg
b24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMp
IC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHByb3BlcnR5KCdsZW5ndGgnKTtcbiAgdmFyIGlzQXJy
YXlMaWtlID0gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5n
dGgoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYg
bGVuZ3RoID49IDAgJiYgbGVuZ3RoIDw9IE1BWF9BUlJBWV9JTkRFWDtcbiAgfTtcblxuICAvLyBD
b2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRo
ZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxu
ICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVh
dHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuXG4g
IF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtc
biAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBp
LCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGZvciAoaSA9IDAs
IGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRl
ZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlz
ID0gXy5rZXlzKG9iaik7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtrZXlzW2ldXSwga2V5c1tp
XSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBS
ZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVu
dC5cbiAgXy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0
KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMg
PSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtl
eXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZh
ciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICByZXN1bHRz
W2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAg
ICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgcmVkdWNpbmcg
ZnVuY3Rpb24gaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlZHVj
ZShkaXIpIHtcbiAgICAvLyBPcHRpbWl6ZWQgaXRlcmF0b3IgZnVuY3Rpb24gYXMgdXNpbmcgYXJn
dW1lbnRzLmxlbmd0aFxuICAgIC8vIGluIHRoZSBtYWluIGZ1bmN0aW9uIHdpbGwgZGVvcHRpbWl6
ZSB0aGUsIHNlZSAjMTk5MS5cbiAgICBmdW5jdGlvbiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBt
ZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKSB7XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBp
bmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0g
a2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1v
LCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1
cm4gbWVtbztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVt
bywgY29udGV4dCkge1xuICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250
ZXh0LCA0KTtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9i
aiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAg
aW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhl
IGluaXRpYWwgdmFsdWUgaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAgICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoIDwgMykge1xuICAgICAgICBtZW1vID0gb2JqW2tleXMgPyBrZXlzW2luZGV4XSA6IGlu
ZGV4XTtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJh
dG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgpO1xuICAgIH07XG4g
IH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxp
c3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9yIGBmb2xkbGAuXG4gIF8ucmVkdWNl
ID0gXy5mb2xkbCA9IF8uaW5qZWN0ID0gY3JlYXRlUmVkdWNlKDEpO1xuXG4gIC8vIFRoZSByaWdo
dC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxu
ICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGNyZWF0ZVJlZHVjZSgtMSk7XG5cbiAgLy8gUmV0
dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFz
IGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRl
LCBjb250ZXh0KSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xu
ICAgICAga2V5ID0gXy5maW5kSW5kZXgob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH0g
ZWxzZSB7XG4gICAgICBrZXkgPSBfLmZpbmRLZXkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xu
ICAgIH1cbiAgICBpZiAoa2V5ICE9PSB2b2lkIDAgJiYga2V5ICE9PSAtMSkgcmV0dXJuIG9ialtr
ZXldO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRy
dXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAuXG4gIF8uZmlsdGVyID0gXy5zZWxl
Y3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRz
ID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBfLmVh
Y2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNh
dGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAg
ICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBm
b3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJlamVjdCA9IGZ1bmN0aW9uKG9iaiwg
cHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5uZWdhdGUo
Y2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIERldGVybWluZSB3aGV0aGVy
IGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFz
IGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29u
dGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFy
IGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3Ro
ID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tp
bmRleF0gOiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3Vy
cmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAg
fTtcblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVj
dCBtYXRjaGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYW55YC5cbiAgXy5zb21l
ID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRp
Y2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxp
a2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5s
ZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykg
e1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAg
ICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1
cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vIERldGVybWlu
ZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09
PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlc2AgYW5kIGBpbmNsdWRlYC5cbiAgXy5jb250
YWlucyA9IF8uaW5jbHVkZXMgPSBfLmluY2x1ZGUgPSBmdW5jdGlvbihvYmosIGl0ZW0sIGZyb21J
bmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVz
KG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZy
b21JbmRleCA9IDA7XG4gICAgcmV0dXJuIF8uaW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkg
Pj0gMDtcbiAgfTtcblxuICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBl
dmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cbiAgXy5pbnZva2UgPSBmdW5jdGlvbihvYmosIG1l
dGhvZCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZh
ciBpc0Z1bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBm
dW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0Z1bmMgPyBtZXRob2QgOiB2YWx1
ZVttZXRob2RdO1xuICAgICAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IGZ1bmMgOiBmdW5jLmFwcGx5
KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9u
IG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBf
LnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBfLnBy
b3BlcnR5KGtleSkpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21t
b24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBvbmx5IG9iamVjdHNcbiAgLy8gY29u
dGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy53aGVyZSA9IGZ1bmN0aW9u
KG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm1hdGNoZXIoYXR0cnMp
KTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNl
IG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0XG4gIC8vIGNvbnRhaW5pbmcgc3Bl
Y2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uZmluZFdoZXJlID0gZnVuY3Rpb24ob2JqLCBh
dHRycykge1xuICAgIHJldHVybiBfLmZpbmQob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtc
blxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21w
dXRhdGlvbikuXG4gIF8ubWF4ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xu
ICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAg
ICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAh
PSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMo
b2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA+
IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9
XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xu
ICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAg
IGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNv
bXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSAtSW5maW5pdHkgJiYgcmVzdWx0
ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBs
YXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAg
IHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQg
KG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBfLm1pbiA9IGZ1bmN0aW9uKG9iaiwg
aXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21w
dXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJh
dGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9i
aikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9
IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtc
biAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7
XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihp
dGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5k
ZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxp
c3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09
IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2
YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAg
ICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBh
IGNvbGxlY3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGVcbiAgLy8gW0Zpc2hl
ci1ZYXRlcyBzaHVmZmxlXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lh
dGVzX3NodWZmbGUpLlxuICBfLnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgc2V0
ID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0
aCA9IHNldC5sZW5ndGg7XG4gICAgdmFyIHNodWZmbGVkID0gQXJyYXkobGVuZ3RoKTtcbiAgICBm
b3IgKHZhciBpbmRleCA9IDAsIHJhbmQ7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAg
ICByYW5kID0gXy5yYW5kb20oMCwgaW5kZXgpO1xuICAgICAgaWYgKHJhbmQgIT09IGluZGV4KSBz
aHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5kXTtcbiAgICAgIHNodWZmbGVkW3JhbmRdID0g
c2V0W2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHNodWZmbGVkO1xuICB9O1xuXG4gIC8vIFNh
bXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uLlxuICAvLyBJZiAqKm4q
KiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAv
LyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBt
YXBgLlxuICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwgZ3VhcmQpIHtcbiAgICBpZiAobiA9
PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8u
dmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4gb2JqW18ucmFuZG9tKG9iai5sZW5ndGggLSAxKV07
XG4gICAgfVxuICAgIHJldHVybiBfLnNodWZmbGUob2JqKS5zbGljZSgwLCBNYXRoLm1heCgwLCBu
KSk7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9u
IHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRl
cmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtc
biAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlz
dCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRl
eDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3Qp
XG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZh
ciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAg
ICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1
cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAg
ICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3Zh
bHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVn
YXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhh
dmlvcikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4g
ICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250
ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAg
ICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopO1xuICAgICAgICBiZWhhdmlv
cihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0
ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZVxuICAvLyB0byBncm91cCBieSwg
b3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbiAgXy5ncm91cEJ5ID0g
Z3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3Vs
dCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFs
dWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0
ZXJpb24sIHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBidXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cg
dGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAgXy5pbmRleEJ5ID0gZ3Jv
dXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1
ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91
cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRy
aWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBj
cml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtl
eSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVz
dWx0W2tleV0gPSAxO1xuICB9KTtcblxuICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBh
cnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmop
IHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0
dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkgcmV0dXJuIF8u
bWFwKG9iaiwgXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIF8udmFsdWVzKG9iaik7XG4gIH07XG5c
biAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LlxuICBfLnNp
emUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICAg
IHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IF8ua2V5cyhvYmopLmxlbmd0
aDtcbiAgfTtcblxuICAvLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUg
d2hvc2UgZWxlbWVudHMgYWxsIHNhdGlzZnkgdGhlIGdpdmVuXG4gIC8vIHByZWRpY2F0ZSwgYW5k
IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cbiAg
Xy5wYXJ0aXRpb24gPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHBy
ZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIHBhc3MgPSBbXSwgZmFp
bCA9IFtdO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iaikge1xuICAg
ICAgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmopID8gcGFzcyA6IGZhaWwpLnB1c2godmFsdWUp
O1xuICAgIH0pO1xuICAgIHJldHVybiBbcGFzcywgZmFpbF07XG4gIH07XG5cbiAgLy8gQXJyYXkg
RnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxl
bWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxu
ICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBU
aGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5c
biAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkg
e1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51
bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5
LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0
IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8g
dGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2
YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0
aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwo
YXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQg
PyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJh
eS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0
aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlm
IChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3Vh
cmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gXy5yZXN0KGFy
cmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJu
cyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFz
IGB0YWlsYCBhbmQgYGRyb3BgLlxuICAvLyBFc3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1l
bnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVyblxuICAvLyB0aGUgcmVzdCBO
IHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ucmVzdCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0
aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09
IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5
IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3QgPSBmdW5jdGlvbihhcnJheSkge1xu
ICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0eSk7XG4gIH07XG5cbiAgLy8gSW50
ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxu
ICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFsbG93LCBzdHJpY3QsIHN0YXJ0SW5k
ZXgpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sIGlkeCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0
YXJ0SW5kZXggfHwgMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2
YWx1ZSkgJiYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4g
ICAgICAgIC8vZmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmpl
Y3RcbiAgICAgICAgaWYgKCFzaGFsbG93KSB2YWx1ZSA9IGZsYXR0ZW4odmFsdWUsIHNoYWxsb3cs
IHN0cmljdCk7XG4gICAgICAgIHZhciBqID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAg
ICBvdXRwdXQubGVuZ3RoICs9IGxlbjtcbiAgICAgICAgd2hpbGUgKGogPCBsZW4pIHtcbiAgICAg
ICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNl
IGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZTtcbiAgICAgIH1c
biAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICAvLyBGbGF0dGVuIG91dCBhbiBh
cnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3IganVzdCBvbmUgbGV2ZWwu
XG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFsbG93KSB7XG4gICAgcmV0dXJuIGZs
YXR0ZW4oYXJyYXksIHNoYWxsb3csIGZhbHNlKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSB2ZXJz
aW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1
ZShzKS5cbiAgXy53aXRob3V0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5kaWZm
ZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICB9O1xuXG4gIC8vIFBy
b2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5
IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVz
aW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51
bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250
ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQg
PSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9
IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihp
dGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0g
W107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29t
cHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAg
ICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAgICBpZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQp
IHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgc2VlbiA9IGNvbXB1dGVkO1xuICAgICAgfSBl
bHNlIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMoc2VlbiwgY29tcHV0
ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICByZXN1bHQu
cHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIV8uY29udGFpbnMocmVz
dWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAg
IH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhh
dCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxu
ICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlvbiA9IGZ1bmN0aW9uKCkge1xuICAg
IHJldHVybiBfLnVuaXEoZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUpKTtcbiAgfTtcblxu
ICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0
d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8uaW50ZXJzZWN0aW9uID0g
ZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5n
dGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRM
ZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gYXJyYXlb
aV07XG4gICAgICBpZiAoXy5jb250YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250aW51ZTtcbiAgICAg
IGZvciAodmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICghXy5j
b250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChq
ID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJl
c3VsdDtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5
IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHBy
ZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXG4gIF8uZGlmZmVyZW5j
ZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3QgPSBmbGF0dGVuKGFyZ3VtZW50cywg
dHJ1ZSwgdHJ1ZSwgMSk7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1
ZSl7XG4gICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9
O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5
IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIF8u
emlwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW56aXAoYXJndW1lbnRzKTtcbiAgfTtc
blxuICAvLyBDb21wbGVtZW50IG9mIF8uemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFy
cmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5k
aWNlc1xuICBfLnVuemlwID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJy
YXkgJiYgXy5tYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoIHx8IDA7XG4gICAgdmFyIHJlc3Vs
dCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gXy5wbHVjayhhcnJheSwgaW5k
ZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENvbnZlcnRzIGxp
c3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZh
bHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVu
Z3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZh
bHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1ZXMpIHtcbiAgICB2YXIgcmVz
dWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFts
aXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0
W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7
XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgZmluZEluZGV4
IGFuZCBmaW5kTGFzdEluZGV4IGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJ
bmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwg
Y29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAg
ICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGly
ID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXgg
PCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2lu
ZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJu
IC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBh
cnJheS1saWtlIHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kSW5kZXggPSBj
cmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiAgXy5maW5kTGFzdEluZGV4ID0gY3JlYXRl
UHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rp
b24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2Jq
ZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5h
cnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0
ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtc
biAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAgIHZhciBsb3cgPSAwLCBoaWdoID0g
Z2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgdmFyIG1p
ZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJy
YXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkO1xuICAgIH1c
biAgICByZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVh
dGUgdGhlIGluZGV4T2YgYW5kIGxhc3RJbmRleE9mIGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVh
dGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0
dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3Ro
ID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7
XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgICBpID0gaWR4ID49IDAgPyBpZHgg
OiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAg
ICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsg
bGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBp
ZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtc
biAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTtcbiAgICAgIH1c
biAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQo
c2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgXy5pc05hTik7XG4gICAgICAgIHJldHVybiBp
ZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAgICAgIGZvciAoaWR4ID0gZGlyID4g
MCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIp
IHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICB9
XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRp
b24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8g
b3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYg
dGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVg
XG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhP
ZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAg
Xy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xu
XG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGlj
IHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClg
IGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2Rv
Y3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9
IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xu
ICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHN0
ZXAgPSBzdGVwIHx8IDE7XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChz
dG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7
XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBz
dGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJh
bmdlO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5j
dGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhl
IHByb3ZpZGVkIGFyZ3VtZW50c1xuICB2YXIgZXhlY3V0ZUJvdW5kID0gZnVuY3Rpb24oc291cmNl
RnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICAgIGlm
ICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1
bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJj
ZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxm
LCBhcmdzKTtcbiAgICBpZiAoXy5pc09iamVjdChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAg
IHJldHVybiBzZWxmO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEg
Z2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRp
b25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9u
LmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5kID0gZnVuY3Rpb24oZnVuYywgY29u
dGV4dCkge1xuICAgIGlmIChuYXRpdmVCaW5kICYmIGZ1bmMuYmluZCA9PT0gbmF0aXZlQmluZCkg
cmV0dXJuIG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtc
biAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBt
dXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxs
KGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1
cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChz
bGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtc
blxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24g
dGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRo
b3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBfIGFjdHNcbiAgLy8gYXMg
YSBwbGFjZWhvbGRlciwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBi
ZSBwcmUtZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGJv
dW5kQXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgYm91bmQgPSBmdW5j
dGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5n
dGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09
IF8gPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07XG4gICAgICB9XG4gICAg
ICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRz
W3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRo
aXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8v
IEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVt
YWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4g
VXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBh
biBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwgPSBmdW5jdGlvbihvYmopIHtcbiAg
ICB2YXIgaSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwga2V5O1xuICAgIGlmIChsZW5ndGgg
PD0gMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5h
bWVzJyk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBh
cmd1bWVudHNbaV07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAg
ICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBm
dW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBfLm1lbW9pemUgPSBmdW5jdGlvbihm
dW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAg
dmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICAgIHZhciBhZGRyZXNzID0gJycgKyAoaGFz
aGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrZXkpO1xuICAgICAgaWYgKCFf
LmhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBh
cmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVt
b2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5
cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRo
ZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5
ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1
bWVudHMsIDIpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXR1
cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfTtcblxuICAvLyBE
ZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQg
Y2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5kZWZlciA9IF8ucGFydGlhbChfLmRl
bGF5LCBfLCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tl
ZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2
ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwg
cnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFu
IG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlz
YWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFk
aW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwg
ZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4g
ICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgdGltZW91dCA9IG51bGw7XG4g
ICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAg
ICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFk
aW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAg
ICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0
KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7
XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9u
cy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7XG4gICAgICB2YXIgcmVtYWluaW5n
ID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAg
IGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5n
ID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91
dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAg
ICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBh
cmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAg
ICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4g
ICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxu
ICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5j
dGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBu
b3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIg
aXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVk
aWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGlu
ZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9u
KGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0
LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAg
ICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xuXG4gICAgICBpZiAobGFzdCA8IHdh
aXQgJiYgbGFzdCA+PSAwKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3
YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAg
ICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNv
bnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBu
dWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbigp
IHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAg
IHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAh
dGltZW91dDtcbiAgICAgIGlmICghdGltZW91dCkgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIs
IHdhaXQpO1xuICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBs
eShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAg
fVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0
aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4g
IC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5k
IGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5j
dGlvbi5cbiAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3JhcHBlcikge1xuICAgIHJldHVybiBf
LnBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQg
dmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbiAgXy5uZWdhdGUgPSBmdW5jdGlv
bihwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gIXBy
ZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0
dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5j
dGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0
aW9uIHRoYXQgZm9sbG93cy5cbiAgXy5jb21wb3NlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFy
Z3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICAgIHJl
dHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3RhcnQ7XG4gICAgICB2YXIgcmVzdWx0
ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHdoaWxlIChpLS0p
IHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3Vs
dDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25s
eSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxsLlxuICBfLmFmdGVyID0gZnVu
Y3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAo
LS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0
IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBOdGgg
Y2FsbC5cbiAgXy5iZWZvcmUgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHZhciBtZW1v
O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAg
ICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgICAg
aWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtc
biAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0
IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVz
ZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgXy5vbmNlID0gXy5wYXJ0aWFsKF8uYmVm
b3JlLCAyKTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1c
blxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5
IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6
IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVy
YWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAg
ICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0
eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMo
b2JqLCBrZXlzKSB7XG4gICAgdmFyIG5vbkVudW1JZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVu
Z3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgcHJv
dG8gPSAoXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUp
IHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4g
ICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlmIChfLmhhcyhvYmosIHByb3ApICYm
ICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAo
bm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1J
ZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0g
JiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xu
ICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmpl
Y3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1Kion
cyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBp
ZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1
cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5
IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhl
bSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwg
a2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBw
cm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBb
XTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVt
LCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBr
ZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVz
IG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5n
dGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAg
IH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMg
b2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0XG4g
IC8vIEluIGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJldHVybnMgYW4gb2JqZWN0XG4gIF8ubWFwT2Jq
ZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0g
Y2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIF8ua2V5cyhvYmopLFxuICAg
ICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdHMgPSB7fSxcbiAg
ICAgICAgICBjdXJyZW50S2V5O1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxl
bmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjdXJyZW50S2V5ID0ga2V5c1tpbmRleF07XG4gICAg
ICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJl
bnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAv
LyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5c
biAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7
XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxl
bmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFp
cnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJz
O1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4g
VGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihv
YmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtc
biAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkr
Kykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBm
dW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBg
bWV0aG9kc2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMgPSBmdW5jdGlvbihvYmopIHtcbiAg
ICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAo
Xy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1
cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRo
IGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICBfLmV4dGVuZCA9
IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5cbiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVj
dCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pbiBvYmplY3Qocylc
biAgLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQv
UmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ24pXG4gIF8uZXh0ZW5kT3duID0g
Xy5hc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihfLmtleXMpO1xuXG4gIC8vIFJldHVybnMgdGhlIGZp
cnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBfLmZp
bmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0
ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwg
a2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0
aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpb
a2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4g
YSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSB3aGl0ZWxpc3RlZCBwcm9w
ZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmplY3QsIG9pdGVyYXRlZSwgY29udGV4dCkg
e1xuICAgIHZhciByZXN1bHQgPSB7fSwgb2JqID0gb2JqZWN0LCBpdGVyYXRlZSwga2V5cztcbiAg
ICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihv
aXRlcmF0ZWUpKSB7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgICBpdGVyYXRl
ZSA9IG9wdGltaXplQ2Iob2l0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAg
a2V5cyA9IGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpO1xuICAgICAgaXRlcmF0
ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHsgcmV0dXJuIGtleSBpbiBvYmo7IH07XG4g
ICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0
aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlz
W2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gICAgICBpZiAoaXRlcmF0ZWUodmFs
dWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJl
c3VsdDtcbiAgfTtcblxuICAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQg
dGhlIGJsYWNrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21pdCA9IGZ1bmN0aW9uKG9iaiwgaXRl
cmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAg
ICAgaXRlcmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRlZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZh
ciBrZXlzID0gXy5tYXAoZmxhdHRlbihhcmd1bWVudHMsIGZhbHNlLCBmYWxzZSwgMSksIFN0cmlu
Zyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0
dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4g
Xy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIEZpbGwgaW4gYSBn
aXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIF8uZGVmYXVsdHMgPSBjcmVh
dGVBc3NpZ25lcihfLmFsbEtleXMsIHRydWUpO1xuXG4gIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHRo
YXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBlIG9iamVjdC5cbiAgLy8gSWYgYWRk
aXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0
byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIF8uY3JlYXRlID0gZnVuY3Rpb24ocHJvdG90
eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4g
ICAgaWYgKHByb3BzKSBfLmV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAgICByZXR1cm4gcmVz
dWx0O1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9m
IGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09i
amVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5z
bGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5cbiAgLy8gSW52b2tlcyBpbnRlcmNl
cHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMgb2JqLlxuICAvLyBUaGUgcHJpbWFy
eSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFp
biwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSBy
ZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNl
cHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxu
ICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZh
bHVlYCBwYWlycy5cbiAgXy5pc01hdGNoID0gZnVuY3Rpb24ob2JqZWN0LCBhdHRycykge1xuICAg
IHZhciBrZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYg
KG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9i
amVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFy
IGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShr
ZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtc
blxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNF
cXVhbGAuXG4gIHZhciBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAg
Ly8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVu
J3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXSho
dHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICAg
IGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gICAgLy8g
QSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmlu
ZWRgLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjtcbiAg
ICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8p
IGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNlb2YgXykgYiA9IGIuX3dyYXBwZWQ7
XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgICB2YXIgY2xhc3NOYW1lID0g
dG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIp
KSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFN0cmlu
Z3MsIG51bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGRhdGVzLCBhbmQgYm9vbGVhbnMgYXJl
IGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAg
IC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTog
JycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAg
ICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVy
cyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50
IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsg
YjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUg
ZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlz
IGVxdWl2YWxlbnQgdG8gTmFOXG4gICAgICAgIGlmICgrYSAhPT0gK2EpIHJldHVybiArYiAhPT0g
K2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3Ro
ZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0g
MSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIGNh
c2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xl
YW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRo
ZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGlu
dmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnNcbiAgICAgICAgLy8g
b2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xu
ICAgIH1cblxuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5
XSc7XG4gICAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0
JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBPYmpl
Y3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBg
T2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUu
XG4gICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7
XG4gICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoXy5pc0Z1bmN0aW9uKGFDdG9yKSAmJiBh
Q3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Xy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKVxuICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3Rvcicg
aW4gYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBB
c3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBk
ZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4x
IHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG5cbiAgICAvLyBJbml0
aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgLy8gSXQncyBkb25lIGhl
cmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJp
c29uLlxuICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAgICBiU3RhY2sgPSBiU3RhY2sgfHwg
W107XG4gICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbmd0aC0t
KSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJv
cG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0
dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5n
dGhdID09PSBiO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBz
dGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucHVzaChhKTtcbiAgICBiU3Rh
Y2sucHVzaChiKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJy
YXlzLlxuICAgIGlmIChhcmVBcnJheXMpIHtcbiAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3Ro
cyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgICAg
bGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJu
IGZhbHNlO1xuICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9u
LW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBp
ZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ssIGJTdGFjaykpIHJldHVybiBmYWxz
ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMu
XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhhKSwga2V5O1xuICAgICAgbGVuZ3RoID0ga2V5cy5s
ZW5ndGg7XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2Ft
ZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXG4g
ICAgICBpZiAoXy5rZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAg
ICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVy
XG4gICAgICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKCEoXy5oYXMoYiwga2V5
KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xu
ICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBz
dGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNr
LnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNv
bXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwg
PSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElz
IGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5
XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkg
PSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAg
IGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9i
aikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAg
cmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElz
IGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2
ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24o
b2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXld
JztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09i
amVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICBy
ZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtc
biAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVu
Y3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvci5cbiAg
Xy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0
ZScsICdSZWdFeHAnLCAnRXJyb3InXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIF9bJ2lzJyArIG5h
bWVdID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09
PSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAgICB9O1xuICB9KTtcblxuICAvLyBEZWZpbmUg
YSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwg
OSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wi
IHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgXy5pc0FyZ3Vt
ZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaGFzKG9iaiwgJ2NhbGxlZScp
O1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlh
dGUuIFdvcmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1Z3MgaW4gb2xkIHY4LFxuICAvLyBJRSAxMSAo
IzE2MjEpLCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5KS5cbiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1
bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3QnKSB7XG4gICAgXy5pc0Z1bmN0
aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PSAnZnVuY3Rp
b24nIHx8IGZhbHNlO1xuICAgIH07XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZp
bml0ZSBudW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4g
aXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJ
cyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMgdGhlIG9ubHkgbnVtYmVyIHdoaWNoIGRv
ZXMgbm90IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBy
ZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9iaiAhPT0gK29iajtcbiAgfTtcblxuICAvLyBJcyBh
IGdpdmVuIHZhbHVlIGEgYm9vbGVhbj9cbiAgXy5pc0Jvb2xlYW4gPSBmdW5jdGlvbihvYmopIHtc
biAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2Fs
bChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2
YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJl
dHVybiBvYmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRl
ZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2Jq
ID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5n
IGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseVxuICAvLyBvbiBpdHNl
bGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLlxuICBfLmhhcyA9IGZ1bmN0
aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5
LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxpdHkgRnVuY3Rpb25zXG4gIC8vIC0t
LS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2NvcmUuanMgaW4gKm5vQ29uZmxpY3Qq
IG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0c1xuICAvLyBwcmV2aW91cyBv
d25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8u
bm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29y
ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5j
dGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuICBfLmlkZW50aXR5ID0gZnVuY3Rp
b24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgLy8gUHJlZGljYXRlLWdl
bmVyYXRpbmcgZnVuY3Rpb25zLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxu
ICBfLmNvbnN0YW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7
XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtcblxuICBfLm5vb3AgPSBmdW5jdGlv
bigpe307XG5cbiAgXy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1
bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5c
biAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PSBudWxs
ID8gZnVuY3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqW2tleV07
XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3
aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFp
cnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0
cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtc
biAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAv
LyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikp
O1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAg
cmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdl
ZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBt
YXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1p
biA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkg
KiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5
IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBE
YXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7
XG4gIH07XG5cbiAgIC8vIExpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgZXNjYXBpbmcuXG4gIHZh
ciBlc2NhcGVNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAg
ICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wiOiAnJiN4Mjc7Jyxc
biAgICAnYCc6ICcmI3g2MDsnXG4gIH07XG4gIHZhciB1bmVzY2FwZU1hcCA9IF8uaW52ZXJ0KGVz
Y2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBz
dHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICB2YXIgY3JlYXRlRXNjYXBlciA9
IGZ1bmN0aW9uKG1hcCkge1xuICAgIHZhciBlc2NhcGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAg
ICAgIHJldHVybiBtYXBbbWF0Y2hdO1xuICAgIH07XG4gICAgLy8gUmVnZXhlcyBmb3IgaWRlbnRp
ZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkXG4gICAgdmFyIHNvdXJjZSA9ICco
PzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0g
UmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAn
ZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmlu
ZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRl
c3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3Ry
aW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXAp
O1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gSWYg
dGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlzIGEgZnVuY3Rpb24gdGhlbiBpbnZv
a2UgaXQgd2l0aCB0aGVcbiAgLy8gYG9iamVjdGAgYXMgY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1
cm4gaXQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSwgZmFsbGJhY2sp
IHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHZvaWQgMCA6IG9iamVjdFtwcm9w
ZXJ0eV07XG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgIHZhbHVlID0gZmFsbGJh
Y2s7XG4gICAgfVxuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChv
YmplY3QpIDogdmFsdWU7XG4gIH07XG5cbiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBp
ZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVs
IGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291bnRlciA9IDA7XG4gIF8udW5pcXVl
SWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xu
ICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9O1xuXG4gIC8vIEJ5IGRl
ZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hh
bmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0
aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZSAg
ICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcXHNcXFNd
Kz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xcc1xcU10rPyklPi9nXG4gIH07XG5c
biAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3
YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2Fw
aW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1h
dGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMg
bmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBz
dHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4gICAgXCInXCI6ICAgICAgXCInXCIs
XG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHInOiAgICAgJ3InLFxuICAgICdcXG4n
OiAgICAgJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAy
OSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIw
MjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJu
ICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9O1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8t
dGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8v
IFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVz
ZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRo
aW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3Rz
IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRl
eHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0
dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRz
KHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVs
aW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAg
IHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRj
aCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJj
ZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpv
aW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3Vy
Y2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRl
eCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1h
dGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zm
c2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNl
KGVzY2FwZXIsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5n
dGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9f
dD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAg
ICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4o
KF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAg
ICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBl
dmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkb2JlIFZNcyBu
ZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZmVzdC5cbiAg
ICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4g
ICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBp
biBsb2NhbCBzY29wZS5cbiAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0
aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuXG4gICAgc291cmNlID0gXCJ2YXIg
X190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgICAgXCJwcmludD1m
dW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xcblwiICtcbiAgICAgIHNv
dXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJlbmRlciA9
IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpO1xu
ICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cg
ZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICBy
ZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gICAgfTtcblxuICAgIC8vIFByb3Zp
ZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlv
bi5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJztcbiAgICB0
ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJj
ZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICAvLyBBZGQgYSBcImNo
YWluXCIgZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVj
dC5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpbnN0YW5jZSA9IF8ob2Jq
KTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAg
fTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gIC8vIElmIFVuZGVyc2NvcmUg
aXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0
XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2
ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUgZnVuY3Rpb25zLiBXcmFwcGVkIG9i
amVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVl
IGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24o
aW5zdGFuY2UsIG9iaikge1xuICAgIHJldHVybiBpbnN0YW5jZS5fY2hhaW4gPyBfKG9iaikuY2hh
aW4oKSA6IG9iajtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0
byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4gPSBmdW5jdGlvbihvYmopIHtcbiAg
ICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGZ1
bmMgPSBfW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5j
dGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICAgIHB1
c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBm
dW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQWRk
IGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0Llxu
ICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8g
dGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQn
LCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFy
IG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5j
dGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFw
cGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1l
ID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAg
IHJldHVybiByZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBBZGQgYWxs
IGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsnY29u
Y2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2Qg
PSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7
XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBh
cmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZy
b20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAgXy5wcm90b3R5cGUudmFsdWUgPSBm
dW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBQcm92
aWRlIHVud3JhcHBpbmcgcHJveHkgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVy
YXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24u
XG4gIF8ucHJvdG90eXBlLnZhbHVlT2YgPSBfLnByb3RvdHlwZS50b0pTT04gPSBfLnByb3RvdHlw
ZS52YWx1ZTtcblxuICBfLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJl
dHVybiAnJyArIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gQU1EIHJlZ2lzdHJhdGlvbiBo
YXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBBTUQgbG9hZGVyc1xuICAv
LyB0aGF0IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1cm4gc2VtYW50aWNzIG9uIG1vZHVsZXMuIEV2
ZW4gdGhvdWdoIGdlbmVyYWxcbiAgLy8gcHJhY3RpY2UgZm9yIEFNRCByZWdpc3RyYXRpb24gaXMg
dG8gYmUgYW5vbnltb3VzLCB1bmRlcnNjb3JlIHJlZ2lzdGVyc1xuICAvLyBhcyBhIG5hbWVkIG1v
ZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBiYXNlIGxpYnJhcnkgdGhhdCBpc1xu
ICAvLyBwb3B1bGFyIGVub3VnaCB0byBiZSBidW5kbGVkIGluIGEgdGhpcmQgcGFydHkgbGliLCBi
dXQgbm90IGJlIHBhcnQgb2ZcbiAgLy8gYW4gQU1EIGxvYWQgcmVxdWVzdC4gVGhvc2UgY2FzZXMg
Y291bGQgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBhblxuICAvLyBhbm9ueW1vdXMgZGVmaW5lKCkg
aXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVzdC5cbiAgaWYgKHR5cGVvZiBkZWZp
bmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29y
ZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59LmNh
bGwodGhpcykpO1xuIgorbW9kdWxlLmV4cG9ydHMgPSAiLy8gICAgIFVuZGVyc2NvcmUuanMgMS44
LjNcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTUg
SmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVy
cyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUg
c2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2Jq
ZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGV4cG9ydHNgIG9uIHRoZSBzZXJ2ZXIu
XG4gIHZhciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0
aGUgYF9gIHZhcmlhYmxlLlxuICB2YXIgcHJldmlvdXNVbmRlcnNjb3JlID0gcm9vdC5fO1xuXG4g
IC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6aXBwZWQpIHZlcnNpb246
XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQcm90byA9IE9iamVjdC5w
cm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuICAvLyBDcmVhdGUg
cXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90
eXBlcy5cbiAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9IEFycmF5UHJvdG8ucHVzaCxcbiAg
ICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGljZSxcbiAgICB0b1N0cmluZyAgICAg
ICAgID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3duUHJvcGVydHkgICA9IE9ialByb3Rv
Lmhhc093blByb3BlcnR5O1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSoqIG5hdGl2ZSBmdW5j
dGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRvIHVzZVxuICAvLyBhcmUgZGVjbGFy
ZWQgaGVyZS5cbiAgdmFyXG4gICAgbmF0aXZlSXNBcnJheSAgICAgID0gQXJyYXkuaXNBcnJheSxc
biAgICBuYXRpdmVLZXlzICAgICAgICAgPSBPYmplY3Qua2V5cyxcbiAgICBuYXRpdmVCaW5kICAg
ICAgICAgPSBGdW5jUHJvdG8uYmluZCxcbiAgICBuYXRpdmVDcmVhdGUgICAgICAgPSBPYmplY3Qu
Y3JlYXRlO1xuXG4gIC8vIE5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXBy
b3RvdHlwZS1zd2FwcGluZy5cbiAgdmFyIEN0b3IgPSBmdW5jdGlvbigpe307XG5cbiAgLy8gQ3Jl
YXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciB1c2UgYmVs
b3cuXG4gIHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8p
IHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF8pKSByZXR1cm4gbmV3IF8o
b2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9O1xuXG4gIC8vIEV4cG9ydCB0aGUg
VW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3aXRoXG4gIC8vIGJhY2t3YXJkcy1j
b21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClgIEFQSS4gSWYgd2UncmUgaW5cbiAg
Ly8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwgb2JqZWN0LlxuICBpZiAodHlwZW9m
IGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1
bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4
cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9IGVsc2Uge1xuICAgIHJv
b3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcx
LjguMyc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVu
dCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNh
bGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAv
LyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwg
YXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAg
ICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2Ug
MTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29u
dGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKHZh
bHVlLCBvdGhlcikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBv
dGhlcik7XG4gICAgICB9O1xuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGlu
ZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFs
dWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBm
dW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAg
IHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29s
bGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5c
biAgLy8gQSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgY2FsbGJhY2tzIHRo
YXQgY2FuIGJlIGFwcGxpZWRcbiAgLy8gdG8gZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwg
cmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyXG4gIC8vIGlkZW50aXR5LCBh
biBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0Y2hlciwgb3IgYSBwcm9wZXJ0eSBh
Y2Nlc3Nvci5cbiAgdmFyIGNiID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7
XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlkZW50aXR5O1xuICAgIGlmIChfLmlz
RnVuY3Rpb24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2YWx1ZSwgY29udGV4dCwgYXJnQ291
bnQpO1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0dXJuIF8ubWF0Y2hlcih2YWx1ZSk7
XG4gICAgcmV0dXJuIF8ucHJvcGVydHkodmFsdWUpO1xuICB9O1xuICBfLml0ZXJhdGVlID0gZnVu
Y3Rpb24odmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY2IodmFsdWUsIGNvbnRleHQsIElu
ZmluaXR5KTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcg
YXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIgPSBmdW5jdGlvbihrZXlz
RnVuYywgdW5kZWZpbmVkT25seSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAg
IHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA8IDIgfHwg
b2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4
IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5k
ZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNvdXJjZSksXG4gICAgICAgICAgICBs
ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4g
ICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKCF1bmRlZmluZWRPbmx5
IHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAg
IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBbiBp
bnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcgb2JqZWN0IHRoYXQgaW5oZXJpdHMg
ZnJvbSBhbm90aGVyLlxuICB2YXIgYmFzZUNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSkge1xu
ICAgIGlmICghXy5pc09iamVjdChwcm90b3R5cGUpKSByZXR1cm4ge307XG4gICAgaWYgKG5hdGl2
ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIEN0b3IucHJvdG90
eXBlID0gcHJvdG90eXBlO1xuICAgIHZhciByZXN1bHQgPSBuZXcgQ3RvcjtcbiAgICBDdG9yLnBy
b3RvdHlwZSA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgcHJvcGVy
dHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBy
ZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4g
IC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEg
Y29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4g
b2JqZWN0XG4gIC8vIFJlbGF0ZWQ6IGh0dHA6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9y
ZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8vIEF2b2lkcyBhIHZlcnkgbmFzdHkg
aU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZhciBNQVhfQVJSQVlfSU5ERVggPSBN
YXRoLnBvdygyLCA1MykgLSAxO1xuICB2YXIgZ2V0TGVuZ3RoID0gcHJvcGVydHkoJ2xlbmd0aCcp
O1xuICB2YXIgaXNBcnJheUxpa2UgPSBmdW5jdGlvbihjb2xsZWN0aW9uKSB7XG4gICAgdmFyIGxl
bmd0aCA9IGdldExlbmd0aChjb2xsZWN0aW9uKTtcbiAgICByZXR1cm4gdHlwZW9mIGxlbmd0aCA9
PSAnbnVtYmVyJyAmJiBsZW5ndGggPj0gMCAmJiBsZW5ndGggPD0gTUFYX0FSUkFZX0lOREVYO1xu
ICB9O1xuXG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFjaGAgaW1wbGVtZW50YXRpb24sIGFr
YSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVjdHMgaW4gYWRkaXRpb24gdG8gYXJy
YXktbGlrZXMuIFRyZWF0cyBhbGxcbiAgLy8gc3BhcnNlIGFycmF5LWxpa2VzIGFzIGlmIHRoZXkg
d2VyZSBkZW5zZS5cbiAgXy5lYWNoID0gXy5mb3JFYWNoID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRl
ZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4
dCk7XG4gICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAg
ICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xu
ICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9
IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2tl
eXNbaV1dLCBrZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xu
ICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUg
dG8gZWFjaCBlbGVtZW50LlxuICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRl
cmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtc
biAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAg
ICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IEFycmF5
KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgr
Kykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtc
biAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50
S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDcmVh
dGUgYSByZWR1Y2luZyBmdW5jdGlvbiBpdGVyYXRpbmcgbGVmdCBvciByaWdodC5cbiAgZnVuY3Rp
b24gY3JlYXRlUmVkdWNlKGRpcikge1xuICAgIC8vIE9wdGltaXplZCBpdGVyYXRvciBmdW5jdGlv
biBhcyB1c2luZyBhcmd1bWVudHMubGVuZ3RoXG4gICAgLy8gaW4gdGhlIG1haW4gZnVuY3Rpb24g
d2lsbCBkZW9wdGltaXplIHRoZSwgc2VlICMxOTkxLlxuICAgIGZ1bmN0aW9uIGl0ZXJhdG9yKG9i
aiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgpIHtcbiAgICAgIGZvciAoOyBp
bmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFy
IGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9
IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAg
IH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbihvYmos
IGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Io
aXRlcmF0ZWUsIGNvbnRleHQsIDQpO1xuICAgICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2Jq
KSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0
aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIC8v
IERldGVybWluZSB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBub25lIGlzIHByb3ZpZGVkLlxuICAgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgICAgIG1lbW8gPSBvYmpba2V5cyA/IGtl
eXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBkaXI7XG4gICAgICB9XG4gICAg
ICByZXR1cm4gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0
aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJl
c3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRs
YC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5c
biAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3du
IGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0x
KTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRl
c3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24o
b2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5O1xuICAgIGlmIChpc0FycmF5
TGlrZShvYmopKSB7XG4gICAgICBrZXkgPSBfLmZpbmRJbmRleChvYmosIHByZWRpY2F0ZSwgY29u
dGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IF8uZmluZEtleShvYmosIHByZWRpY2F0
ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0x
KSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMg
dGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5m
aWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4g
ICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRl
eHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAg
ICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUp
O1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwg
dGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0g
ZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIo
b2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0
ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4g
IC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwg
cHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxu
ICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRl
eCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9
IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1
cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJl
dHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVu
dCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBh
bnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0
KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5
cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAo
a2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4
XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRL
ZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5c
biAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBp
dGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1
ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9i
aiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkg
b2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVy
JyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRl
bSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBh
cmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IGZ1
bmN0aW9uKG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50
cywgMik7XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlvbihtZXRob2QpO1xuICAgIHJldHVy
biBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzRnVuYyA/
IG1ldGhvZCA6IHZhbHVlW21ldGhvZF07XG4gICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gZnVu
YyA6IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIENvbnZl
bmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEg
cHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBf
Lm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVy
c2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2Jq
ZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndo
ZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8u
bWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBj
b21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8g
Y29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBm
dW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihh
dHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVt
ZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVl
LCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0g
LUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09
IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBv
YmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAg
ICAgaWYgKHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAg
ICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRl
ZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxp
c3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xu
ICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZp
bml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVl
O1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9
KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1p
bmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWluID0g
ZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSBJbmZp
bml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtc
biAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0g
aXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBp
ID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZh
bHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPCByZXN1bHQpIHtcbiAgICAgICAgICBy
ZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBp
dGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0
aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZh
bHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8
fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09PSBJbmZpbml0eSkge1xuICAgICAg
ICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xu
ICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxu
ICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRo
ZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dp
a2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIHZhciBzZXQgPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtc
biAgICB2YXIgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcbiAgICB2YXIgc2h1ZmZsZWQgPSBBcnJheShs
ZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgcmFuZDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KyspIHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbSgwLCBpbmRleCk7XG4gICAgICBpZiAocmFu
ZCAhPT0gaW5kZXgpIHNodWZmbGVkW2luZGV4XSA9IHNodWZmbGVkW3JhbmRdO1xuICAgICAgc2h1
ZmZsZWRbcmFuZF0gPSBzZXRbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gc2h1ZmZsZWQ7XG4g
IH07XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24u
XG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9t
IGVsZW1lbnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRgIGFyZ3VtZW50IGFsbG93cyBpdCB0
byB3b3JrIHdpdGggYG1hcGAuXG4gIF8uc2FtcGxlID0gZnVuY3Rpb24ob2JqLCBuLCBndWFyZCkg
e1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAgICAgIGlmICghaXNBcnJheUxpa2Uo
b2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICAgIHJldHVybiBvYmpbXy5yYW5kb20ob2Jq
Lmxlbmd0aCAtIDEpXTtcbiAgICB9XG4gICAgcmV0dXJuIF8uc2h1ZmZsZShvYmopLnNsaWNlKDAs
IE1hdGgubWF4KDAsIG4pKTtcbiAgfTtcblxuICAvLyBTb3J0IHRoZSBvYmplY3QncyB2YWx1ZXMg
YnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0ZWUuXG4gIF8uc29ydEJ5ID0gZnVu
Y3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0
ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFs
dWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUs
XG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVl
LCBpbmRleCwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdo
dCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgICAgdmFyIGIgPSByaWdodC5j
cml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgIGlmIChhID4gYiB8fCBhID09
PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSBy
ZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4
O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1
c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMuXG4gIHZhciBncm91cCA9
IGZ1bmN0aW9uKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0ZXJhdGVlID0gY2Io
aXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGlu
ZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIG9iaik7XG4g
ICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAgICB9KTtcbiAgICAgIHJl
dHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZh
bHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4gIC8v
IHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxu
ICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBp
ZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1
bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZh
bHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8g
d2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBf
LmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1
bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9i
amVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVy
IGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVy
bnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVz
dWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tl
eV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xuXG4gIC8vIFNhZmVseSBjcmVhdGUg
YSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUuXG4gIF8udG9BcnJheSA9
IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgaWYgKF8uaXNB
cnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xuICAgIGlmIChpc0FycmF5TGlrZShv
YmopKSByZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTtcbiAgICByZXR1cm4gXy52YWx1ZXMo
b2JqKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBv
YmplY3QuXG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkg
cmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDogXy5r
ZXlzKG9iaikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0IGEgY29sbGVjdGlvbiBpbnRvIHR3
byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0aXNmeSB0aGUgZ2l2ZW5cbiAgLy8g
cHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3Qgc2F0aXNmeSB0aGUg
cHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250
ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIg
cGFzcyA9IFtdLCBmYWlsID0gW107XG4gICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtl
eSwgb2JqKSB7XG4gICAgICAocHJlZGljYXRlKHZhbHVlLCBrZXksIG9iaikgPyBwYXNzIDogZmFp
bCkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtwYXNzLCBmYWlsXTtcbiAgfTtc
blxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0
IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJu
IHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRg
IGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsg
d2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJy
YXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4g
ICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xuICAgIHJldHVybiBf
LmluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xuICB9O1xuXG4gIC8vIFJldHVybnMg
ZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVz
ZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJl
dHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFz
dCBOLlxuICBfLmluaXRpYWwgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1
cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gKG4gPT0g
bnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9O1xuXG4gIC8vIEdldCB0aGUgbGFzdCBlbGVt
ZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBsYXN0IE5cbiAg
Ly8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5sYXN0ID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1
YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYgKG4g
PT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIHJl
dHVybiBfLnJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIG4pKTtcbiAgfTtc
blxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYXJy
YXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4gIC8vIEVzcGVjaWFsbHkgdXNlZnVs
IG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuXG4g
IC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5yZXN0ID0gXy50YWlsID0g
Xy5kcm9wID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNh
bGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKTtcbiAgfTtcblxuICAvLyBUcmlt
IG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXG4gIF8uY29tcGFjdCA9IGZ1bmN0
aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBfLmlkZW50aXR5KTtcbiAg
fTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxhdHRl
bmAgZnVuY3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rpb24oaW5wdXQsIHNoYWxsb3csIHN0
cmljdCwgc3RhcnRJbmRleCkge1xuICAgIHZhciBvdXRwdXQgPSBbXSwgaWR4ID0gMDtcbiAgICBm
b3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBsZW5ndGggPSBnZXRMZW5ndGgoaW5wdXQpOyBp
IDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYg
KGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoXy5pc0FycmF5KHZhbHVlKSB8fCBfLmlzQXJndW1lbnRz
KHZhbHVlKSkpIHtcbiAgICAgICAgLy9mbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3Ig
YXJndW1lbnRzIG9iamVjdFxuICAgICAgICBpZiAoIXNoYWxsb3cpIHZhbHVlID0gZmxhdHRlbih2
YWx1ZSwgc2hhbGxvdywgc3RyaWN0KTtcbiAgICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5s
ZW5ndGg7XG4gICAgICAgIG91dHB1dC5sZW5ndGggKz0gbGVuO1xuICAgICAgICB3aGlsZSAoaiA8
IGxlbikge1xuICAgICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtqKytdO1xuICAgICAgICB9
XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZh
bHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIC8vIEZs
YXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciBq
dXN0IG9uZSBsZXZlbC5cbiAgXy5mbGF0dGVuID0gZnVuY3Rpb24oYXJyYXksIHNoYWxsb3cpIHtc
biAgICByZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywgZmFsc2UpO1xuICB9O1xuXG4gIC8v
IFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUg
c3BlY2lmaWVkIHZhbHVlKHMpLlxuICBfLndpdGhvdXQgPSBmdW5jdGlvbihhcnJheSkge1xuICAg
IHJldHVybiBfLmRpZmZlcmVuY2UoYXJyYXksIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4g
IH07XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5
LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRo
ZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuICAvLyBBbGlhc2VkIGFzIGB1
bmlxdWVgLlxuICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0aW9uKGFycmF5LCBpc1NvcnRlZCwg
aXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIV8uaXNCb29sZWFuKGlzU29ydGVkKSkge1xu
ICAgICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgICAgaXRlcmF0ZWUgPSBpc1NvcnRlZDtcbiAg
ICAgIGlzU29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpdGVyYXRlZSAhPSBudWxsKSBp
dGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4g
ICAgdmFyIHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3Ro
KGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpXSxc
biAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUsIGksIGFycmF5
KSA6IHZhbHVlO1xuICAgICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICAgIGlmICghaSB8fCBzZWVu
ICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICBzZWVuID0gY29tcHV0
ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIGlmICghXy5jb250YWlu
cyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAg
ICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgh
Xy5jb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7
XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUHJvZHVj
ZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50
IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLnVuaW9uID0gZnVu
Y3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW5pcShmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1
ZSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBp
dGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFzc2VkLWluIGFycmF5cy5cbiAgXy5p
bnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAg
ICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAs
IGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFy
IGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNv
bnRpbnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAg
ICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAg
fVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1c
biAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0
aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5c
biAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdCA9IGZsYXR0
ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlLCAxKTtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXks
IGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhXy5jb250YWlucyhyZXN0LCB2YWx1ZSk7
XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8g
YSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0
b2dldGhlci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXy51bnppcChhcmd1
bWVudHMpO1xuICB9O1xuXG4gIC8vIENvbXBsZW1lbnQgb2YgXy56aXAuIFVuemlwIGFjY2VwdHMg
YW4gYXJyYXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8gZWFjaCBhcnJheSdzIGVsZW1lbnRz
IG9uIHNoYXJlZCBpbmRpY2VzXG4gIF8udW56aXAgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZh
ciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtc
biAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBfLnBs
dWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAg
Ly8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNzIGVpdGhlciBhIHNpbmdsZSBhcnJh
eSBvZiBgW2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBv
ZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2ZcbiAgLy8gdGhlIGNv
cnJlc3BvbmRpbmcgdmFsdWVzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykg
e1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAg
ICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAg
ICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAg
cmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRl
IHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNy
ZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJh
eSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUs
IGNvbnRleHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICB2
YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBmb3IgKDsgaW5kZXgg
Pj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIGlmIChwcmVk
aWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSByZXR1cm4gaW5kZXg7XG4gICAgICB9
XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0
IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBf
LmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuICBfLmZpbmRMYXN0
SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29t
cGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGlj
aFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9y
ZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXggPSBmdW5jdGlvbihhcnJh
eSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxv
dyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7
XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlm
IChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2gg
PSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1
bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4T2YgZnVuY3Rpb25zXG4g
IGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJlZGljYXRlRmluZCwgc29ydGVkSW5k
ZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkge1xuICAgICAgdmFy
IGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgaWYgKHR5cGVvZiBpZHgg
PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDApIHtcbiAgICAgICAgICAgIGkgPSBp
ZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7XG4gICAgICAgIH0gZWxz
ZSB7XG4gICAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxl
bmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNv
cnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgo
YXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6
IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0g
cHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBfLmlzTmFOKTtcbiAg
ICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9y
IChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0
aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJu
IGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0
dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFu
IGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFy
cmF5LlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRl
ciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJj
aC5cbiAgXy5pbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoMSwgXy5maW5kSW5kZXgsIF8uc29y
dGVkSW5kZXgpO1xuICBfLmxhc3RJbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoLTEsIF8uZmlu
ZExhc3RJbmRleCk7XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5n
IGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuICAvLyB0aGUgbmF0aXZlIFB5
dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBbdGhlIFB5dGhvbiBkb2N1bWVudGF0
aW9uXShodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmFuZ2Up
LlxuICBfLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoc3Rv
cCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwgMDtcbiAgICAgIHN0YXJ0ID0gMDtc
biAgICB9XG4gICAgc3RlcCA9IHN0ZXAgfHwgMTtcblxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1h
eChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4gICAgdmFyIHJhbmdlID0g
QXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4
KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lkeF0gPSBzdGFydDtcbiAgICB9XG5c
biAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24gKGFoZW0pIEZ1bmN0aW9u
c1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8g
ZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3JcbiAgLy8gb3IgYSBub3JtYWwgZnVu
Y3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzXG4gIHZhciBleGVjdXRlQm91bmQgPSBm
dW5jdGlvbihzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBh
cmdzKSB7XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5zdGFuY2VvZiBib3VuZEZ1bmMpKSBy
ZXR1cm4gc291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB2YXIgc2VsZiA9IGJh
c2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBzb3VyY2VG
dW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChfLmlzT2JqZWN0KHJlc3VsdCkpIHJldHVy
biByZXN1bHQ7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgZnVuY3Rp
b24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVu
dHMsXG4gIC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5h
dGl2ZSBgRnVuY3Rpb24uYmluZGAgaWZcbiAgLy8gYXZhaWxhYmxlLlxuICBfLmJpbmQgPSBmdW5j
dGlvbihmdW5jLCBjb250ZXh0KSB7XG4gICAgaWYgKG5hdGl2ZUJpbmQgJiYgZnVuYy5iaW5kID09
PSBuYXRpdmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBseShmdW5jLCBzbGljZS5jYWxsKGFy
Z3VtZW50cywgMSkpO1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlw
ZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYXJn
cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigp
IHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIGNvbnRleHQsIHRoaXMs
IGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgIH07XG4gICAgcmV0dXJu
IGJvdW5kO1xuICB9O1xuXG4gIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0
aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbiAgLy8gYXJndW1lbnRzIHBy
ZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIF8g
YWN0c1xuICAvLyBhcyBhIHBsYWNlaG9sZGVyLCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2Yg
YXJndW1lbnRzIHRvIGJlIHByZS1maWxsZWQuXG4gIF8ucGFydGlhbCA9IGZ1bmN0aW9uKGZ1bmMp
IHtcbiAgICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHZh
ciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBvc2l0aW9uID0gMCwgbGVuZ3RoID0g
Ym91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoKTtcbiAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJnc1tpXSA9IGJv
dW5kQXJnc1tpXSA9PT0gXyA/IGFyZ3VtZW50c1twb3NpdGlvbisrXSA6IGJvdW5kQXJnc1tpXTtc
biAgICAgIH1cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFyZ3VtZW50cy5sZW5ndGgpIGFyZ3Mu
cHVzaChhcmd1bWVudHNbcG9zaXRpb24rK10pO1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChm
dW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7
XG4gIH07XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRo
YXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8vIGFyZSB0aGUgbWV0aG9kIG5hbWVz
IHRvIGJlIGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQgYWxsIGNhbGxiYWNrc1xuICAv
LyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuXG4gIF8uYmluZEFsbCA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIHZhciBpLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLCBrZXk7XG4g
ICAgaWYgKGxlbmd0aCA8PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNz
ZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biAgICAgIGtleSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIG9ialtrZXldID0gXy5iaW5kKG9ialtr
ZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIE1lbW9pemUg
YW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6
ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24o
a2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJl
c3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7
XG4gICAgICBpZiAoIV8uaGFzKGNhY2hlLCBhZGRyZXNzKSkgY2FjaGVbYWRkcmVzc10gPSBmdW5j
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2FjaGVbYWRkcmVzc107XG4g
ICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAgcmV0dXJuIG1lbW9pemU7XG4gIH07
XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlz
ZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxp
ZWQuXG4gIF8uZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0KSB7XG4gICAgdmFyIGFyZ3MgPSBz
bGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24o
KXtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0sIHdhaXQpO1xu
ICB9O1xuXG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hlZHVsaW5nIGl0IHRvIHJ1biBhZnRl
ciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBjbGVhcmVkLlxuICBfLmRlZmVyID0g
Xy5wYXJ0aWFsKF8uZGVsYXksIF8sIDEpO1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhh
dCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0IG1vc3Qgb25jZVxuICAv
LyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9ybWFsbHksIHRoZSB0aHJvdHRsZWQg
ZnVuY3Rpb24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBpdCBjYW4sIHdpdGhvdXQgZXZlciBn
b2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0aW9uO1xuICAvLyBidXQgaWYgeW91
J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24gdGhlIGxlYWRpbmcgZWRnZSwgcGFz
c1xuICAvLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2FibGUgZXhlY3V0aW9uIG9uIHRoZSB0
cmFpbGluZyBlZGdlLCBkaXR0by5cbiAgXy50aHJvdHRsZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQs
IG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICAgIHZhciB0aW1l
b3V0ID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIGlmICghb3B0aW9ucykgb3B0
aW9ucyA9IHt9O1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMg
PSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7XG4gICAgICB0aW1lb3V0
ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAg
ICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuICAgIHJldHVy
biBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBub3cgPSBfLm5vdygpO1xuICAgICAgaWYgKCFwcmV2
aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9IG5vdztcbiAgICAg
IHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICAgIGNvbnRleHQg
PSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGlmIChyZW1haW5pbmcgPD0g
MCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAg
ICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAg
ICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFw
cGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdz
ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0aW9ucy50cmFpbGluZyAh
PT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmlu
Zyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8g
UmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBp
bnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJl
IGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNv
bmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRo
ZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91
bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQs
IGFyZ3MsIGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xuXG4gICAgdmFyIGxhdGVyID0gZnVu
Y3Rpb24oKSB7XG4gICAgICB2YXIgbGFzdCA9IF8ubm93KCkgLSB0aW1lc3RhbXA7XG5cbiAgICAg
IGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRp
bWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpbWVv
dXQgPSBudWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICAgIHJlc3VsdCA9
IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250
ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0
dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJn
dW1lbnRzO1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtcbiAgICAgIHZhciBjYWxsTm93ID0g
aW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0aW1lb3V0KSB0aW1lb3V0ID0gc2V0
VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICByZXN1
bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBjb250ZXh0ID0gYXJncyA9
IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxu
ICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8g
dGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBj
b2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhl
IG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7
XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1
cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5l
Z2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAg
ICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAg
fTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2Yg
YSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1
ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigp
IHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0
aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAg
ICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAg
ICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAg
ICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9u
IHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4g
IF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigp
IHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0
aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBh
IGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1
ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7
XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGlt
ZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4g
ICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4g
bWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwg
YmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5
b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBf
LnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIC8vIE9iamVjdCBGdW5jdGlvbnNcbiAgLy8gLS0t
LS0tLS0tLS0tLS0tLVxuXG4gIC8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0
ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG4gIHZhciBoYXNFbnVtQnVn
ID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7XG4g
IHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0
b1N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywg
J2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107XG5cbiAgZnVuY3Rpb24gY29sbGVj
dE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtcbiAgICB2YXIgbm9uRW51bUlkeCA9IG5vbkVudW1l
cmFibGVQcm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gb2JqLmNvbnN0cnVjdG9y
O1xuICAgIHZhciBwcm90byA9IChfLmlzRnVuY3Rpb24oY29uc3RydWN0b3IpICYmIGNvbnN0cnVj
dG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNw
ZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKF8uaGFz
KG9iaiwgcHJvcCkgJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIGtleXMucHVzaChwcm9wKTtc
blxuICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAgIHByb3AgPSBub25FbnVtZXJhYmxl
UHJvcHNbbm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBpbiBvYmogJiYgb2JqW3Byb3BdICE9
PSBwcm90b1twcm9wXSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkge1xuICAgICAgICBrZXlz
LnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0cmlldmUgdGhlIG5h
bWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipF
Q01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgXG4gIF8ua2V5cyA9IGZ1bmN0aW9u
KG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5h
dGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAg
ICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5
KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25F
bnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRy
aWV2ZSBhbGwgdGhlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9iamVjdC5cbiAgXy5hbGxLZXlzID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAg
ICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkp
O1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVu
dW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJp
ZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgXy52YWx1ZXMgPSBm
dW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZXNbaV0gPSBvYmpb
a2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH07XG5cbiAgLy8gUmV0dXJu
cyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50IG9m
IHRoZSBvYmplY3RcbiAgLy8gSW4gY29udHJhc3QgdG8gXy5tYXAgaXQgcmV0dXJucyBhbiBvYmpl
Y3RcbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4g
ICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAgXy5r
ZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgsXG4gICAgICAgICAgcmVz
dWx0cyA9IHt9LFxuICAgICAgICAgIGN1cnJlbnRLZXk7XG4gICAgICBmb3IgKHZhciBpbmRleCA9
IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGN1cnJlbnRLZXkgPSBrZXlz
W2luZGV4XTtcbiAgICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJy
ZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRz
O1xuICB9O1xuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYSBsaXN0IG9mIGBba2V5LCB2
YWx1ZV1gIHBhaXJzLlxuICBfLnBhaXJzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMg
PSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHBh
aXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpba2V5c1tpXV1dO1xuICAgIH1cbiAg
ICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMg
b2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLlxuICBfLmludmVy
dCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIga2V5cyA9
IF8ua2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2JqW2tleXNbaV1dXSA9IGtleXNbaV07
XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgc29ydGVk
IGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuICAv
LyBBbGlhc2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9ucyA9IF8ubWV0aG9kcyA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmop
IHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7XG4g
ICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2
ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3Qocyku
XG4gIF8uZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzKTtcblxuICAvLyBBc3NpZ25z
IGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJvcGVydGllcyBpbiB0aGUgcGFzc2Vk
LWluIG9iamVjdChzKVxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9X
ZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAg
Xy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8ua2V5cyk7XG5cbiAgLy8g
UmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHByZWRpY2F0
ZSB0ZXN0XG4gIF8uZmluZEtleSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7
XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9
IF8ua2V5cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVu
Z3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAo
cHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7XG4gICAgfVxuICB9O1xu
XG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIGFs
bG93bGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ucGljayA9IGZ1bmN0aW9uKG9iamVjdCwgb2l0ZXJh
dGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9LCBvYmogPSBvYmplY3QsIGl0ZXJh
dGVlLCBrZXlzO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAo
Xy5pc0Z1bmN0aW9uKG9pdGVyYXRlZSkpIHtcbiAgICAgIGtleXMgPSBfLmFsbEtleXMob2JqKTtc
biAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihvaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIH0g
ZWxzZSB7XG4gICAgICBrZXlzID0gZmxhdHRlbihhcmd1bWVudHMsIGZhbHNlLCBmYWxzZSwgMSk7
XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iaikgeyByZXR1cm4ga2V5
IGluIG9iajsgfTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmopO1xuICAgIH1cbiAgICBmb3IgKHZh
ciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAg
dmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGlm
IChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH1c
biAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBv
YmplY3Qgd2l0aG91dCB0aGUgYmxvY2tsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5vbWl0ID0gZnVu
Y3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmIChfLmlzRnVuY3Rpb24oaXRl
cmF0ZWUpKSB7XG4gICAgICBpdGVyYXRlZSA9IF8ubmVnYXRlKGl0ZXJhdGVlKTtcbiAgICB9IGVs
c2Uge1xuICAgICAgdmFyIGtleXMgPSBfLm1hcChmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZh
bHNlLCAxKSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSkg
e1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywga2V5KTtcbiAgICAgIH07XG4gICAg
fVxuICAgIHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7XG4gIH07XG5cbiAg
Ly8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgXy5k
ZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cywgdHJ1ZSk7XG5cbiAgLy8gQ3JlYXRl
cyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBnaXZlbiBwcm90b3R5cGUgb2JqZWN0
LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhleSB3
aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9iamVjdC5cbiAgXy5jcmVhdGUgPSBm
dW5jdGlvbihwcm90b3R5cGUsIHByb3BzKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUo
cHJvdG90eXBlKTtcbiAgICBpZiAocHJvcHMpIF8uZXh0ZW5kT3duKHJlc3VsdCwgcHJvcHMpO1xu
ICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVk
KSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuICBfLmNsb25lID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gICAgcmV0dXJuIF8uaXNBcnJh
eShvYmopID8gb2JqLnNsaWNlKCkgOiBfLmV4dGVuZCh7fSwgb2JqKTtcbiAgfTtcblxuICAvLyBJ
bnZva2VzIGludGVyY2VwdG9yIHdpdGggdGhlIG9iaiwgYW5kIHRoZW4gcmV0dXJucyBvYmouXG4g
IC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gXCJ0YXAgaW50b1wi
IGEgbWV0aG9kIGNoYWluLCBpblxuICAvLyBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24g
aW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi5cbiAgXy50YXAgPSBmdW5jdGlv
bihvYmosIGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0b3Iob2JqKTtcbiAgICByZXR1cm4g
b2JqO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4g
c2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmlzTWF0Y2ggPSBmdW5jdGlvbihvYmplY3Qs
IGF0dHJzKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMoYXR0cnMpLCBsZW5ndGggPSBrZXlzLmxl
bmd0aDtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVuZ3RoO1xuICAgIHZhciBv
YmogPSBPYmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChhdHRyc1trZXldICE9PSBv
Ympba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVy
biB0cnVlO1xuICB9O1xuXG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVu
Y3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVuY3Rpb24oYSwgYiwgYVN0YWNrLCBi
U3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAs
IGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdh
bGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1v
bnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09PSAx
IC8gYjtcbiAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBu
dWxsID09IHVuZGVmaW5lZGAuXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVy
biBhID09PSBiO1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLlxuICAgIGlmIChh
IGluc3RhbmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBfKSBi
ID0gYi5fd3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICAgIHZh
ciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAgIGlmIChjbGFzc05hbWUgIT09IHRv
U3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xu
ICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBleHByZXNzaW9ucywgZGF0ZXMsIGFu
ZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4gICAgICBjYXNlICdbb2JqZWN0IFJl
Z0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0byBzdHJpbmdzIGZvciBjb21w
YXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylcbiAgICAgIGNhc2UgJ1tvYmplY3Qg
U3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcg
b2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVzLCBgXCI1XCJgIGlzXG4gICAgICAg
IC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIpYC5cbiAgICAgICAgcmV0dXJuICcn
ICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzpcbiAgICAgICAg
Ly8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgICAgLy8g
T2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU5cbiAgICAgICAgaWYgKCthICE9PSArYSkg
cmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVy
Zm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAw
ID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0
ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBk
YXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUg
Y29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25z
LiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9u
c1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVy
biArYSA9PT0gK2I7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0g
J1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVv
ZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5c
biAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1
aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJl
bnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0g
Yi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rp
b24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0
b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYg
J2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4g
ICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBh
bGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0
ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5c
blxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAv
LyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQg
YXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFj
ayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3
aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlz
IGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVl
IG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1
cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBv
YmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNo
KGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBv
YmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFy
ZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNl
c3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIu
bGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRz
LCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0t
KSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNr
KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNv
bXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBs
ZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBj
b250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVl
cCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVy
biBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBh
cmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAo
IShfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKSBy
ZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2Jq
ZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wb3Ao
KTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gUGVy
Zm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwu
XG4gIF8uaXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gZXEoYSwgYik7XG4g
IH07XG5cbiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/XG4g
IC8vIEFuIFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3duLXByb3BlcnRpZXMu
XG4gIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0
dXJuIHRydWU7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikgJiYgKF8uaXNBcnJheShvYmopIHx8
IF8uaXNTdHJpbmcob2JqKSB8fCBfLmlzQXJndW1lbnRzKG9iaikpKSByZXR1cm4gb2JqLmxlbmd0
aCA9PT0gMDtcbiAgICByZXR1cm4gXy5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICB9O1xuXG4g
IC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9cbiAgXy5pc0VsZW1lbnQgPSBmdW5j
dGlvbihvYmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7XG4g
IH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT9cbiAgLy8gRGVsZWdhdGVzIHRv
IEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJyYXlcbiAgXy5pc0FycmF5ID0gbmF0aXZlSXNBcnJh
eSB8fCBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAn
W29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2Jq
ZWN0P1xuICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHR5cGUgPSB0eXBl
b2Ygb2JqO1xuICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IHR5cGUgPT09ICdvYmpl
Y3QnICYmICEhb2JqO1xuICB9O1xuXG4gIC8vIEFkZCBzb21lIGlzVHlwZSBtZXRob2RzOiBpc0Fy
Z3VtZW50cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc0RhdGUsIGlzUmVnRXhw
LCBpc0Vycm9yLlxuICBfLmVhY2goWydBcmd1bWVudHMnLCAnRnVuY3Rpb24nLCAnU3RyaW5nJywg
J051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCcsICdFcnJvciddLCBmdW5jdGlvbihuYW1lKSB7XG4g
ICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0b1N0cmlu
Zy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nO1xuICAgIH07XG4gIH0pO1xu
XG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2Vy
cyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUgaXNuJ3QgYW55IGluc3BlY3RhYmxl
IFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgaWYgKCFfLmlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHtc
biAgICBfLmlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gXy5oYXMo
b2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9u
YCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgs
XG4gIC8vIElFIDExICgjMTYyMSksIGFuZCBpbiBTYWZhcmkgOCAoIzE5MjkpLlxuICBpZiAodHlw
ZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4QXJyYXkgIT0gJ29iamVjdCcpIHtc
biAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Yg
b2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2
ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zpbml0ZSA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpO1xu
ICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD8gKE5hTiBpcyB0aGUgb25seSBu
dW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5cbiAgXy5pc05hTiA9IGZ1bmN0aW9u
KG9iaikge1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikgJiYgb2JqICE9PSArb2JqO1xuICB9
O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuICBfLmlzQm9vbGVhbiA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8
fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztcbiAgfTtcblxuICAv
LyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4gIF8uaXNOdWxsID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgXy5pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uKG9iaikge1xu
ICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcbiAgfTtcblxuICAvLyBTaG9ydGN1dCBmdW5jdGlv
biBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3BlcnR5IGRpcmVjdGx5
XG4gIC8vIG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5vdCBvbiBhIHByb3RvdHlwZSkuXG4g
IF8uaGFzID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYg
aGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5j
dGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBp
biAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4g
IC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3Jl
IG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJl
dmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhl
IGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRl
bnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAv
LyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9m
IFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVy
biBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8u
bm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICBfLnByb3BlcnR5ID0gcHJvcGVydHk7XG5cbiAgLy8g
R2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHRoYXQgcmV0dXJucyBhIGdp
dmVuIHByb3BlcnR5LlxuICBfLnByb3BlcnR5T2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1
cm4gb2JqID09IG51bGwgPyBmdW5jdGlvbigpe30gOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJl
dHVybiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBwcmVkaWNhdGUg
Zm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZlxuICAvLyBg
a2V5OnZhbHVlYCBwYWlycy5cbiAgXy5tYXRjaGVyID0gXy5tYXRjaGVzID0gZnVuY3Rpb24oYXR0
cnMpIHtcbiAgICBhdHRycyA9IF8uZXh0ZW5kT3duKHt9LCBhdHRycyk7XG4gICAgcmV0dXJuIGZ1
bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaXNNYXRjaChvYmosIGF0dHJzKTtcbiAgICB9
O1xuICB9O1xuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLlxuICBfLnRpbWVzID0g
ZnVuY3Rpb24obiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgYWNjdW0gPSBBcnJheShN
YXRoLm1heCgwLCBuKSk7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250
ZXh0LCAxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNjdW1baV0gPSBpdGVy
YXRlZShpKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgcmFuZG9t
IGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVzaXZlKS5cbiAgXy5yYW5kb20gPSBm
dW5jdGlvbihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgbWF4ID0g
bWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3Io
TWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gIH07XG5cbiAgLy8gQSAocG9zc2li
bHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2Vy
LlxuICBfLm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRGF0
ZSgpLmdldFRpbWUoKTtcbiAgfTtcblxuICAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBl
c2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwn
OiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCIn
XCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFw
ID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFu
ZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBj
cmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlv
bihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdl
eGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWRcbiAgICB2
YXIgc291cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2luKCd8JykgKyAnKSc7XG4gICAgdmFy
IHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2YXIgcmVwbGFjZVJlZ2V4cCA9IFJl
Z0V4cChzb3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAg
c3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nO1xuICAgICAgcmV0dXJu
IHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2UocmVwbGFjZVJlZ2V4cCwg
ZXNjYXBlcikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgXy5lc2NhcGUgPSBjcmVhdGVFc2Nh
cGVyKGVzY2FwZU1hcCk7XG4gIF8udW5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKHVuZXNjYXBlTWFw
KTtcblxuICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIGBwcm9wZXJ0eWAgaXMgYSBmdW5j
dGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBgb2JqZWN0YCBhcyBjb250ZXh0OyBv
dGhlcndpc2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBmdW5jdGlvbihvYmplY3QsIHByb3Bl
cnR5LCBmYWxsYmFjaykge1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBudWxsID8gdm9pZCAw
IDogb2JqZWN0W3Byb3BlcnR5XTtcbiAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAg
dmFsdWUgPSBmYWxsYmFjaztcbiAgICB9XG4gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih2YWx1ZSkg
PyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfTtcblxuICAvLyBHZW5lcmF0ZSBhIHVu
aXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24p
LlxuICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLlxuICB2YXIgaWRDb3VudGVyID0g
MDtcbiAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIHZhciBpZCA9ICsraWRD
b3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7XG4gIH07
XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBk
ZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0
byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50ZW1wbGF0ZVNldHRpbmdzID0ge1xu
ICAgIGV2YWx1YXRlICAgIDogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICBpbnRlcnBvbGF0ZSA6
IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZSAgICAgIDogLzwlLShbXFxzXFxTXSs/
KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwg
aWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1
YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFu
dGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRh
aW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQg
aW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidc
IjogICAgICBcIidcIixcbiAgICAnXFxcXCc6ICAgICAnXFxcXCcsXG4gICAgJ1xccic6ICAgICAn
cicsXG4gICAgJ1xcbic6ICAgICAnbicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdc
XHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2NhcGVyID0gL1xcXFx8J3xcXHJ8XFxu
fFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gp
IHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2
YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1l
bnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRl
bGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2Fw
ZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5n
c2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRl
ID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0
aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5n
cyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAg
Ly8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0
ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVz
Y2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwg
bm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNv
dXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhl
IHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHku
XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0
ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUs
IGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBv
ZmZzZXQpLnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7XG4gICAgICBpbmRleCA9IG9mZnNl
dCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2FwZSkge1xuICAgICAgICBzb3VyY2Ug
Kz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190
KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgICBzb3Vy
Y2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRlICsgXCIpKT09bnVsbD8nJzpfX3Qp
K1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAgICAgICAgc291cmNlICs9
IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAgIH1cblxuICAgICAg
Ly8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHByb2R1Y2UgdGhlIGNvcnJl
Y3Qgb2ZmZXN0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICAgIHNvdXJjZSArPSBc
Iic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNl
IGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUp
IHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxcbic7XG5cbiAgICBz
b3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbixcIiArXG4g
ICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxu
XCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICAgIHRyeSB7XG4gICAg
ICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAn
XycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7
XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRh
dGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xu
XG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9y
IHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8
ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAn
KXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4g
IC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVu
ZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGlu
c3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJu
IGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8g
SWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBw
ZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBo
b2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlv
bnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciByZXN1
bHQgPSBmdW5jdGlvbihpbnN0YW5jZSwgb2JqKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLl9jaGFp
biA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xuICB9O1xuXG4gIC8vIEFkZCB5b3VyIG93biBjdXN0
b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5taXhpbiA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhvYmopLCBmdW5jdGlvbihuYW1lKSB7
XG4gICAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFtZV07XG4gICAgICBfLnByb3RvdHlw
ZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVk
XTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4g
cmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xuICAgICAgfTtcbiAgICB9KTtcbiAg
fTtcblxuICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3JlIGZ1bmN0aW9ucyB0byB0aGUgd3Jh
cHBlciBvYmplY3QuXG4gIF8ubWl4aW4oXyk7XG5cbiAgLy8gQWRkIGFsbCBtdXRhdG9yIEFycmF5
IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsncG9wJywgJ3B1c2gnLCAncmV2
ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG5h
bWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlw
ZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4g
ICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKChuYW1lID09PSAn
c2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSBkZWxldGUg
b2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xu
XG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxu
ICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4g
ICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0g
PSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgbWV0aG9kLmFwcGx5KHRo
aXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEV4dHJhY3Rz
IHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LlxuICBfLnByb3Rv
dHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl93cmFwcGVkO1xuICB9
O1xuXG4gIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94eSBmb3Igc29tZSBtZXRob2RzIHVzZWQg
aW4gZW5naW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBhcml0aG1ldGljIGFuZCBKU09OIHN0
cmluZ2lmaWNhdGlvbi5cbiAgXy5wcm90b3R5cGUudmFsdWVPZiA9IF8ucHJvdG90eXBlLnRvSlNP
TiA9IF8ucHJvdG90eXBlLnZhbHVlO1xuXG4gIF8ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rp
b24oKSB7XG4gICAgcmV0dXJuICcnICsgdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBBTUQg
cmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEFN
RCBsb2FkZXJzXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNlIG5leHQtdHVybiBzZW1hbnRpY3Mg
b24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxuICAvLyBwcmFjdGljZSBmb3IgQU1EIHJl
Z2lzdHJhdGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVyc2NvcmUgcmVnaXN0ZXJzXG4gIC8v
IGFzIGEgbmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1ZXJ5LCBpdCBpcyBhIGJhc2UgbGli
cmFyeSB0aGF0IGlzXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRvIGJlIGJ1bmRsZWQgaW4gYSB0aGly
ZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxuICAvLyBhbiBBTUQgbG9hZCByZXF1ZXN0
LiBUaG9zZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIGFuXG4gIC8vIGFub255
bW91cyBkZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBhIGxvYWRlciByZXF1ZXN0LlxuICBp
ZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVm
aW5lKCd1bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF87XG4gICAg
fSk7XG4gIH1cbn0uY2FsbCh0aGlzKSk7XG4iCiAKIC8qKiovIH0pLAogLyogNDIyICovCkBAIC0x
NDkwMjgsNyArMTQ5MDI4LDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKIAogICBmdW5j
dGlvbiBjb21iaW5lKGRlc3QsIHNyYykgewogICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChm
dW5jdGlvbihuYW1lKSB7Ci0gICAgICBpZiAoXy5oYXMoSlNISU5ULmJsYWNrbGlzdCwgbmFtZSkp
IHJldHVybjsKKyAgICAgIGlmIChfLmhhcyhKU0hJTlQuYmxvY2tsaXN0LCBuYW1lKSkgcmV0dXJu
OwogICAgICAgZGVzdFtuYW1lXSA9IHNyY1tuYW1lXTsKICAgICB9KTsKICAgfQpAQCAtMTQ5MzEz
LDcgKzE0OTMxMyw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAga2V5
ID0ga2V5LnNsaWNlKDEpOwogICAgICAgICAgIHZhbCA9IGZhbHNlOwogCi0gICAgICAgICAgSlNI
SU5ULmJsYWNrbGlzdFtrZXldID0ga2V5OworICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rba2V5
XSA9IGtleTsKICAgICAgICAgICBkZWxldGUgcHJlZGVmaW5lZFtrZXldOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgIHByZWRlZltrZXldID0gKHZhbCA9PT0gInRydWUiKTsKQEAgLTE1NDEy
MCw3ICsxNTQxMjAsNyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogICAgICAgSlNISU5U
LmVycm9ycyA9IFtdOwogICAgICAgSlNISU5ULnVuZGVmcyA9IFtdOwogICAgICAgSlNISU5ULmlu
dGVybmFscyA9IFtdOwotICAgICAgSlNISU5ULmJsYWNrbGlzdCA9IHt9OworICAgICAgSlNISU5U
LmJsb2NrbGlzdCA9IHt9OwogICAgICAgSlNISU5ULnNjb3BlID0gIihtYWluKSI7CiAgICAgfQog
CkBAIC0xNTQxNDksNyArMTU0MTQ5LDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKIAog
ICAgICAgICBpZiAoaXRlbVswXSA9PT0gIi0iKSB7CiAgICAgICAgICAgc2xpY2UgPSBpdGVtLnNs
aWNlKDEpOwotICAgICAgICAgIEpTSElOVC5ibGFja2xpc3Rbc2xpY2VdID0gc2xpY2U7CisgICAg
ICAgICAgSlNISU5ULmJsb2NrbGlzdFtzbGljZV0gPSBzbGljZTsKICAgICAgICAgICAvLyByZW1v
dmUgZnJvbSBwcmVkZWZpbmVkIGlmIHRoZXJlCiAgICAgICAgICAgZGVsZXRlIHByZWRlZmluZWRb
c2xpY2VdOwogICAgICAgICB9IGVsc2UgewpAQCAtMTU4NDk4LDcgKzE1ODQ5OCw3IEBAIGV4cG9y
dHMudmFsID0gewogICBwcmVkZWYgICAgICAgOiBmYWxzZSwKIAogICAvKioKLSAgICogVGhpcyBv
cHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHdoaXRlIGxpc3Qgb2YgZ2xvYmFsIHZhcmlh
YmxlcyB0aGF0CisgICAqIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW4gYWxs
b3cgbGlzdCBvZiBnbG9iYWwgdmFyaWFibGVzIHRoYXQKICAgICogYXJlIG5vdCBmb3JtYWxseSBk
ZWZpbmVkIGluIHRoZSBzb3VyY2UgY29kZS4gVGhpcyBpcyBtb3N0IHVzZWZ1bCB3aGVuCiAgICAq
IGNvbWJpbmVkIHdpdGggdGhlIGB1bmRlZmAgb3B0aW9uIGluIG9yZGVyIHRvIHN1cHByZXNzIHdh
cm5pbmdzIGZvcgogICAgKiBwcm9qZWN0LXNwZWNpZmljIGdsb2JhbCB2YXJpYWJsZXMuCkBAIC0x
OTU4MjksNyArMTk1ODI5LDcgQEAgZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5v
ZGUpIAogCXZhciByZWdleFNpbmdsZUVzY2FwZSA9IC9bIidcXFxiXGZcblxyXHRdLzsKIAogCXZh
ciByZWdleERpZ2l0ID0gL1swLTldLzsKLQl2YXIgcmVnZXhXaGl0ZWxpc3QgPSAvWyAhIy0mXCgt
XFtcXS1+XS87CisJdmFyIHJlZ2V4QWxsb3dsaXN0ID0gL1sgISMtJlwoLVxbXF0tfl0vOwogCiAJ
dmFyIGpzZXNjID0gZnVuY3Rpb24oYXJndW1lbnQsIG9wdGlvbnMpIHsKIAkJLy8gSGFuZGxlIG9w
dGlvbnMKQEAgLTE5NjAwNCw3ICsxOTYwMDQsNyBAQCBmdW5jdGlvbiBJbXBvcnROYW1lc3BhY2VT
cGVjaWZpZXIobm9kZSkgCiAJCQkJfQogCQkJfQogCQkJaWYgKCFvcHRpb25zLmVzY2FwZUV2ZXJ5
dGhpbmcpIHsKLQkJCQlpZiAocmVnZXhXaGl0ZWxpc3QudGVzdChjaGFyYWN0ZXIpKSB7CisJCQkJ
aWYgKHJlZ2V4QWxsb3dsaXN0LnRlc3QoY2hhcmFjdGVyKSkgewogCQkJCQkvLyBJdOKAmXMgYSBw
cmludGFibGUgQVNDSUkgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGAiYCwgYCdgIG9yIGBcYCwKIAkJ
CQkJLy8gc28gZG9u4oCZdCBlc2NhcGUgaXQuCiAJCQkJCXJlc3VsdCArPSBjaGFyYWN0ZXI7CkBA
IC0yMDkzMzQsNyArMjA5MzM0LDcgQEAgdmFyIF9nZXRJdGVyYXRvcjMgPSBfaW50ZXJvcFJlcXVp
cmVEZWZhdQogCiBleHBvcnRzLmNhbGwgPSBjYWxsOwogZXhwb3J0cy5fY2FsbCA9IF9jYWxsOwot
ZXhwb3J0cy5pc0JsYWNrbGlzdGVkID0gaXNCbGFja2xpc3RlZDsKK2V4cG9ydHMuaXNCbG9ja2xp
c3RlZCA9IGlzQmxvY2tsaXN0ZWQ7CiBleHBvcnRzLnZpc2l0ID0gdmlzaXQ7CiBleHBvcnRzLnNr
aXAgPSBza2lwOwogZXhwb3J0cy5za2lwS2V5ID0gc2tpcEtleTsKQEAgLTIwOTQxMCw5ICsyMDk0
MTAsOSBAQCBmdW5jdGlvbiBfY2FsbChmbnMpIHsKICAgcmV0dXJuIGZhbHNlOwogfQogCi1mdW5j
dGlvbiBpc0JsYWNrbGlzdGVkKCkgewotICB2YXIgYmxhY2tsaXN0ID0gdGhpcy5vcHRzLmJsYWNr
bGlzdDsKLSAgcmV0dXJuIGJsYWNrbGlzdCAmJiBibGFja2xpc3QuaW5kZXhPZih0aGlzLm5vZGUu
dHlwZSkgPiAtMTsKK2Z1bmN0aW9uIGlzQmxvY2tsaXN0ZWQoKSB7CisgIHZhciBibG9ja2xpc3Qg
PSB0aGlzLm9wdHMuYmxvY2tsaXN0OworICByZXR1cm4gYmxvY2tsaXN0ICYmIGJsb2NrbGlzdC5p
bmRleE9mKHRoaXMubm9kZS50eXBlKSA+IC0xOwogfQogCiBmdW5jdGlvbiB2aXNpdCgpIHsKQEAg
LTIwOTQyMCw3ICsyMDk0MjAsNyBAQCBmdW5jdGlvbiB2aXNpdCgpIHsKICAgICByZXR1cm4gZmFs
c2U7CiAgIH0KIAotICBpZiAodGhpcy5pc0JsYWNrbGlzdGVkKCkpIHsKKyAgaWYgKHRoaXMuaXNC
bG9ja2xpc3RlZCgpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKQEAgLTIxMTA3OCw3ICsy
MTEwNzgsNyBAQCBmdW5jdGlvbiBzaG91bGRJZ25vcmVLZXkoa2V5KSB7CiAKICAgaWYgKGtleSA9
PT0gImVudGVyIiB8fCBrZXkgPT09ICJleGl0IiB8fCBrZXkgPT09ICJzaG91bGRTa2lwIikgcmV0
dXJuIHRydWU7CiAKLSAgaWYgKGtleSA9PT0gImJsYWNrbGlzdCIgfHwga2V5ID09PSAibm9TY29w
ZSIgfHwga2V5ID09PSAic2tpcEtleXMiKSByZXR1cm4gdHJ1ZTsKKyAgaWYgKGtleSA9PT0gImJs
b2NrbGlzdCIgfHwga2V5ID09PSAibm9TY29wZSIgfHwga2V5ID09PSAic2tpcEtleXMiKSByZXR1
cm4gdHJ1ZTsKIAogICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMjI3NjgsNyArMjIyNzY4LDcgQEAg
ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IAogCiBjb25zdCBsaWZlY3lj
bGVNZXRob2RzID0gbmV3IFNldChbImNvbXBvbmVudFdpbGxVbm1vdW50IiwgImNvbXBvbmVudERp
ZE1vdW50IiwgImNvbXBvbmVudFdpbGxNb3VudCIsICJjb21wb25lbnREaWRVcGRhdGUiLCAiY29t
cG9uZW50V2lsbFVwZGF0ZSIsICJjb21wb25lbnREaWRDYXRjaCIsICJjb21wb25lbnRXaWxsUmVj
ZWl2ZVByb3BzIl0pOwogCi1jb25zdCB3aGl0ZWxpc3RlZFByb3BlcnRpZXMgPSBuZXcgU2V0KFsi
cHJvcHMiLCAiY29udGV4dCIsICJyZWZzIl0pOworY29uc3QgYWxsb3dsaXN0ZWRQcm9wZXJ0aWVz
ID0gbmV3IFNldChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsKIAogZnVuY3Rpb24gZ2V0
SW5pdGlhbFByb3BzKHJlYWxtLCBjb21wb25lbnRUeXBlKSB7CiAgIGxldCBwcm9wc05hbWUgPSBu
dWxsOwpAQCAtMjIyOTM4LDcgKzIyMjkzOCw3IEBAIGZ1bmN0aW9uIGV2YWx1YXRlQ2xhc3NDb25z
dHJ1Y3RvcihyZWFsbSwKICAgICBsZXQgaW5zdGFuY2UgPSAoMCwgX2luZGV4Mi5Db25zdHJ1Y3Qp
KHJlYWxtLCBjb25zdHJ1Y3RvckZ1bmMsIFtwcm9wcywgY29udGV4dF0pOwogICAgICgwLCBfaW52
YXJpYW50Mi5kZWZhdWx0KShpbnN0YW5jZSBpbnN0YW5jZW9mIF9pbmRleC5PYmplY3RWYWx1ZSk7
CiAgICAgZm9yIChsZXQgW3Byb3BlcnR5TmFtZV0gb2YgaW5zdGFuY2UucHJvcGVydGllcykgewot
ICAgICAgaWYgKCF3aGl0ZWxpc3RlZFByb3BlcnRpZXMuaGFzKHByb3BlcnR5TmFtZSkpIHsKKyAg
ICAgIGlmICghYWxsb3dsaXN0ZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eU5hbWUpKSB7CiAgICAg
ICAgIGluc3RhbmNlUHJvcGVydGllcy5hZGQocHJvcGVydHlOYW1lKTsKICAgICAgIH0KICAgICB9
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>