<?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>121595</bug_id>
          
          <creation_ts>2013-09-19 00:52:22 -0700</creation_ts>
          <short_desc>Add an AngularJS test to DoYouEvenBench</short_desc>
          <delta_ts>2013-09-19 01:13:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>930862</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-09-19 00:52:22 -0700</bug_when>
    <thetext>Add an AngularJS test to DoYouEvenBench</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930863</commentid>
    <comment_count>1</comment_count>
      <attachid>212040</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-09-19 00:54:15 -0700</bug_when>
    <thetext>Created attachment 212040
Adds the support for AngularJS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930864</commentid>
    <comment_count>2</comment_count>
      <attachid>212040</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-09-19 00:58:56 -0700</bug_when>
    <thetext>Comment on attachment 212040
Adds the support for AngularJS

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

&gt; PerformanceTests/DoYouEvenBench/benchmark.html:158
&gt; +    var todomvc = contentWindow.todomvc;

Huh, something is wrong with the indentation here. Will fix before landing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930868</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-09-19 01:06:45 -0700</bug_when>
    <thetext>Committed r156088: &lt;http://trac.webkit.org/changeset/156088&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212040</attachid>
            <date>2013-09-19 00:54:15 -0700</date>
            <delta_ts>2013-09-19 01:03:09 -0700</delta_ts>
            <desc>Adds the support for AngularJS</desc>
            <filename>bug-121595-20130919005414.patch</filename>
            <type>text/plain</type>
            <size>616982</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTYwODYpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEzLTA5LTE5ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhbiBBbmd1bGFy
SlMgdGVzdCB0byBEb1lvdUV2ZW5CZW5jaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNTk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9iZW5jaG1hcmsuaHRtbDoKKyAgICAg
ICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFy
anM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlci5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2
ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29t
cG9uZW50czogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvYW5ndWxhcjogQWRkZWQu
CisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvYW5ndWxhci1tb2NrczogQWRkZWQuCisgICAgICAg
ICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpz
L2Jvd2VyX2NvbXBvbmVudHMvYW5ndWxhci1tb2Nrcy9hbmd1bGFyLW1vY2tzLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9h
bmd1bGFyanMvYm93ZXJfY29tcG9uZW50cy9hbmd1bGFyL2FuZ3VsYXIuanM6IEFkZGVkLgorICAg
ICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uOiBBZGRlZC4KKyAgICAgICAgKiBE
b1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93
ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzczogQWRkZWQuCisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jv
d2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qczogQWRkZWQuCisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jv
d2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmcucG5nOiBBZGRlZC4KKyAgICAgICAgKiBE
b1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvaW5k
ZXguaHRtbDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5C
ZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvYXBwLmpzOiBB
ZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9hbmd1bGFyanMvanMvY29udHJvbGxlcnM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZl
bkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9jb250cm9s
bGVycy90b2RvQ3RybC5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXM6IEFkZGVkLgor
ICAgICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Fu
Z3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9CbHVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lv
dUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvZGly
ZWN0aXZlcy90b2RvRXNjYXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvZGlyZWN0aXZlcy90b2Rv
Rm9jdXMuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9zZXJ2aWNlczogQWRkZWQuCisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pz
L3NlcnZpY2VzL3RvZG9TdG9yYWdlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5j
aC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvcmVhZG1lLm1kOiBBZGRl
ZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9hbmd1bGFyanMvdGVzdDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvY29uZmlnOiBBZGRlZC4KKyAg
ICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1
bGFyanMvdGVzdC9jb25maWcvdGVzdGFjdWxhci5jb25mLmpzOiBBZGRlZC4KKyAgICAgICAgKiBE
b1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvdGVz
dC9wYWNrYWdlLmpzb246IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L3JlYWRtZS5tZDogQWRkZWQuCisg
ICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5n
dWxhcmpzL3Rlc3QvdW5pdDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvdW5pdC9kaXJlY3RpdmVzU3Bl
Yy5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvdW5pdC90b2RvQ3RybFNwZWMuanM6IEFkZGVkLgor
CiAyMDEzLTA5LTE3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IEFkZCBhIG5vdCBjb21wbGV0ZWx5IHVucmVhbGlzdGljIERPTSBCZW5jaG1hcmsKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvYmVuY2htYXJrLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9iZW5jaG1hcmsuaHRtbAkocmV2aXNp
b24gMTU2MDczKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9iZW5jaG1hcmsu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIDwhRE9DVFlQRSBodG1sPgogPGh0
bWw+CiA8aGVhZD4KLTx0aXRsZT5Ob3QgQ29tcGxldGVseSBVbnJlYWxpc3RpYyBET00gQmVuY2ht
YXJrPC90aXRsZT4KKzx0aXRsZT5Eb1lvdUV2ZW5CZW5jaDwvdGl0bGU+CiA8c2NyaXB0IHNyYz0i
YmVuY2htYXJrLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiAKQEAgLTE0Myw2ICsxNDMsNDIgQEAg
QmVuY2htYXJrUnVubmVyLnN1aXRlKHsKICAgICBdCiB9KTsKIAorQmVuY2htYXJrUnVubmVyLnN1
aXRlKHsKKyAgICBuYW1lOiAnQW5ndWxhckpTL1RvZG9NVkMnLAorICAgIHVybDogJ3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9pbmRleC5odG1sJywKKyAgICBwcmVwYXJl
OiBmdW5jdGlvbiAoY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgdmFyIHN0
b3JhZ2UgPSBbXTsKKyAgICAgICAgcmV0dXJuIEJlbmNobWFya1J1bm5lci53YWl0Rm9yRWxlbWVu
dCgnI25ldy10b2RvJykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICAgICAgZWxl
bWVudC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0pOwor
ICAgIH0sCisgICAgdGVzdHM6IFsKKyAgICAgICAgWydBZGRpbmcnICsgbnVtYmVyT2ZJdGVtc1Rv
QWRkICsgJ0l0ZW1zJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnRE
b2N1bWVudCkgeworICAgIHZhciB0b2RvbXZjID0gY29udGVudFdpbmRvdy50b2RvbXZjOworICAg
IHZhciBzdWJtaXRFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpOworICAgIHN1
Ym1pdEV2ZW50LmluaXRFdmVudCgnc3VibWl0JywgdHJ1ZSwgdHJ1ZSk7CisgICAgdmFyIGlucHV0
RXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTsKKyAgICBpbnB1dEV2ZW50Lmlu
aXRFdmVudCgnaW5wdXQnLCB0cnVlLCB0cnVlKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51
bWJlck9mSXRlbXNUb0FkZDsgaSsrKSB7CisgICAgICAgIG5ld1RvZG8udmFsdWUgPSAnU29tZXRo
aW5nIHRvIGRvICcgKyBpOworICAgICAgICBuZXdUb2RvLmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVu
dCk7CisgICAgICAgIG5ld1RvZG8uZm9ybS5kaXNwYXRjaEV2ZW50KHN1Ym1pdEV2ZW50KTsKKyAg
ICAgICAgfQorICAgIH1dLAorICAgIFsnQ29tcGxldGluZ0FsbEl0ZW1zJywgZnVuY3Rpb24gKG5l
d1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgIHZhciBjaGVja2Jv
eGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpKyspCisgICAgICAgIGNoZWNr
Ym94ZXNbaV0uY2xpY2soKTsKKyAgICB9XSwKKyAgICAgICAgWydEZWxldGluZ0FsbEl0ZW1zJywg
ZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAg
IHZhciBkZWxldGVCdXR0b25zID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5k
ZXN0cm95Jyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVCdXR0b25zLmxlbmd0aDsg
aSsrKQorICAgICAgICBkZWxldGVCdXR0b25zW2ldLmNsaWNrKCk7CisgICAgfV0sCisgICAgXQor
fSk7CisKIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+CkluZGV4OiBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9i
b3dlci5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyLmpzb24JKHJldmlz
aW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlci5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTEgQEAKK3sKKyAgIm5hbWUiOiAidG9kb212Yy1hbmd1bGFyIiwKKyAgInZlcnNpb24i
OiAiMC4wLjAiLAorICAiZGVwZW5kZW5jaWVzIjogeworICAgICJhbmd1bGFyIjogIn4xLjAuNyIs
CisgICAgInRvZG9tdmMtY29tbW9uIjogIn4wLjEuNCIKKyAgfSwKKyAgImRldkRlcGVuZGVuY2ll
cyI6IHsKKyAgICAiYW5ndWxhci1tb2NrcyI6ICJ+MS4wLjUiCisgIH0KK30KSW5kZXg6IFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YW5ndWxhcmpzL2luZGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvaW5kZXgu
aHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2luZGV4Lmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiIg
bmctYXBwPSJ0b2RvbXZjIiBkYXRhLWZyYW1ld29yaz0iYW5ndWxhcmpzIj4KKyAgICA8aGVhZD4K
KyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1D
b21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KKyAgICA8dGl0bGU+QW5ndWxhckpTIOKAoiBU
b2RvTVZDPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImJvd2VyX2Nv
bXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgorICAgIDxzdHlsZT5bbmctY2xvYWtd
IHsgZGlzcGxheTogbm9uZTsgfTwvc3R5bGU+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAg
IDxzZWN0aW9uIGlkPSJ0b2RvYXBwIiBuZy1jb250cm9sbGVyPSJUb2RvQ3RybCI+CisgICAgPGhl
YWRlciBpZD0iaGVhZGVyIj4KKyAgICA8aDE+dG9kb3M8L2gxPgorICAgIDxmb3JtIGlkPSJ0b2Rv
LWZvcm0iIG5nLXN1Ym1pdD0iYWRkVG9kbygpIj4KKyAgICA8aW5wdXQgaWQ9Im5ldy10b2RvIiBw
bGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIgbmctbW9kZWw9Im5ld1RvZG8iIGF1
dG9mb2N1cz4KKyAgICA8L2Zvcm0+CisgICAgPC9oZWFkZXI+CisgICAgPHNlY3Rpb24gaWQ9Im1h
aW4iIG5nLXNob3c9InRvZG9zLmxlbmd0aCIgbmctY2xvYWs+CisgICAgPGlucHV0IGlkPSJ0b2dn
bGUtYWxsIiB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImFsbENoZWNrZWQiIG5nLWNsaWNrPSJt
YXJrQWxsKGFsbENoZWNrZWQpIj4KKyAgICA8bGFiZWwgZm9yPSJ0b2dnbGUtYWxsIj5NYXJrIGFs
bCBhcyBjb21wbGV0ZTwvbGFiZWw+CisgICAgPHVsIGlkPSJ0b2RvLWxpc3QiPgorICAgIDxsaSBu
Zy1yZXBlYXQ9InRvZG8gaW4gdG9kb3MgfCBmaWx0ZXI6c3RhdHVzRmlsdGVyIiBuZy1jbGFzcz0i
e2NvbXBsZXRlZDogdG9kby5jb21wbGV0ZWQsIGVkaXRpbmc6IHRvZG8gPT0gZWRpdGVkVG9kb30i
PgorICAgIDxkaXYgY2xhc3M9InZpZXciPgorICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlIiB0eXBl
PSJjaGVja2JveCIgbmctbW9kZWw9InRvZG8uY29tcGxldGVkIj4KKyAgICA8bGFiZWwgbmctZGJs
Y2xpY2s9ImVkaXRUb2RvKHRvZG8pIj57e3RvZG8udGl0bGV9fTwvbGFiZWw+CisgICAgPGJ1dHRv
biBjbGFzcz0iZGVzdHJveSIgbmctY2xpY2s9InJlbW92ZVRvZG8odG9kbykiPjwvYnV0dG9uPgor
ICAgIDwvZGl2PgorICAgIDxmb3JtIG5nLXN1Ym1pdD0iZG9uZUVkaXRpbmcodG9kbykiPgorICAg
IDxpbnB1dCBjbGFzcz0iZWRpdCIgbmctbW9kZWw9InRvZG8udGl0bGUiIHRvZG8tZXNjYXBlPSJy
ZXZlcnRFZGl0aW5nKHRvZG8pIiB0b2RvLWJsdXI9ImRvbmVFZGl0aW5nKHRvZG8pIiB0b2RvLWZv
Y3VzPSJ0b2RvID09IGVkaXRlZFRvZG8iPgorICAgIDwvZm9ybT4KKyAgICA8L2xpPgorICAgIDwv
dWw+CisgICAgPC9zZWN0aW9uPgorICAgIDxmb290ZXIgaWQ9ImZvb3RlciIgbmctc2hvdz0idG9k
b3MubGVuZ3RoIiBuZy1jbG9haz4KKyAgICA8c3BhbiBpZD0idG9kby1jb3VudCI+PHN0cm9uZz57
e3JlbWFpbmluZ0NvdW50fX08L3N0cm9uZz4KKyAgICA8bmctcGx1cmFsaXplIGNvdW50PSJyZW1h
aW5pbmdDb3VudCIgd2hlbj0ieyBvbmU6ICdpdGVtIGxlZnQnLCBvdGhlcjogJ2l0ZW1zIGxlZnQn
IH0iPjwvbmctcGx1cmFsaXplPgorICAgIDwvc3Bhbj4KKyAgICA8dWwgaWQ9ImZpbHRlcnMiPgor
ICAgIDxsaT4KKyAgICA8YSBuZy1jbGFzcz0ie3NlbGVjdGVkOiBsb2NhdGlvbi5wYXRoKCkgPT0g
Jy8nfSAiIGhyZWY9IiMvIj5BbGw8L2E+CisgICAgPC9saT4KKyAgICA8bGk+CisgICAgPGEgbmct
Y2xhc3M9IntzZWxlY3RlZDogbG9jYXRpb24ucGF0aCgpID09ICcvYWN0aXZlJ30iIGhyZWY9IiMv
YWN0aXZlIj5BY3RpdmU8L2E+CisgICAgPC9saT4KKyAgICA8bGk+CisgICAgPGEgbmctY2xhc3M9
IntzZWxlY3RlZDogbG9jYXRpb24ucGF0aCgpID09ICcvY29tcGxldGVkJ30iIGhyZWY9IiMvY29t
cGxldGVkIj5Db21wbGV0ZWQ8L2E+CisgICAgPC9saT4KKyAgICA8L3VsPgorICAgIDxidXR0b24g
aWQ9ImNsZWFyLWNvbXBsZXRlZCIgbmctY2xpY2s9ImNsZWFyQ29tcGxldGVkVG9kb3MoKSIgbmct
c2hvdz0iY29tcGxldGVkQ291bnQiPkNsZWFyIGNvbXBsZXRlZCAoe3tjb21wbGV0ZWRDb3VudH19
KTwvYnV0dG9uPgorICAgIDwvZm9vdGVyPgorICAgIDwvc2VjdGlvbj4KKyAgICA8Zm9vdGVyIGlk
PSJpbmZvIj4KKyAgICA8cD5Eb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRvZG88L3A+CisgICAgPHA+
Q3JlZGl0czoKKyAgICA8YSBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vY2J1cmdkb3JmIj5DaHJp
c3RvcGggQnVyZ2RvcmY8L2E+LAorICAgIDxhIGhyZWY9Imh0dHA6Ly9lcmljYmlkZWxtYW4uY29t
Ij5FcmljIEJpZGVsbWFuPC9hPiwKKyAgICA8YSBocmVmPSJodHRwOi8vamFjb2JtdW1tLmNvbSI+
SmFjb2IgTXVtbTwvYT4gYW5kCisgICAgPGEgaHJlZj0iaHR0cDovL2lnb3JtaW5hci5jb20iPkln
b3IgTWluYXI8L2E+CisgICAgPC9wPgorICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3Rv
ZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4KKyAgICA8L2Zvb3Rlcj4KKyAgICA8c2NyaXB0IHNy
Yz0iYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iYm93ZXJfY29tcG9uZW50cy9hbmd1bGFyL2FuZ3VsYXIuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJqcy9hcHAuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJqcy9jb250cm9sbGVycy90b2RvQ3RybC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9ImpzL3NlcnZpY2VzL3RvZG9TdG9yYWdlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0ianMvZGlyZWN0aXZlcy90b2RvRm9jdXMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJqcy9kaXJlY3RpdmVzL3RvZG9CbHVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
anMvZGlyZWN0aXZlcy90b2RvRXNjYXBlLmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9yZWFkbWUubWQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9h
bmd1bGFyanMvcmVhZG1lLm1kCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvcmVhZG1l
Lm1kCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKyMgQW5ndWxhckpTIFRvZG9NVkMg
RXhhbXBsZQorCis+IEhUTUwgaXMgZ3JlYXQgZm9yIGRlY2xhcmluZyBzdGF0aWMgZG9jdW1lbnRz
LCBidXQgaXQgZmFsdGVycyB3aGVuIHdlIHRyeSB0byB1c2UgaXQgZm9yIGRlY2xhcmluZyBkeW5h
bWljIHZpZXdzIGluIHdlYi1hcHBsaWNhdGlvbnMuIEFuZ3VsYXJKUyBsZXRzIHlvdSBleHRlbmQg
SFRNTCB2b2NhYnVsYXJ5IGZvciB5b3VyIGFwcGxpY2F0aW9uLiBUaGUgcmVzdWx0aW5nIGVudmly
b25tZW50IGlzIGV4dHJhb3JkaW5hcmlseSBleHByZXNzaXZlLCByZWFkYWJsZSwgYW5kIHF1aWNr
IHRvIGRldmVsb3AuCisKKz4gX1tBbmd1bGFySlMgLSBhbmd1bGFyanMub3JnXShodHRwOi8vYW5n
dWxhcmpzLm9yZylfCisKKworIyMgTGVhcm5pbmcgQW5ndWxhckpTCitUaGUgW0FuZ3VsYXJKUyB3
ZWJzaXRlXShodHRwOi8vYW5ndWxhcmpzLm9yZykgaXMgYSBncmVhdCByZXNvdXJjZSBmb3IgZ2V0
dGluZyBzdGFydGVkLgorCitIZXJlIGFyZSBzb21lIGxpbmtzIHlvdSBtYXkgZmluZCBoZWxwZnVs
OgorCisqIFtUdXRvcmlhbF0oaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy90dXRvcmlhbCkKKyog
W0FQSSBSZWZlcmVuY2VdKGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpKQorKiBbRGV2ZWxv
cGVyIEd1aWRlXShodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlKQorKiBbQXBwbGljYXRp
b25zIGJ1aWx0IHdpdGggQW5ndWxhckpTXShodHRwOi8vYnVpbHR3aXRoLmFuZ3VsYXJqcy5vcmcp
CisqIFtCbG9nXShodHRwOi8vYmxvZy5hbmd1bGFyanMub3JnKQorKiBbRkFRXShodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL21pc2MvZmFxKQorKiBbQW5ndWxhckpTIE1lZXR1cHNdKGh0dHA6Ly93
d3cueW91dHViZS5jb20vYW5ndWxhcmpzKQorCitBcnRpY2xlcyBhbmQgZ3VpZGVzIGZyb20gdGhl
IGNvbW11bml0eToKKworKiBbQ29kZSBTY2hvb2wgQW5ndWxhckpTIGNvdXJzZV0oaHR0cDovL3d3
dy5jb2Rlc2Nob29sLmNvbS9jb2RlX3R2L2FuZ3VsYXJqcy1wYXJ0LTEpCisqIFs1IEF3ZXNvbWUg
QW5ndWxhckpTIEZlYXR1cmVzXShodHRwOi8vbmV0LnR1dHNwbHVzLmNvbS90dXRvcmlhbHMvamF2
YXNjcmlwdC1hamF4LzUtYXdlc29tZS1hbmd1bGFyanMtZmVhdHVyZXMpCisqIFtVc2luZyBZZW9t
YW4gd2l0aCBBbmd1bGFySlNdKGh0dHA6Ly9icmlhbnRmb3JkLmNvbS9ibG9nL2FuZ3VsYXIteWVv
bWFuLmh0bWwpCisqIFttZSZuZ3VsYXIgLSBhbiBpbnRyb2R1Y3Rpb24gdG8gTVZXXShodHRwOi8v
c3RlcGhlbnBsdXNwbHVzLmdpdGh1Yi5pby9tZWFuZ3VsYXIpCisKK0dldCBoZWxwIGZyb20gb3Ro
ZXIgQW5ndWxhckpTIHVzZXJzOgorCisqIFtXYWxrdGhyb3VnaHMgYW5kIFR1dG9yaWFscyBvbiBZ
b3VUdWJlXShodHRwOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEwxdzFxM2ZMNHBt
Z3FwemItWGhHN0NsZ2k2N2RfT0hYeikKKyogW0dvb2dsZSBHcm91cHMgbWFpbGluZyBsaXN0XSho
dHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLz9mcm9tZ3JvdXBzIyFmb3J1bS9hbmd1bGFy
KQorKiBbYW5ndWxhcmpzIG9uIFN0YWNrIE92ZXJmbG93XShodHRwOi8vc3RhY2tvdmVyZmxvdy5j
b20vcXVlc3Rpb25zL3RhZ2dlZC9hbmd1bGFyanMpCisqIFtBbmd1bGFySlMgb24gVHdpdHRlcl0o
aHR0cHM6Ly90d2l0dGVyLmNvbS9hbmd1bGFyanMpCisqIFtBbmd1bGFyalMgb24gR29vZ2xlICtd
KGh0dHBzOi8vcGx1cy5nb29nbGUuY29tLytBbmd1bGFySlMvcG9zdHMpCisKK19JZiB5b3UgaGF2
ZSBvdGhlciBoZWxwZnVsIGxpbmtzIHRvIHNoYXJlLCBvciBmaW5kIGFueSBvZiB0aGUgbGlua3Mg
YWJvdmUgbm8gbG9uZ2VyIHdvcmssIHBsZWFzZSBbbGV0IHVzIGtub3ddKGh0dHBzOi8vZ2l0aHVi
LmNvbS90YXN0ZWpzL3RvZG9tdmMvaXNzdWVzKS5fCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dl
cl9jb21wb25lbnRzL2FuZ3VsYXItbW9ja3MvYW5ndWxhci1tb2Nrcy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2FuZ3VsYXJqcy9ib3dlcl9jb21wb25lbnRzL2FuZ3VsYXItbW9ja3MvYW5ndWxhci1t
b2Nrcy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMv
YW5ndWxhci1tb2Nrcy9hbmd1bGFyLW1vY2tzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTc2NCBAQAorLyoqCisgKiBAbGljZW5zZSBBbmd1bGFySlMgdjEuMC40CisgKiAoYykgMjAxMC0y
MDEyIEdvb2dsZSwgSW5jLiBodHRwOi8vYW5ndWxhcmpzLm9yZworICogTGljZW5zZTogTUlUCisg
KgorICogVE9ETyh2b2p0YSk6IHdyYXAgd2hvbGUgZmlsZSBpbnRvIGNsb3N1cmUgZHVyaW5nIGJ1
aWxkCisgKi8KKworLyoqCisgKiBAbmdkb2Mgb3ZlcnZpZXcKKyAqIEBuYW1lIGFuZ3VsYXIubW9j
aworICogQGRlc2NyaXB0aW9uCisgKgorICogTmFtZXNwYWNlIGZyb20gJ2FuZ3VsYXItbW9ja3Mu
anMnIHdoaWNoIGNvbnRhaW5zIHRlc3RpbmcgcmVsYXRlZCBjb2RlLgorICovCithbmd1bGFyLm1v
Y2sgPSB7fTsKKworLyoqCisgKiAhIFRoaXMgaXMgYSBwcml2YXRlIHVuZG9jdW1lbnRlZCBzZXJ2
aWNlICEKKyAqCisgKiBAbmFtZSBuZ01vY2suJGJyb3dzZXIKKyAqCisgKiBAZGVzY3JpcHRpb24K
KyAqIFRoaXMgc2VydmljZSBpcyBhIG1vY2sgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIG5nLiRi
cm93c2VyfS4gSXQgcHJvdmlkZXMgZmFrZQorICogaW1wbGVtZW50YXRpb24gZm9yIGNvbW1vbmx5
IHVzZWQgYnJvd3NlciBhcGlzIHRoYXQgYXJlIGhhcmQgdG8gdGVzdCwgZS5nLiBzZXRUaW1lb3V0
LCB4aHIsCisgKiBjb29raWVzLCBldGMuLi4KKyAqCisgKiBUaGUgYXBpIG9mIHRoaXMgc2Vydmlj
ZSBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSByZWFsIHtAbGluayBuZy4kYnJvd3NlciAkYnJv
d3Nlcn0sIGV4Y2VwdAorICogdGhhdCB0aGVyZSBhcmUgc2V2ZXJhbCBoZWxwZXIgbWV0aG9kcyBh
dmFpbGFibGUgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGVzdHMuCisgKi8KK2FuZ3VsYXIubW9jay4k
QnJvd3NlclByb3ZpZGVyID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuJGdldCA9IGZ1bmN0aW9uKCl7
CisgICAgcmV0dXJuIG5ldyBhbmd1bGFyLm1vY2suJEJyb3dzZXIoKTsKKyAgfTsKK307CisKK2Fu
Z3VsYXIubW9jay4kQnJvd3NlciA9IGZ1bmN0aW9uKCkgeworICB2YXIgc2VsZiA9IHRoaXM7CisK
KyAgdGhpcy5pc01vY2sgPSB0cnVlOworICBzZWxmLiQkdXJsID0gImh0dHA6Ly9zZXJ2ZXIvIjsK
KyAgc2VsZi4kJGxhc3RVcmwgPSBzZWxmLiQkdXJsOyAvLyB1c2VkIGJ5IHVybCBwb2xsaW5nIGZu
CisgIHNlbGYucG9sbEZucyA9IFtdOworCisgIC8vIFRPRE8odm9qdGEpOiByZW1vdmUgdGhpcyB0
ZW1wb3JhcnkgYXBpCisgIHNlbGYuJCRjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdCA9IGFuZ3Vs
YXIubm9vcDsKKyAgc2VsZi4kJGluY091dHN0YW5kaW5nUmVxdWVzdENvdW50ID0gYW5ndWxhci5u
b29wOworCisKKyAgLy8gcmVnaXN0ZXIgdXJsIHBvbGxpbmcgZm4KKworICBzZWxmLm9uVXJsQ2hh
bmdlID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICBzZWxmLnBvbGxGbnMucHVzaCgKKyAgICAg
IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoc2VsZi4kJGxhc3RVcmwgIT0gc2VsZi4kJHVybCkg
eworICAgICAgICAgIHNlbGYuJCRsYXN0VXJsID0gc2VsZi4kJHVybDsKKyAgICAgICAgICBsaXN0
ZW5lcihzZWxmLiQkdXJsKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICk7CisKKyAgICByZXR1
cm4gbGlzdGVuZXI7CisgIH07CisKKyAgc2VsZi5jb29raWVIYXNoID0ge307CisgIHNlbGYubGFz
dENvb2tpZUhhc2ggPSB7fTsKKyAgc2VsZi5kZWZlcnJlZEZucyA9IFtdOworICBzZWxmLmRlZmVy
cmVkTmV4dElkID0gMDsKKworICBzZWxmLmRlZmVyID0gZnVuY3Rpb24oZm4sIGRlbGF5KSB7Cisg
ICAgZGVsYXkgPSBkZWxheSB8fCAwOworICAgIHNlbGYuZGVmZXJyZWRGbnMucHVzaCh7dGltZToo
c2VsZi5kZWZlci5ub3cgKyBkZWxheSksIGZuOmZuLCBpZDogc2VsZi5kZWZlcnJlZE5leHRJZH0p
OworICAgIHNlbGYuZGVmZXJyZWRGbnMuc29ydChmdW5jdGlvbihhLGIpeyByZXR1cm4gYS50aW1l
IC0gYi50aW1lO30pOworICAgIHJldHVybiBzZWxmLmRlZmVycmVkTmV4dElkKys7CisgIH07CisK
KworICBzZWxmLmRlZmVyLm5vdyA9IDA7CisKKworICBzZWxmLmRlZmVyLmNhbmNlbCA9IGZ1bmN0
aW9uKGRlZmVySWQpIHsKKyAgICB2YXIgZm5JbmRleDsKKworICAgIGFuZ3VsYXIuZm9yRWFjaChz
ZWxmLmRlZmVycmVkRm5zLCBmdW5jdGlvbihmbiwgaW5kZXgpIHsKKyAgICAgIGlmIChmbi5pZCA9
PT0gZGVmZXJJZCkgZm5JbmRleCA9IGluZGV4OworICAgIH0pOworCisgICAgaWYgKGZuSW5kZXgg
IT09IHVuZGVmaW5lZCkgeworICAgICAgc2VsZi5kZWZlcnJlZEZucy5zcGxpY2UoZm5JbmRleCwg
MSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH07
CisKKworICAvKioKKyAgICogQG5hbWUgbmdNb2NrLiRicm93c2VyI2RlZmVyLmZsdXNoCisgICAq
IEBtZXRob2RPZiBuZ01vY2suJGJyb3dzZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAq
IEZsdXNoZXMgYWxsIHBlbmRpbmcgcmVxdWVzdHMgYW5kIGV4ZWN1dGVzIHRoZSBkZWZlciBjYWxs
YmFja3MuCisgICAqCisgICAqIEBwYXJhbSB7bnVtYmVyPX0gbnVtYmVyIG9mIG1pbGxpc2Vjb25k
cyB0byBmbHVzaC4gU2VlIHtAbGluayAjZGVmZXIubm93fQorICAgKi8KKyAgc2VsZi5kZWZlci5m
bHVzaCA9IGZ1bmN0aW9uKGRlbGF5KSB7CisgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGRlbGF5
KSkgeworICAgICAgc2VsZi5kZWZlci5ub3cgKz0gZGVsYXk7CisgICAgfSBlbHNlIHsKKyAgICAg
IGlmIChzZWxmLmRlZmVycmVkRm5zLmxlbmd0aCkgeworICAgICAgICBzZWxmLmRlZmVyLm5vdyA9
IHNlbGYuZGVmZXJyZWRGbnNbc2VsZi5kZWZlcnJlZEZucy5sZW5ndGgtMV0udGltZTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHRocm93IEVycm9yKCdObyBkZWZlcnJlZCB0YXNrcyB0byBiZSBm
bHVzaGVkJyk7CisgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKHNlbGYuZGVmZXJyZWRGbnMu
bGVuZ3RoICYmIHNlbGYuZGVmZXJyZWRGbnNbMF0udGltZSA8PSBzZWxmLmRlZmVyLm5vdykgewor
ICAgICAgc2VsZi5kZWZlcnJlZEZucy5zaGlmdCgpLmZuKCk7CisgICAgfQorICB9OworICAvKioK
KyAgICogQG5hbWUgbmdNb2NrLiRicm93c2VyI2RlZmVyLm5vdworICAgKiBAcHJvcGVydHlPZiBu
Z01vY2suJGJyb3dzZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEN1cnJlbnQgbWls
bGlzZWNvbmRzIG1vY2sgdGltZS4KKyAgICovCisKKyAgc2VsZi4kJGJhc2VIcmVmID0gJyc7Cisg
IHNlbGYuYmFzZUhyZWYgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy4kJGJhc2VIcmVm
OworICB9OworfTsKK2FuZ3VsYXIubW9jay4kQnJvd3Nlci5wcm90b3R5cGUgPSB7CisKKy8qKgor
ICAqIEBuYW1lIG5nTW9jay4kYnJvd3NlciNwb2xsCisgICogQG1ldGhvZE9mIG5nTW9jay4kYnJv
d3NlcgorICAqCisgICogQGRlc2NyaXB0aW9uCisgICogcnVuIGFsbCBmbnMgaW4gcG9sbEZucwor
ICAqLworICBwb2xsOiBmdW5jdGlvbiBwb2xsKCkgeworICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlz
LnBvbGxGbnMsIGZ1bmN0aW9uKHBvbGxGbil7CisgICAgICBwb2xsRm4oKTsKKyAgICB9KTsKKyAg
fSwKKworICBhZGRQb2xsRm46IGZ1bmN0aW9uKHBvbGxGbikgeworICAgIHRoaXMucG9sbEZucy5w
dXNoKHBvbGxGbik7CisgICAgcmV0dXJuIHBvbGxGbjsKKyAgfSwKKworICB1cmw6IGZ1bmN0aW9u
KHVybCwgcmVwbGFjZSkgeworICAgIGlmICh1cmwpIHsKKyAgICAgIHRoaXMuJCR1cmwgPSB1cmw7
CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpcy4kJHVybDsKKyAg
fSwKKworICBjb29raWVzOiAgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKKyAgICBpZiAobmFtZSkg
eworICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgeworICAgICAgICBkZWxldGUgdGhpcy5j
b29raWVIYXNoW25hbWVdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGFuZ3VsYXIuaXNT
dHJpbmcodmFsdWUpICYmICAgICAgIC8vc3RyaW5ncyBvbmx5CisgICAgICAgICAgICB2YWx1ZS5s
ZW5ndGggPD0gNDA5NikgeyAgICAgICAgICAvL3N0cmljdCBjb29raWUgc3RvcmFnZSBsaW1pdHMK
KyAgICAgICAgICB0aGlzLmNvb2tpZUhhc2hbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiAoIWFuZ3VsYXIuZXF1YWxzKHRoaXMuY29va2ll
SGFzaCwgdGhpcy5sYXN0Q29va2llSGFzaCkpIHsKKyAgICAgICAgdGhpcy5sYXN0Q29va2llSGFz
aCA9IGFuZ3VsYXIuY29weSh0aGlzLmNvb2tpZUhhc2gpOworICAgICAgICB0aGlzLmNvb2tpZUhh
c2ggPSBhbmd1bGFyLmNvcHkodGhpcy5jb29raWVIYXNoKTsKKyAgICAgIH0KKyAgICAgIHJldHVy
biB0aGlzLmNvb2tpZUhhc2g7CisgICAgfQorICB9LAorCisgIG5vdGlmeVdoZW5Ob091dHN0YW5k
aW5nUmVxdWVzdHM6IGZ1bmN0aW9uKGZuKSB7CisgICAgZm4oKTsKKyAgfQorfTsKKworCisvKioK
KyAqIEBuZ2RvYyBvYmplY3QKKyAqIEBuYW1lIG5nTW9jay4kZXhjZXB0aW9uSGFuZGxlclByb3Zp
ZGVyCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBDb25maWd1cmVzIHRoZSBtb2NrIGltcGxlbWVu
dGF0aW9uIG9mIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlcn0gdG8gcmV0aHJvdyBvciB0byBs
b2cgZXJyb3JzIHBhc3NlZAorICogaW50byB0aGUgYCRleGNlcHRpb25IYW5kbGVyYC4KKyAqLwor
CisvKioKKyAqIEBuZ2RvYyBvYmplY3QKKyAqIEBuYW1lIG5nTW9jay4kZXhjZXB0aW9uSGFuZGxl
cgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsg
bmcuJGV4Y2VwdGlvbkhhbmRsZXJ9IHRoYXQgcmV0aHJvd3Mgb3IgbG9ncyBlcnJvcnMgcGFzc2Vk
CisgKiBpbnRvIGl0LiBTZWUge0BsaW5rIG5nTW9jay4kZXhjZXB0aW9uSGFuZGxlclByb3ZpZGVy
ICRleGNlcHRpb25IYW5kbGVyUHJvdmlkZXJ9IGZvciBjb25maWd1cmF0aW9uCisgKiBpbmZvcm1h
dGlvbi4KKyAqCisgKgorICogPHByZT4KKyAqICAgZGVzY3JpYmUoJyRleGNlcHRpb25IYW5kbGVy
UHJvdmlkZXInLCBmdW5jdGlvbigpIHsKKyAqCisgKiAgICAgaXQoJ3Nob3VsZCBjYXB0dXJlIGxv
ZyBtZXNzYWdlcyBhbmQgZXhjZXB0aW9ucycsIGZ1bmN0aW9uKCkgeworICoKKyAqICAgICAgIG1v
ZHVsZShmdW5jdGlvbigkZXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyKSB7CisgKiAgICAgICAgICRl
eGNlcHRpb25IYW5kbGVyUHJvdmlkZXIubW9kZSgnbG9nJyk7CisgKiAgICAgICB9KTsKKyAqCisg
KiAgICAgICBpbmplY3QoZnVuY3Rpb24oJGxvZywgJGV4Y2VwdGlvbkhhbmRsZXIsICR0aW1lb3V0
KSB7CisgKiAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uKCkgeyAkbG9nLmxvZygxKTsgfSk7Cisg
KiAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uKCkgeyAkbG9nLmxvZygyKTsgdGhyb3cgJ2JhbmFu
YSBwZWVsJzsgfSk7CisgKiAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uKCkgeyAkbG9nLmxvZygz
KTsgfSk7CisgKiAgICAgICAgIGV4cGVjdCgkZXhjZXB0aW9uSGFuZGxlci5lcnJvcnMpLnRvRXF1
YWwoW10pOworICogICAgICAgICBleHBlY3QoJGxvZy5hc3NlcnRFbXB0eSgpKTsKKyAqICAgICAg
ICAgJHRpbWVvdXQuZmx1c2goKTsKKyAqICAgICAgICAgZXhwZWN0KCRleGNlcHRpb25IYW5kbGVy
LmVycm9ycykudG9FcXVhbChbJ2JhbmFuYSBwZWVsJ10pOworICogICAgICAgICBleHBlY3QoJGxv
Zy5sb2cubG9ncykudG9FcXVhbChbWzFdLCBbMl0sIFszXV0pOworICogICAgICAgfSk7CisgKiAg
ICAgfSk7CisgKiAgIH0pOworICogPC9wcmU+CisgKi8KKworYW5ndWxhci5tb2NrLiRFeGNlcHRp
b25IYW5kbGVyUHJvdmlkZXIgPSBmdW5jdGlvbigpIHsKKyAgdmFyIGhhbmRsZXI7CisKKyAgLyoq
CisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgbmdNb2NrLiRleGNlcHRpb25IYW5kbGVy
UHJvdmlkZXIjbW9kZQorICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRleGNlcHRpb25IYW5kbGVyUHJv
dmlkZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFNldHMgdGhlIGxvZ2dpbmcgbW9k
ZS4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgTW9kZSBvZiBvcGVyYXRpb24sIGRl
ZmF1bHRzIHRvIGByZXRocm93YC4KKyAgICoKKyAgICogICAtIGByZXRocm93YDogSWYgYW55IGVy
cm9ycyBhcmUgYXJlIHBhc3NlZCBpbnRvIHRoZSBoYW5kbGVyIGluIHRlc3RzLCBpdCB0eXBpY2Fs
bHkKKyAgICogICAgICAgICAgICAgICAgbWVhbnMgdGhhdCB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUg
YXBwbGljYXRpb24gb3IgdGVzdCwgc28gdGhpcyBtb2NrIHdpbGwKKyAgICogICAgICAgICAgICAg
ICAgbWFrZSB0aGVzZSB0ZXN0cyBmYWlsLgorICAgKiAgIC0gYGxvZ2A6IFNvbWV0aW1lcyBpdCBp
cyBkZXNpcmFibGUgdG8gdGVzdCB0aGF0IGFuIGVycm9yIGlzIHRocm93LCBmb3IgdGhpcyBjYXNl
IHRoZSBgbG9nYCBtb2RlIHN0b3JlcyBhbgorICAgKiAgICAgICAgICAgIGFycmF5IG9mIGVycm9y
cyBpbiBgJGV4Y2VwdGlvbkhhbmRsZXIuZXJyb3JzYCwgdG8gYWxsb3cgbGF0ZXIgYXNzZXJ0aW9u
IG9mIHRoZW0uCisgICAqICAgICAgICAgICAgU2VlIHtAbGluayBuZ01vY2suJGxvZyNhc3NlcnRF
bXB0eSBhc3NlcnRFbXB0eSgpfSBhbmQKKyAgICogICAgICAgICAgICAge0BsaW5rIG5nTW9jay4k
bG9nI3Jlc2V0IHJlc2V0KCl9CisgICAqLworICB0aGlzLm1vZGUgPSBmdW5jdGlvbihtb2RlKSB7
CisgICAgc3dpdGNoKG1vZGUpIHsKKyAgICAgIGNhc2UgJ3JldGhyb3cnOgorICAgICAgICBoYW5k
bGVyID0gZnVuY3Rpb24oZSkgeworICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH07CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSAnbG9nJzoKKyAgICAgICAgdmFyIGVycm9ycyA9IFtdOwor
CisgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgaWYgKGFyZ3VtZW50
cy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgZXJyb3JzLnB1c2goZSk7CisgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGVycm9ycy5wdXNoKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRz
LCAwKSk7CisgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGhhbmRsZXIuZXJyb3Jz
ID0gZXJyb3JzOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHRocm93
IEVycm9yKCJVbmtub3duIG1vZGUgJyIgKyBtb2RlICsgIicsIG9ubHkgJ2xvZycvJ3JldGhyb3cn
IG1vZGVzIGFyZSBhbGxvd2VkISIpOworICAgIH0KKyAgfTsKKworICB0aGlzLiRnZXQgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gaGFuZGxlcjsKKyAgfTsKKworICB0aGlzLm1vZGUoJ3JldGhy
b3cnKTsKK307CisKKworLyoqCisgKiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUgbmdNb2NrLiRs
b2cKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIE1vY2sgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5r
IG5nLiRsb2d9IHRoYXQgZ2F0aGVycyBhbGwgbG9nZ2VkIG1lc3NhZ2VzIGluIGFycmF5cworICog
KG9uZSBhcnJheSBwZXIgbG9nZ2luZyBsZXZlbCkuIFRoZXNlIGFycmF5cyBhcmUgZXhwb3NlZCBh
cyBgbG9nc2AgcHJvcGVydHkgb2YgZWFjaCBvZiB0aGUKKyAqIGxldmVsLXNwZWNpZmljIGxvZyBm
dW5jdGlvbiwgZS5nLiBmb3IgbGV2ZWwgYGVycm9yYCB0aGUgYXJyYXkgaXMgZXhwb3NlZCBhcyBg
JGxvZy5lcnJvci5sb2dzYC4KKyAqCisgKi8KK2FuZ3VsYXIubW9jay4kTG9nUHJvdmlkZXIgPSBm
dW5jdGlvbigpIHsKKworICBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBhcnJheTIsIGluZGV4KSB7
CisgICAgcmV0dXJuIGFycmF5MS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJy
YXkyLCBpbmRleCkpOworICB9CisKKworICB0aGlzLiRnZXQgPSBmdW5jdGlvbiAoKSB7CisgICAg
dmFyICRsb2cgPSB7CisgICAgICBsb2c6IGZ1bmN0aW9uKCkgeyAkbG9nLmxvZy5sb2dzLnB1c2go
Y29uY2F0KFtdLCBhcmd1bWVudHMsIDApKTsgfSwKKyAgICAgIHdhcm46IGZ1bmN0aW9uKCkgeyAk
bG9nLndhcm4ubG9ncy5wdXNoKGNvbmNhdChbXSwgYXJndW1lbnRzLCAwKSk7IH0sCisgICAgICBp
bmZvOiBmdW5jdGlvbigpIHsgJGxvZy5pbmZvLmxvZ3MucHVzaChjb25jYXQoW10sIGFyZ3VtZW50
cywgMCkpOyB9LAorICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgeyAkbG9nLmVycm9yLmxvZ3MucHVz
aChjb25jYXQoW10sIGFyZ3VtZW50cywgMCkpOyB9CisgICAgfTsKKworICAgIC8qKgorICAgICAq
IEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSBuZ01vY2suJGxvZyNyZXNldAorICAgICAqIEBt
ZXRob2RPZiBuZ01vY2suJGxvZworICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICog
UmVzZXQgYWxsIG9mIHRoZSBsb2dnaW5nIGFycmF5cyB0byBlbXB0eS4KKyAgICAgKi8KKyAgICAk
bG9nLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgcHJv
cGVydHkKKyAgICAgICAqIEBuYW1lIG5nTW9jay4kbG9nI2xvZy5sb2dzCisgICAgICAgKiBAcHJv
cGVydHlPZiBuZ01vY2suJGxvZworICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAg
ICAgICogQXJyYXkgb2YgbG9nZ2VkIG1lc3NhZ2VzLgorICAgICAgICovCisgICAgICAkbG9nLmxv
Zy5sb2dzID0gW107CisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eQorICAgICAg
ICogQG5hbWUgbmdNb2NrLiRsb2cjd2Fybi5sb2dzCisgICAgICAgKiBAcHJvcGVydHlPZiBuZ01v
Y2suJGxvZworICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICogQXJyYXkg
b2YgbG9nZ2VkIG1lc3NhZ2VzLgorICAgICAgICovCisgICAgICAkbG9nLndhcm4ubG9ncyA9IFtd
OworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgcHJvcGVydHkKKyAgICAgICAqIEBuYW1lIG5n
TW9jay4kbG9nI2luZm8ubG9ncworICAgICAgICogQHByb3BlcnR5T2YgbmdNb2NrLiRsb2cKKyAg
ICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIEFycmF5IG9mIGxvZ2dlZCBt
ZXNzYWdlcy4KKyAgICAgICAqLworICAgICAgJGxvZy5pbmZvLmxvZ3MgPSBbXTsKKyAgICAgIC8q
KgorICAgICAgICogQG5nZG9jIHByb3BlcnR5CisgICAgICAgKiBAbmFtZSBuZ01vY2suJGxvZyNl
cnJvci5sb2dzCisgICAgICAgKiBAcHJvcGVydHlPZiBuZ01vY2suJGxvZworICAgICAgICoKKyAg
ICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICogQXJyYXkgb2YgbG9nZ2VkIG1lc3NhZ2VzLgor
ICAgICAgICovCisgICAgICAkbG9nLmVycm9yLmxvZ3MgPSBbXTsKKyAgICB9OworCisgICAgLyoq
CisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lIG5nTW9jay4kbG9nI2Fzc2VydEVt
cHR5CisgICAgICogQG1ldGhvZE9mIG5nTW9jay4kbG9nCisgICAgICoKKyAgICAgKiBAZGVzY3Jp
cHRpb24KKyAgICAgKiBBc3NlcnQgdGhhdCB0aGUgYWxsIG9mIHRoZSBsb2dnaW5nIG1ldGhvZHMg
aGF2ZSBubyBsb2dnZWQgbWVzc2FnZXMuIElmIG1lc3NhZ2VzIHByZXNlbnQsIGFuIGV4Y2VwdGlv
biBpcyB0aHJvd24uCisgICAgICovCisgICAgJGxvZy5hc3NlcnRFbXB0eSA9IGZ1bmN0aW9uKCkg
eworICAgICAgdmFyIGVycm9ycyA9IFtdOworICAgICAgYW5ndWxhci5mb3JFYWNoKFsnZXJyb3In
LCAnd2FybicsICdpbmZvJywgJ2xvZyddLCBmdW5jdGlvbihsb2dMZXZlbCkgeworICAgICAgICBh
bmd1bGFyLmZvckVhY2goJGxvZ1tsb2dMZXZlbF0ubG9ncywgZnVuY3Rpb24obG9nKSB7CisgICAg
ICAgICAgYW5ndWxhci5mb3JFYWNoKGxvZywgZnVuY3Rpb24gKGxvZ0l0ZW0pIHsKKyAgICAgICAg
ICAgIGVycm9ycy5wdXNoKCdNT0NLICRsb2cgKCcgKyBsb2dMZXZlbCArICcpOiAnICsgU3RyaW5n
KGxvZ0l0ZW0pICsgJ1xuJyArIChsb2dJdGVtLnN0YWNrIHx8ICcnKSk7CisgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgeworICAg
ICAgICBlcnJvcnMudW5zaGlmdCgiRXhwZWN0ZWQgJGxvZyB0byBiZSBlbXB0eSEgRWl0aGVyIGEg
bWVzc2FnZSB3YXMgbG9nZ2VkIHVuZXhwZWN0ZWRseSwgb3IgYW4gZXhwZWN0ZWQgIiArCisgICAg
ICAgICAgImxvZyBtZXNzYWdlIHdhcyBub3QgY2hlY2tlZCBhbmQgcmVtb3ZlZDoiKTsKKyAgICAg
ICAgZXJyb3JzLnB1c2goJycpOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JzLmpvaW4o
J1xuLS0tLS0tLS0tXG4nKSk7CisgICAgICB9CisgICAgfTsKKworICAgICRsb2cucmVzZXQoKTsK
KyAgICByZXR1cm4gJGxvZzsKKyAgfTsKK307CisKKworKGZ1bmN0aW9uKCkgeworICB2YXIgUl9J
U084MDYxX1NUUiA9IC9eKFxkezR9KS0/KFxkXGQpLT8oXGRcZCkoPzpUKFxkXGQpKD86XDo/KFxk
XGQpKD86XDo/KFxkXGQpKD86XC4oXGR7M30pKT8pPyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkp
KT8kLzsKKworICBmdW5jdGlvbiBqc29uU3RyaW5nVG9EYXRlKHN0cmluZyl7CisgICAgdmFyIG1h
dGNoOworICAgIGlmIChtYXRjaCA9IHN0cmluZy5tYXRjaChSX0lTTzgwNjFfU1RSKSkgeworICAg
ICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgwKSwKKyAgICAgICAgICB0ekhvdXIgPSAwLAorICAgICAg
ICAgIHR6TWluICA9IDA7CisgICAgICBpZiAobWF0Y2hbOV0pIHsKKyAgICAgICAgdHpIb3VyID0g
aW50KG1hdGNoWzldICsgbWF0Y2hbMTBdKTsKKyAgICAgICAgdHpNaW4gPSBpbnQobWF0Y2hbOV0g
KyBtYXRjaFsxMV0pOworICAgICAgfQorICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcihpbnQobWF0
Y2hbMV0pLCBpbnQobWF0Y2hbMl0pIC0gMSwgaW50KG1hdGNoWzNdKSk7CisgICAgICBkYXRlLnNl
dFVUQ0hvdXJzKGludChtYXRjaFs0XXx8MCkgLSB0ekhvdXIsIGludChtYXRjaFs1XXx8MCkgLSB0
ek1pbiwgaW50KG1hdGNoWzZdfHwwKSwgaW50KG1hdGNoWzddfHwwKSk7CisgICAgICByZXR1cm4g
ZGF0ZTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZzsKKyAgfQorCisgIGZ1bmN0aW9uIGludChz
dHIpIHsKKyAgICByZXR1cm4gcGFyc2VJbnQoc3RyLCAxMCk7CisgIH0KKworICBmdW5jdGlvbiBw
YWROdW1iZXIobnVtLCBkaWdpdHMsIHRyaW0pIHsKKyAgICB2YXIgbmVnID0gJyc7CisgICAgaWYg
KG51bSA8IDApIHsKKyAgICAgIG5lZyA9ICAnLSc7CisgICAgICBudW0gPSAtbnVtOworICAgIH0K
KyAgICBudW0gPSAnJyArIG51bTsKKyAgICB3aGlsZShudW0ubGVuZ3RoIDwgZGlnaXRzKSBudW0g
PSAnMCcgKyBudW07CisgICAgaWYgKHRyaW0pCisgICAgICBudW0gPSBudW0uc3Vic3RyKG51bS5s
ZW5ndGggLSBkaWdpdHMpOworICAgIHJldHVybiBuZWcgKyBudW07CisgIH0KKworCisgIC8qKgor
ICAgKiBAbmdkb2Mgb2JqZWN0CisgICAqIEBuYW1lIGFuZ3VsYXIubW9jay5UekRhdGUKKyAgICog
QGRlc2NyaXB0aW9uCisgICAqCisgICAqICpOT1RFKjogdGhpcyBpcyBub3QgYW4gaW5qZWN0YWJs
ZSBpbnN0YW5jZSwganVzdCBhIGdsb2JhbGx5IGF2YWlsYWJsZSBtb2NrIGNsYXNzIG9mIGBEYXRl
YC4KKyAgICoKKyAgICogTW9jayBvZiB0aGUgRGF0ZSB0eXBlIHdoaWNoIGhhcyBpdHMgdGltZXpv
bmUgc3BlY2lmaWVkIHZpYSBjb25zdHJvY3RvciBhcmcuCisgICAqCisgICAqIFRoZSBtYWluIHB1
cnBvc2UgaXMgdG8gY3JlYXRlIERhdGUtbGlrZSBpbnN0YW5jZXMgd2l0aCB0aW1lem9uZSBmaXhl
ZCB0byB0aGUgc3BlY2lmaWVkIHRpbWV6b25lCisgICAqIG9mZnNldCwgc28gdGhhdCB3ZSBjYW4g
dGVzdCBjb2RlIHRoYXQgZGVwZW5kcyBvbiBsb2NhbCB0aW1lem9uZSBzZXR0aW5ncyB3aXRob3V0
IGRlcGVuZGVuY3kgb24KKyAgICogdGhlIHRpbWUgem9uZSBzZXR0aW5ncyBvZiB0aGUgbWFjaGlu
ZSB3aGVyZSB0aGUgY29kZSBpcyBydW5uaW5nLgorICAgKgorICAgKiBAcGFyYW0ge251bWJlcn0g
b2Zmc2V0IE9mZnNldCBvZiB0aGUgKmRlc2lyZWQqIHRpbWV6b25lIGluIGhvdXJzIChmcmFjdGlv
bnMgd2lsbCBiZSBob25vcmVkKQorICAgKiBAcGFyYW0geyhudW1iZXJ8c3RyaW5nKX0gdGltZXN0
YW1wIFRpbWVzdGFtcCByZXByZXNlbnRpbmcgdGhlIGRlc2lyZWQgdGltZSBpbiAqVVRDKgorICAg
KgorICAgKiBAZXhhbXBsZQorICAgKiAhISEhIFdBUk5JTkcgISEhISEKKyAgICogVGhpcyBpcyBu
b3QgYSBjb21wbGV0ZSBEYXRlIG9iamVjdCBzbyBvbmx5IG1ldGhvZHMgdGhhdCB3ZXJlIGltcGxl
bWVudGVkIGNhbiBiZSBjYWxsZWQgc2FmZWx5LgorICAgKiBUbyBtYWtlIG1hdHRlcnMgd29yc2Us
IFR6RGF0ZSBpbnN0YW5jZXMgaW5oZXJpdCBzdHVmZiBmcm9tIERhdGUgdmlhIGEgcHJvdG90eXBl
LgorICAgKgorICAgKiBXZSBkbyBvdXIgYmVzdCB0byBpbnRlcmNlcHQgY2FsbHMgdG8gInVuaW1w
bGVtZW50ZWQiIG1ldGhvZHMsIGJ1dCBzaW5jZSB0aGUgbGlzdCBvZiBtZXRob2RzIGlzCisgICAq
IGluY29tcGxldGUgd2UgbWlnaHQgYmUgbWlzc2luZyBzb21lIG5vbi1zdGFuZGFyZCBtZXRob2Rz
LiBUaGlzIGNhbiByZXN1bHQgaW4gZXJyb3JzIGxpa2U6CisgICAqICJEYXRlLnByb3RvdHlwZS5m
b28gY2FsbGVkIG9uIGluY29tcGF0aWJsZSBPYmplY3QiLgorICAgKgorICAgKiA8cHJlPgorICAg
KiB2YXIgbmV3WWVhckluQnJhdGlzbGF2YSA9IG5ldyBUekRhdGUoLTEsICcyMDA5LTEyLTMxVDIz
OjAwOjAwWicpOworICAgKiBuZXdZZWFySW5CcmF0aXNsYXZhLmdldFRpbWV6b25lT2Zmc2V0KCkg
PT4gLTYwOworICAgKiBuZXdZZWFySW5CcmF0aXNsYXZhLmdldEZ1bGxZZWFyKCkgPT4gMjAxMDsK
KyAgICogbmV3WWVhckluQnJhdGlzbGF2YS5nZXRNb250aCgpID0+IDA7CisgICAqIG5ld1llYXJJ
bkJyYXRpc2xhdmEuZ2V0RGF0ZSgpID0+IDE7CisgICAqIG5ld1llYXJJbkJyYXRpc2xhdmEuZ2V0
SG91cnMoKSA9PiAwOworICAgKiBuZXdZZWFySW5CcmF0aXNsYXZhLmdldE1pbnV0ZXMoKSA9PiAw
OworICAgKiA8L3ByZT4KKyAgICoKKyAgICovCisgIGFuZ3VsYXIubW9jay5UekRhdGUgPSBmdW5j
dGlvbiAob2Zmc2V0LCB0aW1lc3RhbXApIHsKKyAgICB2YXIgc2VsZiA9IG5ldyBEYXRlKDApOwor
ICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHRpbWVzdGFtcCkpIHsKKyAgICAgIHZhciB0c1N0ciA9
IHRpbWVzdGFtcDsKKworICAgICAgc2VsZi5vcmlnRGF0ZSA9IGpzb25TdHJpbmdUb0RhdGUodGlt
ZXN0YW1wKTsKKworICAgICAgdGltZXN0YW1wID0gc2VsZi5vcmlnRGF0ZS5nZXRUaW1lKCk7Cisg
ICAgICBpZiAoaXNOYU4odGltZXN0YW1wKSkKKyAgICAgICAgdGhyb3cgeworICAgICAgICAgIG5h
bWU6ICJJbGxlZ2FsIEFyZ3VtZW50IiwKKyAgICAgICAgICBtZXNzYWdlOiAiQXJnICciICsgdHNT
dHIgKyAiJyBwYXNzZWQgaW50byBUekRhdGUgY29uc3RydWN0b3IgaXMgbm90IGEgdmFsaWQgZGF0
ZSBzdHJpbmciCisgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgIHNlbGYub3JpZ0RhdGUg
PSBuZXcgRGF0ZSh0aW1lc3RhbXApOworICAgIH0KKworICAgIHZhciBsb2NhbE9mZnNldCA9IG5l
dyBEYXRlKHRpbWVzdGFtcCkuZ2V0VGltZXpvbmVPZmZzZXQoKTsKKyAgICBzZWxmLm9mZnNldERp
ZmYgPSBsb2NhbE9mZnNldCo2MCoxMDAwIC0gb2Zmc2V0KjEwMDAqNjAqNjA7CisgICAgc2VsZi5k
YXRlID0gbmV3IERhdGUodGltZXN0YW1wICsgc2VsZi5vZmZzZXREaWZmKTsKKworICAgIHNlbGYu
Z2V0VGltZSA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHNlbGYuZGF0ZS5nZXRUaW1lKCkg
LSBzZWxmLm9mZnNldERpZmY7CisgICAgfTsKKworICAgIHNlbGYudG9Mb2NhbGVEYXRlU3RyaW5n
ID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gc2VsZi5kYXRlLnRvTG9jYWxlRGF0ZVN0cmlu
ZygpOworICAgIH07CisKKyAgICBzZWxmLmdldEZ1bGxZZWFyID0gZnVuY3Rpb24oKSB7CisgICAg
ICByZXR1cm4gc2VsZi5kYXRlLmdldEZ1bGxZZWFyKCk7CisgICAgfTsKKworICAgIHNlbGYuZ2V0
TW9udGggPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBzZWxmLmRhdGUuZ2V0TW9udGgoKTsK
KyAgICB9OworCisgICAgc2VsZi5nZXREYXRlID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4g
c2VsZi5kYXRlLmdldERhdGUoKTsKKyAgICB9OworCisgICAgc2VsZi5nZXRIb3VycyA9IGZ1bmN0
aW9uKCkgeworICAgICAgcmV0dXJuIHNlbGYuZGF0ZS5nZXRIb3VycygpOworICAgIH07CisKKyAg
ICBzZWxmLmdldE1pbnV0ZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBzZWxmLmRhdGUu
Z2V0TWludXRlcygpOworICAgIH07CisKKyAgICBzZWxmLmdldFNlY29uZHMgPSBmdW5jdGlvbigp
IHsKKyAgICAgIHJldHVybiBzZWxmLmRhdGUuZ2V0U2Vjb25kcygpOworICAgIH07CisKKyAgICBz
ZWxmLmdldFRpbWV6b25lT2Zmc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gb2Zmc2V0
ICogNjA7CisgICAgfTsKKworICAgIHNlbGYuZ2V0VVRDRnVsbFllYXIgPSBmdW5jdGlvbigpIHsK
KyAgICAgIHJldHVybiBzZWxmLm9yaWdEYXRlLmdldFVUQ0Z1bGxZZWFyKCk7CisgICAgfTsKKwor
ICAgIHNlbGYuZ2V0VVRDTW9udGggPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBzZWxmLm9y
aWdEYXRlLmdldFVUQ01vbnRoKCk7CisgICAgfTsKKworICAgIHNlbGYuZ2V0VVRDRGF0ZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHNlbGYub3JpZ0RhdGUuZ2V0VVRDRGF0ZSgpOworICAg
IH07CisKKyAgICBzZWxmLmdldFVUQ0hvdXJzID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4g
c2VsZi5vcmlnRGF0ZS5nZXRVVENIb3VycygpOworICAgIH07CisKKyAgICBzZWxmLmdldFVUQ01p
bnV0ZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBzZWxmLm9yaWdEYXRlLmdldFVUQ01p
bnV0ZXMoKTsKKyAgICB9OworCisgICAgc2VsZi5nZXRVVENTZWNvbmRzID0gZnVuY3Rpb24oKSB7
CisgICAgICByZXR1cm4gc2VsZi5vcmlnRGF0ZS5nZXRVVENTZWNvbmRzKCk7CisgICAgfTsKKwor
ICAgIHNlbGYuZ2V0VVRDTWlsbGlzZWNvbmRzID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4g
c2VsZi5vcmlnRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTsKKyAgICB9OworCisgICAgc2VsZi5n
ZXREYXkgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBzZWxmLmRhdGUuZ2V0RGF5KCk7Cisg
ICAgfTsKKworICAgIC8vIHByb3ZpZGUgdGhpcyBtZXRob2Qgb25seSBvbiBicm93c2VycyB0aGF0
IGFscmVhZHkgaGF2ZSBpdAorICAgIGlmIChzZWxmLnRvSVNPU3RyaW5nKSB7CisgICAgICBzZWxm
LnRvSVNPU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBwYWROdW1iZXIoc2Vs
Zi5vcmlnRGF0ZS5nZXRVVENGdWxsWWVhcigpLCA0KSArICctJyArCisgICAgICAgICAgICAgIHBh
ZE51bWJlcihzZWxmLm9yaWdEYXRlLmdldFVUQ01vbnRoKCkgKyAxLCAyKSArICctJyArCisgICAg
ICAgICAgICAgIHBhZE51bWJlcihzZWxmLm9yaWdEYXRlLmdldFVUQ0RhdGUoKSwgMikgKyAnVCcg
KworICAgICAgICAgICAgICBwYWROdW1iZXIoc2VsZi5vcmlnRGF0ZS5nZXRVVENIb3VycygpLCAy
KSArICc6JyArCisgICAgICAgICAgICAgIHBhZE51bWJlcihzZWxmLm9yaWdEYXRlLmdldFVUQ01p
bnV0ZXMoKSwgMikgKyAnOicgKworICAgICAgICAgICAgICBwYWROdW1iZXIoc2VsZi5vcmlnRGF0
ZS5nZXRVVENTZWNvbmRzKCksIDIpICsgJy4nICsKKyAgICAgICAgICAgICAgcGFkTnVtYmVyKHNl
bGYub3JpZ0RhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIDMpICsgJ1onCisgICAgICB9CisgICAg
fQorCisgICAgLy9oaWRlIGFsbCBtZXRob2RzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIG1vY2sg
dGhhdCB0aGUgRGF0ZSBwcm90b3R5cGUgZXhwb3NlcworICAgIHZhciB1bmltcGxlbWVudGVkTWV0
aG9kcyA9IFsnZ2V0TWlsbGlzZWNvbmRzJywgJ2dldFVUQ0RheScsCisgICAgICAgICdnZXRZZWFy
JywgJ3NldERhdGUnLCAnc2V0RnVsbFllYXInLCAnc2V0SG91cnMnLCAnc2V0TWlsbGlzZWNvbmRz
JywKKyAgICAgICAgJ3NldE1pbnV0ZXMnLCAnc2V0TW9udGgnLCAnc2V0U2Vjb25kcycsICdzZXRU
aW1lJywgJ3NldFVUQ0RhdGUnLCAnc2V0VVRDRnVsbFllYXInLAorICAgICAgICAnc2V0VVRDSG91
cnMnLCAnc2V0VVRDTWlsbGlzZWNvbmRzJywgJ3NldFVUQ01pbnV0ZXMnLCAnc2V0VVRDTW9udGgn
LCAnc2V0VVRDU2Vjb25kcycsCisgICAgICAgICdzZXRZZWFyJywgJ3RvRGF0ZVN0cmluZycsICd0
b0dNVFN0cmluZycsICd0b0pTT04nLCAndG9Mb2NhbGVGb3JtYXQnLCAndG9Mb2NhbGVTdHJpbmcn
LAorICAgICAgICAndG9Mb2NhbGVUaW1lU3RyaW5nJywgJ3RvU291cmNlJywgJ3RvU3RyaW5nJywg
J3RvVGltZVN0cmluZycsICd0b1VUQ1N0cmluZycsICd2YWx1ZU9mJ107CisKKyAgICBhbmd1bGFy
LmZvckVhY2godW5pbXBsZW1lbnRlZE1ldGhvZHMsIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsKKyAg
ICAgIHNlbGZbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhyb3cgRXJyb3Io
Ik1ldGhvZCAnIiArIG1ldGhvZE5hbWUgKyAiJyBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIFR6
RGF0ZSBtb2NrIik7CisgICAgICB9OworICAgIH0pOworCisgICAgcmV0dXJuIHNlbGY7CisgIH07
CisKKyAgLy9tYWtlICJ0ekRhdGVJbnN0YW5jZSBpbnN0YW5jZW9mIERhdGUiIHJldHVybiB0cnVl
CisgIGFuZ3VsYXIubW9jay5UekRhdGUucHJvdG90eXBlID0gRGF0ZS5wcm90b3R5cGU7Cit9KSgp
OworCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLm1vY2suZHVt
cAorICogQGRlc2NyaXB0aW9uCisgKgorICogKk5PVEUqOiB0aGlzIGlzIG5vdCBhbiBpbmplY3Rh
YmxlIGluc3RhbmNlLCBqdXN0IGEgZ2xvYmFsbHkgYXZhaWxhYmxlIGZ1bmN0aW9uLgorICoKKyAq
IE1ldGhvZCBmb3Igc2VyaWFsaXppbmcgY29tbW9uIGFuZ3VsYXIgb2JqZWN0cyAoc2NvcGUsIGVs
ZW1lbnRzLCBldGMuLikgaW50byBzdHJpbmdzLCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKyAqCisg
KiBUaGlzIG1ldGhvZCBpcyBhbHNvIGF2YWlsYWJsZSBvbiB3aW5kb3csIHdoZXJlIGl0IGNhbiBi
ZSB1c2VkIHRvIGRpc3BsYXkgb2JqZWN0cyBvbiBkZWJ1ZyBjb25zb2xlLgorICoKKyAqIEBwYXJh
bSB7Kn0gb2JqZWN0IC0gYW55IG9iamVjdCB0byB0dXJuIGludG8gc3RyaW5nLgorICogQHJldHVy
biB7c3RyaW5nfSBhIHNlcmlhbGl6ZWQgc3RyaW5nIG9mIHRoZSBhcmd1bWVudAorICovCithbmd1
bGFyLm1vY2suZHVtcCA9IGZ1bmN0aW9uKG9iamVjdCkgeworICByZXR1cm4gc2VyaWFsaXplKG9i
amVjdCk7CisKKyAgZnVuY3Rpb24gc2VyaWFsaXplKG9iamVjdCkgeworICAgIHZhciBvdXQ7CisK
KyAgICBpZiAoYW5ndWxhci5pc0VsZW1lbnQob2JqZWN0KSkgeworICAgICAgb2JqZWN0ID0gYW5n
dWxhci5lbGVtZW50KG9iamVjdCk7CisgICAgICBvdXQgPSBhbmd1bGFyLmVsZW1lbnQoJzxkaXY+
PC9kaXY+Jyk7CisgICAgICBhbmd1bGFyLmZvckVhY2gob2JqZWN0LCBmdW5jdGlvbihlbGVtZW50
KSB7CisgICAgICAgIG91dC5hcHBlbmQoYW5ndWxhci5lbGVtZW50KGVsZW1lbnQpLmNsb25lKCkp
OworICAgICAgfSk7CisgICAgICBvdXQgPSBvdXQuaHRtbCgpOworICAgIH0gZWxzZSBpZiAoYW5n
dWxhci5pc0FycmF5KG9iamVjdCkpIHsKKyAgICAgIG91dCA9IFtdOworICAgICAgYW5ndWxhci5m
b3JFYWNoKG9iamVjdCwgZnVuY3Rpb24obykgeworICAgICAgICBvdXQucHVzaChzZXJpYWxpemUo
bykpOworICAgICAgfSk7CisgICAgICBvdXQgPSAnWyAnICsgb3V0LmpvaW4oJywgJykgKyAnIF0n
OworICAgIH0gZWxzZSBpZiAoYW5ndWxhci5pc09iamVjdChvYmplY3QpKSB7CisgICAgICBpZiAo
YW5ndWxhci5pc0Z1bmN0aW9uKG9iamVjdC4kZXZhbCkgJiYgYW5ndWxhci5pc0Z1bmN0aW9uKG9i
amVjdC4kYXBwbHkpKSB7CisgICAgICAgIG91dCA9IHNlcmlhbGl6ZVNjb3BlKG9iamVjdCk7Cisg
ICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVycm9yKSB7CisgICAgICAgIG91dCA9
IG9iamVjdC5zdGFjayB8fCAoJycgKyBvYmplY3QubmFtZSArICc6ICcgKyBvYmplY3QubWVzc2Fn
ZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBvdXQgPSBhbmd1bGFyLnRvSnNvbihvYmplY3Qs
IHRydWUpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBvdXQgPSBTdHJpbmcob2JqZWN0
KTsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0OworICB9CisKKyAgZnVuY3Rpb24gc2VyaWFsaXpl
U2NvcGUoc2NvcGUsIG9mZnNldCkgeworICAgIG9mZnNldCA9IG9mZnNldCB8fCAgJyAgJzsKKyAg
ICB2YXIgbG9nID0gW29mZnNldCArICdTY29wZSgnICsgc2NvcGUuJGlkICsgJyk6IHsnXTsKKyAg
ICBmb3IgKCB2YXIga2V5IGluIHNjb3BlICkgeworICAgICAgaWYgKHNjb3BlLmhhc093blByb3Bl
cnR5KGtleSkgJiYgIWtleS5tYXRjaCgvXihcJHx0aGlzKS8pKSB7CisgICAgICAgIGxvZy5wdXNo
KCcgICcgKyBrZXkgKyAnOiAnICsgYW5ndWxhci50b0pzb24oc2NvcGVba2V5XSkpOworICAgICAg
fQorICAgIH0KKyAgICB2YXIgY2hpbGQgPSBzY29wZS4kJGNoaWxkSGVhZDsKKyAgICB3aGlsZShj
aGlsZCkgeworICAgICAgbG9nLnB1c2goc2VyaWFsaXplU2NvcGUoY2hpbGQsIG9mZnNldCArICcg
ICcpKTsKKyAgICAgIGNoaWxkID0gY2hpbGQuJCRuZXh0U2libGluZzsKKyAgICB9CisgICAgbG9n
LnB1c2goJ30nKTsKKyAgICByZXR1cm4gbG9nLmpvaW4oJ1xuJyArIG9mZnNldCk7CisgIH0KK307
CisKKy8qKgorICogQG5nZG9jIG9iamVjdAorICogQG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZAor
ICogQGRlc2NyaXB0aW9uCisgKiBGYWtlIEhUVFAgYmFja2VuZCBpbXBsZW1lbnRhdGlvbiBzdWl0
YWJsZSBmb3IgdW5pdCB0ZXN0aW5nIGFwcGxpY2F0aW9uIHRoYXQgdXNlIHRoZQorICoge0BsaW5r
IG5nLiRodHRwICRodHRwIHNlcnZpY2V9LgorICoKKyAqICpOb3RlKjogRm9yIGZha2UgaHR0cCBi
YWNrZW5kIGltcGxlbWVudGF0aW9uIHN1aXRhYmxlIGZvciBlbmQtdG8tZW5kIHRlc3Rpbmcgb3Ig
YmFja2VuZC1sZXNzCisgKiBkZXZlbG9wbWVudCBwbGVhc2Ugc2VlIHtAbGluayBuZ01vY2tFMkUu
JGh0dHBCYWNrZW5kIGUyZSAkaHR0cEJhY2tlbmQgbW9ja30uCisgKgorICogRHVyaW5nIHVuaXQg
dGVzdGluZywgd2Ugd2FudCBvdXIgdW5pdCB0ZXN0cyB0byBydW4gcXVpY2tseSBhbmQgaGF2ZSBu
byBleHRlcm5hbCBkZXBlbmRlbmNpZXMgc28KKyAqIHdlIGRvbuKAmXQgd2FudCB0byBzZW5kIHtA
bGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi94bWxodHRwcmVxdWVzdCBYSFJ9
IG9yCisgKiB7QGxpbmsgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KU09OUCBKU09OUH0g
cmVxdWVzdHMgdG8gYSByZWFsIHNlcnZlci4gQWxsIHdlIHJlYWxseSBuZWVkIGlzCisgKiB0byB2
ZXJpZnkgd2hldGhlciBhIGNlcnRhaW4gcmVxdWVzdCBoYXMgYmVlbiBzZW50IG9yIG5vdCwgb3Ig
YWx0ZXJuYXRpdmVseSBqdXN0IGxldCB0aGUKKyAqIGFwcGxpY2F0aW9uIG1ha2UgcmVxdWVzdHMs
IHJlc3BvbmQgd2l0aCBwcmUtdHJhaW5lZCByZXNwb25zZXMgYW5kIGFzc2VydCB0aGF0IHRoZSBl
bmQgcmVzdWx0IGlzCisgKiB3aGF0IHdlIGV4cGVjdCBpdCB0byBiZS4KKyAqCisgKiBUaGlzIG1v
Y2sgaW1wbGVtZW50YXRpb24gY2FuIGJlIHVzZWQgdG8gcmVzcG9uZCB3aXRoIHN0YXRpYyBvciBk
eW5hbWljIHJlc3BvbnNlcyB2aWEgdGhlCisgKiBgZXhwZWN0YCBhbmQgYHdoZW5gIGFwaXMgYW5k
IHRoZWlyIHNob3J0Y3V0cyAoYGV4cGVjdEdFVGAsIGB3aGVuUE9TVGAsIGV0YykuCisgKgorICog
V2hlbiBhbiBBbmd1bGFyIGFwcGxpY2F0aW9uIG5lZWRzIHNvbWUgZGF0YSBmcm9tIGEgc2VydmVy
LCBpdCBjYWxscyB0aGUgJGh0dHAgc2VydmljZSwgd2hpY2gKKyAqIHNlbmRzIHRoZSByZXF1ZXN0
IHRvIGEgcmVhbCBzZXJ2ZXIgdXNpbmcgJGh0dHBCYWNrZW5kIHNlcnZpY2UuIFdpdGggZGVwZW5k
ZW5jeSBpbmplY3Rpb24sIGl0IGlzCisgKiBlYXN5IHRvIGluamVjdCAkaHR0cEJhY2tlbmQgbW9j
ayAod2hpY2ggaGFzIHRoZSBzYW1lIEFQSSBhcyAkaHR0cEJhY2tlbmQpIGFuZCB1c2UgaXQgdG8g
dmVyaWZ5CisgKiB0aGUgcmVxdWVzdHMgYW5kIHJlc3BvbmQgd2l0aCBzb21lIHRlc3RpbmcgZGF0
YSB3aXRob3V0IHNlbmRpbmcgYSByZXF1ZXN0IHRvIHJlYWwgc2VydmVyLgorICoKKyAqIFRoZXJl
IGFyZSB0d28gd2F5cyB0byBzcGVjaWZ5IHdoYXQgdGVzdCBkYXRhIHNob3VsZCBiZSByZXR1cm5l
ZCBhcyBodHRwIHJlc3BvbnNlcyBieSB0aGUgbW9jaworICogYmFja2VuZCB3aGVuIHRoZSBjb2Rl
IHVuZGVyIHRlc3QgbWFrZXMgaHR0cCByZXF1ZXN0czoKKyAqCisgKiAtIGAkaHR0cEJhY2tlbmQu
ZXhwZWN0YCAtIHNwZWNpZmllcyBhIHJlcXVlc3QgZXhwZWN0YXRpb24KKyAqIC0gYCRodHRwQmFj
a2VuZC53aGVuYCAtIHNwZWNpZmllcyBhIGJhY2tlbmQgZGVmaW5pdGlvbgorICoKKyAqCisgKiAj
IFJlcXVlc3QgRXhwZWN0YXRpb25zIHZzIEJhY2tlbmQgRGVmaW5pdGlvbnMKKyAqCisgKiBSZXF1
ZXN0IGV4cGVjdGF0aW9ucyBwcm92aWRlIGEgd2F5IHRvIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCBy
ZXF1ZXN0cyBtYWRlIGJ5IHRoZSBhcHBsaWNhdGlvbiBhbmQKKyAqIHRvIGRlZmluZSByZXNwb25z
ZXMgZm9yIHRob3NlIHJlcXVlc3RzLiBUaGUgdGVzdCB3aWxsIGZhaWwgaWYgdGhlIGV4cGVjdGVk
IHJlcXVlc3RzIGFyZSBub3QgbWFkZQorICogb3IgdGhleSBhcmUgbWFkZSBpbiB0aGUgd3Jvbmcg
b3JkZXIuCisgKgorICogQmFja2VuZCBkZWZpbml0aW9ucyBhbGxvdyB5b3UgdG8gZGVmaW5lIGEg
ZmFrZSBiYWNrZW5kIGZvciB5b3VyIGFwcGxpY2F0aW9uIHdoaWNoIGRvZXNuJ3QgYXNzZXJ0Cisg
KiBpZiBhIHBhcnRpY3VsYXIgcmVxdWVzdCB3YXMgbWFkZSBvciBub3QsIGl0IGp1c3QgcmV0dXJu
cyBhIHRyYWluZWQgcmVzcG9uc2UgaWYgYSByZXF1ZXN0IGlzIG1hZGUuCisgKiBUaGUgdGVzdCB3
aWxsIHBhc3Mgd2hldGhlciBvciBub3QgdGhlIHJlcXVlc3QgZ2V0cyBtYWRlIGR1cmluZyB0ZXN0
aW5nLgorICoKKyAqCisgKiA8dGFibGUgY2xhc3M9InRhYmxlIj4KKyAqICAgPHRyPjx0aCB3aWR0
aD0iMjIwcHgiPjwvdGg+PHRoPlJlcXVlc3QgZXhwZWN0YXRpb25zPC90aD48dGg+QmFja2VuZCBk
ZWZpbml0aW9uczwvdGg+PC90cj4KKyAqICAgPHRyPgorICogICAgIDx0aD5TeW50YXg8L3RoPgor
ICogICAgIDx0ZD4uZXhwZWN0KC4uLikucmVzcG9uZCguLi4pPC90ZD4KKyAqICAgICA8dGQ+Lndo
ZW4oLi4uKS5yZXNwb25kKC4uLik8L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAg
PHRoPlR5cGljYWwgdXNhZ2U8L3RoPgorICogICAgIDx0ZD5zdHJpY3QgdW5pdCB0ZXN0czwvdGQ+
CisgKiAgICAgPHRkPmxvb3NlIChibGFjay1ib3gpIHVuaXQgdGVzdGluZzwvdGQ+CisgKiAgIDwv
dHI+CisgKiAgIDx0cj4KKyAqICAgICA8dGg+RnVsZmlsbHMgbXVsdGlwbGUgcmVxdWVzdHM8L3Ro
PgorICogICAgIDx0ZD5OTzwvdGQ+CisgKiAgICAgPHRkPllFUzwvdGQ+CisgKiAgIDwvdHI+Cisg
KiAgIDx0cj4KKyAqICAgICA8dGg+T3JkZXIgb2YgcmVxdWVzdHMgbWF0dGVyczwvdGg+CisgKiAg
ICAgPHRkPllFUzwvdGQ+CisgKiAgICAgPHRkPk5PPC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRy
PgorICogICAgIDx0aD5SZXF1ZXN0IHJlcXVpcmVkPC90aD4KKyAqICAgICA8dGQ+WUVTPC90ZD4K
KyAqICAgICA8dGQ+Tk88L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRoPlJl
c3BvbnNlIHJlcXVpcmVkPC90aD4KKyAqICAgICA8dGQ+b3B0aW9uYWwgKHNlZSBiZWxvdyk8L3Rk
PgorICogICAgIDx0ZD5ZRVM8L3RkPgorICogICA8L3RyPgorICogPC90YWJsZT4KKyAqCisgKiBJ
biBjYXNlcyB3aGVyZSBib3RoIGJhY2tlbmQgZGVmaW5pdGlvbnMgYW5kIHJlcXVlc3QgZXhwZWN0
YXRpb25zIGFyZSBzcGVjaWZpZWQgZHVyaW5nIHVuaXQKKyAqIHRlc3RpbmcsIHRoZSByZXF1ZXN0
IGV4cGVjdGF0aW9ucyBhcmUgZXZhbHVhdGVkIGZpcnN0LgorICoKKyAqIElmIGEgcmVxdWVzdCBl
eHBlY3RhdGlvbiBoYXMgbm8gcmVzcG9uc2Ugc3BlY2lmaWVkLCB0aGUgYWxnb3JpdGhtIHdpbGwg
c2VhcmNoIHlvdXIgYmFja2VuZAorICogZGVmaW5pdGlvbnMgZm9yIGFuIGFwcHJvcHJpYXRlIHJl
c3BvbnNlLgorICoKKyAqIElmIGEgcmVxdWVzdCBkaWRuJ3QgbWF0Y2ggYW55IGV4cGVjdGF0aW9u
IG9yIGlmIHRoZSBleHBlY3RhdGlvbiBkb2Vzbid0IGhhdmUgdGhlIHJlc3BvbnNlCisgKiBkZWZp
bmVkLCB0aGUgYmFja2VuZCBkZWZpbml0aW9ucyBhcmUgZXZhbHVhdGVkIGluIHNlcXVlbnRpYWwg
b3JkZXIgdG8gc2VlIGlmIGFueSBvZiB0aGVtIG1hdGNoCisgKiB0aGUgcmVxdWVzdC4gVGhlIHJl
c3BvbnNlIGZyb20gdGhlIGZpcnN0IG1hdGNoZWQgZGVmaW5pdGlvbiBpcyByZXR1cm5lZC4KKyAq
CisgKgorICogIyBGbHVzaGluZyBIVFRQIHJlcXVlc3RzCisgKgorICogVGhlICRodHRwQmFja2Vu
ZCB1c2VkIGluIHByb2R1Y3Rpb24sIGFsd2F5cyByZXNwb25kcyB0byByZXF1ZXN0cyB3aXRoIHJl
c3BvbnNlcyBhc3luY2hyb25vdXNseS4KKyAqIElmIHdlIHByZXNlcnZlZCB0aGlzIGJlaGF2aW9y
IGluIHVuaXQgdGVzdGluZywgd2UnZCBoYXZlIHRvIGNyZWF0ZSBhc3luYyB1bml0IHRlc3RzLCB3
aGljaCBhcmUKKyAqIGhhcmQgdG8gd3JpdGUsIGZvbGxvdyBhbmQgbWFpbnRhaW4uIEF0IHRoZSBz
YW1lIHRpbWUgdGhlIHRlc3RpbmcgbW9jaywgY2FuJ3QgcmVzcG9uZAorICogc3luY2hyb25vdXNs
eSBiZWNhdXNlIHRoYXQgd291bGQgY2hhbmdlIHRoZSBleGVjdXRpb24gb2YgdGhlIGNvZGUgdW5k
ZXIgdGVzdC4gRm9yIHRoaXMgcmVhc29uIHRoZQorICogbW9jayAkaHR0cEJhY2tlbmQgaGFzIGEg
YGZsdXNoKClgIG1ldGhvZCwgd2hpY2ggYWxsb3dzIHRoZSB0ZXN0IHRvIGV4cGxpY2l0bHkgZmx1
c2ggcGVuZGluZworICogcmVxdWVzdHMgYW5kIHRodXMgcHJlc2VydmluZyB0aGUgYXN5bmMgYXBp
IG9mIHRoZSBiYWNrZW5kLCB3aGlsZSBhbGxvd2luZyB0aGUgdGVzdCB0byBleGVjdXRlCisgKiBz
eW5jaHJvbm91c2x5LgorICoKKyAqCisgKiAjIFVuaXQgdGVzdGluZyB3aXRoIG1vY2sgJGh0dHBC
YWNrZW5kCisgKgorICogPHByZT4KKyAgIC8vIGNvbnRyb2xsZXIKKyAgIGZ1bmN0aW9uIE15Q29u
dHJvbGxlcigkc2NvcGUsICRodHRwKSB7CisgICAgICRodHRwLmdldCgnL2F1dGgucHknKS5zdWNj
ZXNzKGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAkc2NvcGUudXNlciA9IGRhdGE7CisgICAgIH0p
OworCisgICAgIHRoaXMuc2F2ZU1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAg
JHNjb3BlLnN0YXR1cyA9ICdTYXZpbmcuLi4nOworICAgICAgICRodHRwLnBvc3QoJy9hZGQtbXNn
LnB5JywgbWVzc2FnZSkuc3VjY2VzcyhmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICAgJHNj
b3BlLnN0YXR1cyA9ICcnOworICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKCkgeworICAgICAgICAg
JHNjb3BlLnN0YXR1cyA9ICdFUlJPUiEnOworICAgICAgIH0pOworICAgICB9OworICAgfQorCisg
ICAvLyB0ZXN0aW5nIGNvbnRyb2xsZXIKKyAgIHZhciAkaHR0cEJhY2tlbmQ7CisKKyAgIGJlZm9y
ZUVhY2goaW5qZWN0KGZ1bmN0aW9uKCRpbmplY3RvcikgeworICAgICAkaHR0cEJhY2tlbmQgPSAk
aW5qZWN0b3IuZ2V0KCckaHR0cEJhY2tlbmQnKTsKKworICAgICAvLyBiYWNrZW5kIGRlZmluaXRp
b24gY29tbW9uIGZvciBhbGwgdGVzdHMKKyAgICAgJGh0dHBCYWNrZW5kLndoZW4oJ0dFVCcsICcv
YXV0aC5weScpLnJlc3BvbmQoe3VzZXJJZDogJ3VzZXJYJ30sIHsnQS1Ub2tlbic6ICd4eHgnfSk7
CisgICB9KSk7CisKKworICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uKCkgeworICAgICAkaHR0cEJhY2tl
bmQudmVyaWZ5Tm9PdXRzdGFuZGluZ0V4cGVjdGF0aW9uKCk7CisgICAgICRodHRwQmFja2VuZC52
ZXJpZnlOb091dHN0YW5kaW5nUmVxdWVzdCgpOworICAgfSk7CisKKworICAgaXQoJ3Nob3VsZCBm
ZXRjaCBhdXRoZW50aWNhdGlvbiB0b2tlbicsIGZ1bmN0aW9uKCkgeworICAgICAkaHR0cEJhY2tl
bmQuZXhwZWN0R0VUKCcvYXV0aC5weScpOworICAgICB2YXIgY29udHJvbGxlciA9IHNjb3BlLiRu
ZXcoTXlDb250cm9sbGVyKTsKKyAgICAgJGh0dHBCYWNrZW5kLmZsdXNoKCk7CisgICB9KTsKKwor
CisgICBpdCgnc2hvdWxkIHNlbmQgbXNnIHRvIHNlcnZlcicsIGZ1bmN0aW9uKCkgeworICAgICAv
LyBub3cgeW91IGRvbuKAmXQgY2FyZSBhYm91dCB0aGUgYXV0aGVudGljYXRpb24sIGJ1dAorICAg
ICAvLyB0aGUgY29udHJvbGxlciB3aWxsIHN0aWxsIHNlbmQgdGhlIHJlcXVlc3QgYW5kCisgICAg
IC8vICRodHRwQmFja2VuZCB3aWxsIHJlc3BvbmQgd2l0aG91dCB5b3UgaGF2aW5nIHRvCisgICAg
IC8vIHNwZWNpZnkgdGhlIGV4cGVjdGF0aW9uIGFuZCByZXNwb25zZSBmb3IgdGhpcyByZXF1ZXN0
CisgICAgICRodHRwQmFja2VuZC5leHBlY3RQT1NUKCcvYWRkLW1zZy5weScsICdtZXNzYWdlIGNv
bnRlbnQnKS5yZXNwb25kKDIwMSwgJycpOworCisgICAgIHZhciBjb250cm9sbGVyID0gc2NvcGUu
JG5ldyhNeUNvbnRyb2xsZXIpOworICAgICAkaHR0cEJhY2tlbmQuZmx1c2goKTsKKyAgICAgY29u
dHJvbGxlci5zYXZlTWVzc2FnZSgnbWVzc2FnZSBjb250ZW50Jyk7CisgICAgIGV4cGVjdChjb250
cm9sbGVyLnN0YXR1cykudG9CZSgnU2F2aW5nLi4uJyk7CisgICAgICRodHRwQmFja2VuZC5mbHVz
aCgpOworICAgICBleHBlY3QoY29udHJvbGxlci5zdGF0dXMpLnRvQmUoJycpOworICAgfSk7CisK
KworICAgaXQoJ3Nob3VsZCBzZW5kIGF1dGggaGVhZGVyJywgZnVuY3Rpb24oKSB7CisgICAgICRo
dHRwQmFja2VuZC5leHBlY3RQT1NUKCcvYWRkLW1zZy5weScsIHVuZGVmaW5lZCwgZnVuY3Rpb24o
aGVhZGVycykgeworICAgICAgIC8vIGNoZWNrIGlmIHRoZSBoZWFkZXIgd2FzIHNlbmQsIGlmIGl0
IHdhc24ndCB0aGUgZXhwZWN0YXRpb24gd29uJ3QKKyAgICAgICAvLyBtYXRjaCB0aGUgcmVxdWVz
dCBhbmQgdGhlIHRlc3Qgd2lsbCBmYWlsCisgICAgICAgcmV0dXJuIGhlYWRlcnNbJ0F1dGhvcml6
YXRpb24nXSA9PSAneHh4JzsKKyAgICAgfSkucmVzcG9uZCgyMDEsICcnKTsKKworICAgICB2YXIg
Y29udHJvbGxlciA9IHNjb3BlLiRuZXcoTXlDb250cm9sbGVyKTsKKyAgICAgY29udHJvbGxlci5z
YXZlTWVzc2FnZSgnd2hhdGV2ZXInKTsKKyAgICAgJGh0dHBCYWNrZW5kLmZsdXNoKCk7CisgICB9
KTsKKyAgIDwvcHJlPgorICovCithbmd1bGFyLm1vY2suJEh0dHBCYWNrZW5kUHJvdmlkZXIgPSBm
dW5jdGlvbigpIHsKKyAgdGhpcy4kZ2V0ID0gW2NyZWF0ZUh0dHBCYWNrZW5kTW9ja107Cit9Owor
CisvKioKKyAqIEdlbmVyYWwgZmFjdG9yeSBmdW5jdGlvbiBmb3IgJGh0dHBCYWNrZW5kIG1vY2su
CisgKiBSZXR1cm5zIGluc3RhbmNlIGZvciB1bml0IHRlc3RpbmcgKHdoZW4gbm8gYXJndW1lbnRz
IHNwZWNpZmllZCk6CisgKiAgIC0gcGFzc2luZyB0aHJvdWdoIGlzIGRpc2FibGVkCisgKiAgIC0g
YXV0byBmbHVzaGluZyBpcyBkaXNhYmxlZAorICoKKyAqIFJldHVybnMgaW5zdGFuY2UgZm9yIGUy
ZSB0ZXN0aW5nICh3aGVuIGAkZGVsZWdhdGVgIGFuZCBgJGJyb3dzZXJgIHNwZWNpZmllZCk6Cisg
KiAgIC0gcGFzc2luZyB0aHJvdWdoIChkZWxlZ2F0aW5nIHJlcXVlc3QgdG8gcmVhbCBiYWNrZW5k
KSBpcyBlbmFibGVkCisgKiAgIC0gYXV0byBmbHVzaGluZyBpcyBlbmFibGVkCisgKgorICogQHBh
cmFtIHtPYmplY3Q9fSAkZGVsZWdhdGUgUmVhbCAkaHR0cEJhY2tlbmQgaW5zdGFuY2UgKGFsbG93
IHBhc3NpbmcgdGhyb3VnaCBpZiBzcGVjaWZpZWQpCisgKiBAcGFyYW0ge09iamVjdD19ICRicm93
c2VyIEF1dG8tZmx1c2hpbmcgZW5hYmxlZCBpZiBzcGVjaWZpZWQKKyAqIEByZXR1cm4ge09iamVj
dH0gSW5zdGFuY2Ugb2YgJGh0dHBCYWNrZW5kIG1vY2sKKyAqLworZnVuY3Rpb24gY3JlYXRlSHR0
cEJhY2tlbmRNb2NrKCRkZWxlZ2F0ZSwgJGJyb3dzZXIpIHsKKyAgdmFyIGRlZmluaXRpb25zID0g
W10sCisgICAgICBleHBlY3RhdGlvbnMgPSBbXSwKKyAgICAgIHJlc3BvbnNlcyA9IFtdLAorICAg
ICAgcmVzcG9uc2VzUHVzaCA9IGFuZ3VsYXIuYmluZChyZXNwb25zZXMsIHJlc3BvbnNlcy5wdXNo
KTsKKworICBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZShzdGF0dXMsIGRhdGEsIGhlYWRlcnMpIHsK
KyAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKHN0YXR1cykpIHJldHVybiBzdGF0dXM7CisKKyAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gYW5ndWxhci5pc051bWJlcihzdGF0
dXMpCisgICAgICAgICAgPyBbc3RhdHVzLCBkYXRhLCBoZWFkZXJzXQorICAgICAgICAgIDogWzIw
MCwgc3RhdHVzLCBkYXRhXTsKKyAgICB9OworICB9CisKKyAgLy8gVE9ETyh2b2p0YSk6IGNoYW5n
ZSBwYXJhbXMgdG86IG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzLCBjYWxsYmFjaworICBmdW5j
dGlvbiAkaHR0cEJhY2tlbmQobWV0aG9kLCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBoZWFkZXJzKSB7
CisgICAgdmFyIHhociA9IG5ldyBNb2NrWGhyKCksCisgICAgICAgIGV4cGVjdGF0aW9uID0gZXhw
ZWN0YXRpb25zWzBdLAorICAgICAgICB3YXNFeHBlY3RlZCA9IGZhbHNlOworCisgICAgZnVuY3Rp
b24gcHJldHR5UHJpbnQoZGF0YSkgeworICAgICAgcmV0dXJuIChhbmd1bGFyLmlzU3RyaW5nKGRh
dGEpIHx8IGFuZ3VsYXIuaXNGdW5jdGlvbihkYXRhKSB8fCBkYXRhIGluc3RhbmNlb2YgUmVnRXhw
KQorICAgICAgICAgID8gZGF0YQorICAgICAgICAgIDogYW5ndWxhci50b0pzb24oZGF0YSk7Cisg
ICAgfQorCisgICAgaWYgKGV4cGVjdGF0aW9uICYmIGV4cGVjdGF0aW9uLm1hdGNoKG1ldGhvZCwg
dXJsKSkgeworICAgICAgaWYgKCFleHBlY3RhdGlvbi5tYXRjaERhdGEoZGF0YSkpCisgICAgICAg
IHRocm93IEVycm9yKCdFeHBlY3RlZCAnICsgZXhwZWN0YXRpb24gKyAnIHdpdGggZGlmZmVyZW50
IGRhdGFcbicgKworICAgICAgICAgICAgJ0VYUEVDVEVEOiAnICsgcHJldHR5UHJpbnQoZXhwZWN0
YXRpb24uZGF0YSkgKyAnXG5HT1Q6ICAgICAgJyArIGRhdGEpOworCisgICAgICBpZiAoIWV4cGVj
dGF0aW9uLm1hdGNoSGVhZGVycyhoZWFkZXJzKSkKKyAgICAgICAgdGhyb3cgRXJyb3IoJ0V4cGVj
dGVkICcgKyBleHBlY3RhdGlvbiArICcgd2l0aCBkaWZmZXJlbnQgaGVhZGVyc1xuJyArCisgICAg
ICAgICAgICAnRVhQRUNURUQ6ICcgKyBwcmV0dHlQcmludChleHBlY3RhdGlvbi5oZWFkZXJzKSAr
ICdcbkdPVDogICAgICAnICsKKyAgICAgICAgICAgIHByZXR0eVByaW50KGhlYWRlcnMpKTsKKwor
ICAgICAgZXhwZWN0YXRpb25zLnNoaWZ0KCk7CisKKyAgICAgIGlmIChleHBlY3RhdGlvbi5yZXNw
b25zZSkgeworICAgICAgICByZXNwb25zZXMucHVzaChmdW5jdGlvbigpIHsKKyAgICAgICAgICB2
YXIgcmVzcG9uc2UgPSBleHBlY3RhdGlvbi5yZXNwb25zZShtZXRob2QsIHVybCwgZGF0YSwgaGVh
ZGVycyk7CisgICAgICAgICAgeGhyLiQkcmVzcEhlYWRlcnMgPSByZXNwb25zZVsyXTsKKyAgICAg
ICAgICBjYWxsYmFjayhyZXNwb25zZVswXSwgcmVzcG9uc2VbMV0sIHhoci5nZXRBbGxSZXNwb25z
ZUhlYWRlcnMoKSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAg
ICB3YXNFeHBlY3RlZCA9IHRydWU7CisgICAgfQorCisgICAgdmFyIGkgPSAtMSwgZGVmaW5pdGlv
bjsKKyAgICB3aGlsZSAoKGRlZmluaXRpb24gPSBkZWZpbml0aW9uc1srK2ldKSkgeworICAgICAg
aWYgKGRlZmluaXRpb24ubWF0Y2gobWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnMgfHwge30pKSB7
CisgICAgICAgIGlmIChkZWZpbml0aW9uLnJlc3BvbnNlKSB7CisgICAgICAgICAgLy8gaWYgJGJy
b3dzZXIgc3BlY2lmaWVkLCB3ZSBkbyBhdXRvIGZsdXNoIGFsbCByZXF1ZXN0cworICAgICAgICAg
ICgkYnJvd3NlciA/ICRicm93c2VyLmRlZmVyIDogcmVzcG9uc2VzUHVzaCkoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBkZWZpbml0aW9uLnJlc3BvbnNlKG1ldGhvZCwg
dXJsLCBkYXRhLCBoZWFkZXJzKTsKKyAgICAgICAgICAgIHhoci4kJHJlc3BIZWFkZXJzID0gcmVz
cG9uc2VbMl07CisgICAgICAgICAgICBjYWxsYmFjayhyZXNwb25zZVswXSwgcmVzcG9uc2VbMV0s
IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoZGVmaW5pdGlvbi5wYXNzVGhyb3VnaCkgeworICAgICAgICAgICRkZWxlZ2F0ZSht
ZXRob2QsIHVybCwgZGF0YSwgY2FsbGJhY2ssIGhlYWRlcnMpOworICAgICAgICB9IGVsc2UgdGhy
b3cgRXJyb3IoJ05vIHJlc3BvbnNlIGRlZmluZWQgIScpOworICAgICAgICByZXR1cm47CisgICAg
ICB9CisgICAgfQorICAgIHRocm93IHdhc0V4cGVjdGVkID8KKyAgICAgICAgRXJyb3IoJ05vIHJl
c3BvbnNlIGRlZmluZWQgIScpIDoKKyAgICAgICAgRXJyb3IoJ1VuZXhwZWN0ZWQgcmVxdWVzdDog
JyArIG1ldGhvZCArICcgJyArIHVybCArICdcbicgKworICAgICAgICAgICAgICAoZXhwZWN0YXRp
b24gPyAnRXhwZWN0ZWQgJyArIGV4cGVjdGF0aW9uIDogJ05vIG1vcmUgcmVxdWVzdCBleHBlY3Rl
ZCcpKTsKKyAgfQorCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIG5nTW9j
ay4kaHR0cEJhY2tlbmQjd2hlbgorICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRwQmFja2VuZAor
ICAgKiBAZGVzY3JpcHRpb24KKyAgICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24u
CisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgSFRUUCBtZXRob2QuCisgICAqIEBw
YXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgorICAgKiBAcGFyYW0geyhzdHJpbmd8
UmVnRXhwKT19IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCisgICAqIEBwYXJhbSB7KE9iamVjdHxm
dW5jdGlvbihPYmplY3QpKT19IGhlYWRlcnMgSFRUUCBoZWFkZXJzIG9yIGZ1bmN0aW9uIHRoYXQg
cmVjZWl2ZXMgaHR0cCBoZWFkZXIKKyAgICogICBvYmplY3QgYW5kIHJldHVybnMgdHJ1ZSBpZiB0
aGUgaGVhZGVycyBtYXRjaCB0aGUgY3VycmVudCBkZWZpbml0aW9uLgorICAgKiBAcmV0dXJucyB7
cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIG1ldGhvZCB0
aGF0IGNvbnRyb2wgaG93IGEgbWF0Y2hlZAorICAgKiAgIHJlcXVlc3QgaXMgaGFuZGxlZC4KKyAg
ICoKKyAgICogIC0gcmVzcG9uZCDigJMgYHtmdW5jdGlvbihbc3RhdHVzLF0gZGF0YVssIGhlYWRl
cnNdKXxmdW5jdGlvbihmdW5jdGlvbihtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycyl9YAorICAg
KiAgICDigJMgVGhlIHJlc3BvbmQgbWV0aG9kIHRha2VzIGEgc2V0IG9mIHN0YXRpYyBkYXRhIHRv
IGJlIHJldHVybmVkIG9yIGEgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuCisgICAqICAgIGFuIGFy
cmF5IGNvbnRhaW5pbmcgcmVzcG9uc2Ugc3RhdHVzIChudW1iZXIpLCByZXNwb25zZSBkYXRhIChz
dHJpbmcpIGFuZCByZXNwb25zZSBoZWFkZXJzCisgICAqICAgIChPYmplY3QpLgorICAgKi8KKyAg
JGh0dHBCYWNrZW5kLndoZW4gPSBmdW5jdGlvbihtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycykg
eworICAgIHZhciBkZWZpbml0aW9uID0gbmV3IE1vY2tIdHRwRXhwZWN0YXRpb24obWV0aG9kLCB1
cmwsIGRhdGEsIGhlYWRlcnMpLAorICAgICAgICBjaGFpbiA9IHsKKyAgICAgICAgICByZXNwb25k
OiBmdW5jdGlvbihzdGF0dXMsIGRhdGEsIGhlYWRlcnMpIHsKKyAgICAgICAgICAgIGRlZmluaXRp
b24ucmVzcG9uc2UgPSBjcmVhdGVSZXNwb25zZShzdGF0dXMsIGRhdGEsIGhlYWRlcnMpOworICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgIGlmICgkYnJvd3NlcikgeworICAgICAgY2hhaW4u
cGFzc1Rocm91Z2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZGVmaW5pdGlvbi5wYXNzVGhyb3Vn
aCA9IHRydWU7CisgICAgICB9OworICAgIH0KKworICAgIGRlZmluaXRpb25zLnB1c2goZGVmaW5p
dGlvbik7CisgICAgcmV0dXJuIGNoYWluOworICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0
aG9kCisgICAqIEBuYW1lIG5nTW9jay4kaHR0cEJhY2tlbmQjd2hlbkdFVAorICAgKiBAbWV0aG9k
T2YgbmdNb2NrLiRodHRwQmFja2VuZAorICAgKiBAZGVzY3JpcHRpb24KKyAgICogQ3JlYXRlcyBh
IG5ldyBiYWNrZW5kIGRlZmluaXRpb24gZm9yIEdFVCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBz
ZWUgYHdoZW4oKWAuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAg
dXJsLgorICAgKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24oT2JqZWN0KSk9fSBoZWFkZXJzIEhU
VFAgaGVhZGVycy4KKyAgICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9i
amVjdCB3aXRoIGByZXNwb25kYCBtZXRob2QgdGhhdCBjb250cm9sIGhvdyBhIG1hdGNoZWQKKyAg
ICogcmVxdWVzdCBpcyBoYW5kbGVkLgorICAgKi8KKworICAvKioKKyAgICogQG5nZG9jIG1ldGhv
ZAorICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI3doZW5IRUFECisgICAqIEBtZXRob2RP
ZiBuZ01vY2suJGh0dHBCYWNrZW5kCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBDcmVhdGVzIGEg
bmV3IGJhY2tlbmQgZGVmaW5pdGlvbiBmb3IgSEVBRCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBz
ZWUgYHdoZW4oKWAuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAg
dXJsLgorICAgKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24oT2JqZWN0KSk9fSBoZWFkZXJzIEhU
VFAgaGVhZGVycy4KKyAgICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9i
amVjdCB3aXRoIGByZXNwb25kYCBtZXRob2QgdGhhdCBjb250cm9sIGhvdyBhIG1hdGNoZWQKKyAg
ICogcmVxdWVzdCBpcyBoYW5kbGVkLgorICAgKi8KKworICAvKioKKyAgICogQG5nZG9jIG1ldGhv
ZAorICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI3doZW5ERUxFVEUKKyAgICogQG1ldGhv
ZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIENyZWF0ZXMg
YSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBERUxFVEUgcmVxdWVzdHMuIEZvciBtb3JlIGlu
Zm8gc2VlIGB3aGVuKClgLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVybCBI
VFRQIHVybC4KKyAgICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKE9iamVjdCkpPX0gaGVhZGVy
cyBIVFRQIGhlYWRlcnMuCisgICAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBh
biBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9kIHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVk
CisgICAqIHJlcXVlc3QgaXMgaGFuZGxlZC4KKyAgICovCisKKyAgLyoqCisgICAqIEBuZ2RvYyBt
ZXRob2QKKyAgICogQG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCN3aGVuUE9TVAorICAgKiBAbWV0
aG9kT2YgbmdNb2NrLiRodHRwQmFja2VuZAorICAgKiBAZGVzY3JpcHRpb24KKyAgICogQ3JlYXRl
cyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24gZm9yIFBPU1QgcmVxdWVzdHMuIEZvciBtb3JlIGlu
Zm8gc2VlIGB3aGVuKClgLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVybCBI
VFRQIHVybC4KKyAgICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCk9fSBkYXRhIEhUVFAgcmVxdWVz
dCBib2R5LgorICAgKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24oT2JqZWN0KSk9fSBoZWFkZXJz
IEhUVFAgaGVhZGVycy4KKyAgICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFu
IG9iamVjdCB3aXRoIGByZXNwb25kYCBtZXRob2QgdGhhdCBjb250cm9sIGhvdyBhIG1hdGNoZWQK
KyAgICogcmVxdWVzdCBpcyBoYW5kbGVkLgorICAgKi8KKworICAvKioKKyAgICogQG5nZG9jIG1l
dGhvZAorICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI3doZW5QVVQKKyAgICogQG1ldGhv
ZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIENyZWF0ZXMg
YSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBQVVQgcmVxdWVzdHMuICBGb3IgbW9yZSBpbmZv
IHNlZSBgd2hlbigpYC4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRU
UCB1cmwuCisgICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApPX0gZGF0YSBIVFRQIHJlcXVlc3Qg
Ym9keS4KKyAgICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKE9iamVjdCkpPX0gaGVhZGVycyBI
VFRQIGhlYWRlcnMuCisgICAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBv
YmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9kIHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVkCisg
ICAqIHJlcXVlc3QgaXMgaGFuZGxlZC4KKyAgICovCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICogQG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCN3aGVuSlNPTlAKKyAgICogQG1ldGhv
ZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIENyZWF0ZXMg
YSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBKU09OUCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5m
byBzZWUgYHdoZW4oKWAuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhU
VFAgdXJsLgorICAgKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0
IHdpdGggYHJlc3BvbmRgIG1ldGhvZCB0aGF0IGNvbnRyb2wgaG93IGEgbWF0Y2hlZAorICAgKiBy
ZXF1ZXN0IGlzIGhhbmRsZWQuCisgICAqLworICBjcmVhdGVTaG9ydE1ldGhvZHMoJ3doZW4nKTsK
KworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIG5nTW9jay4kaHR0cEJh
Y2tlbmQjZXhwZWN0CisgICAqIEBtZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5kCisgICAqIEBk
ZXNjcmlwdGlvbgorICAgKiBDcmVhdGVzIGEgbmV3IHJlcXVlc3QgZXhwZWN0YXRpb24uCisgICAq
CisgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgSFRUUCBtZXRob2QuCisgICAqIEBwYXJhbSB7
c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgorICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhw
KT19IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCisgICAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlv
bihPYmplY3QpKT19IGhlYWRlcnMgSFRUUCBoZWFkZXJzIG9yIGZ1bmN0aW9uIHRoYXQgcmVjZWl2
ZXMgaHR0cCBoZWFkZXIKKyAgICogICBvYmplY3QgYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGVh
ZGVycyBtYXRjaCB0aGUgY3VycmVudCBleHBlY3RhdGlvbi4KKyAgICogQHJldHVybnMge3JlcXVl
c3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGByZXNwb25kYCBtZXRob2QgdGhhdCBj
b250cm9sIGhvdyBhIG1hdGNoZWQKKyAgICogIHJlcXVlc3QgaXMgaGFuZGxlZC4KKyAgICoKKyAg
ICogIC0gcmVzcG9uZCDigJMgYHtmdW5jdGlvbihbc3RhdHVzLF0gZGF0YVssIGhlYWRlcnNdKXxm
dW5jdGlvbihmdW5jdGlvbihtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycyl9YAorICAgKiAgICDi
gJMgVGhlIHJlc3BvbmQgbWV0aG9kIHRha2VzIGEgc2V0IG9mIHN0YXRpYyBkYXRhIHRvIGJlIHJl
dHVybmVkIG9yIGEgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuCisgICAqICAgIGFuIGFycmF5IGNv
bnRhaW5pbmcgcmVzcG9uc2Ugc3RhdHVzIChudW1iZXIpLCByZXNwb25zZSBkYXRhIChzdHJpbmcp
IGFuZCByZXNwb25zZSBoZWFkZXJzCisgICAqICAgIChPYmplY3QpLgorICAgKi8KKyAgJGh0dHBC
YWNrZW5kLmV4cGVjdCA9IGZ1bmN0aW9uKG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzKSB7Cisg
ICAgdmFyIGV4cGVjdGF0aW9uID0gbmV3IE1vY2tIdHRwRXhwZWN0YXRpb24obWV0aG9kLCB1cmws
IGRhdGEsIGhlYWRlcnMpOworICAgIGV4cGVjdGF0aW9ucy5wdXNoKGV4cGVjdGF0aW9uKTsKKyAg
ICByZXR1cm4geworICAgICAgcmVzcG9uZDogZnVuY3Rpb24oc3RhdHVzLCBkYXRhLCBoZWFkZXJz
KSB7CisgICAgICAgIGV4cGVjdGF0aW9uLnJlc3BvbnNlID0gY3JlYXRlUmVzcG9uc2Uoc3RhdHVz
LCBkYXRhLCBoZWFkZXJzKTsKKyAgICAgIH0KKyAgICB9OworICB9OworCisKKyAgLyoqCisgICAq
IEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCNleHBlY3RHRVQK
KyAgICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKKyAgICogQGRlc2NyaXB0aW9uCisg
ICAqIENyZWF0ZXMgYSBuZXcgcmVxdWVzdCBleHBlY3RhdGlvbiBmb3IgR0VUIHJlcXVlc3RzLiBG
b3IgbW9yZSBpbmZvIHNlZSBgZXhwZWN0KClgLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ3xS
ZWdFeHB9IHVybCBIVFRQIHVybC4KKyAgICogQHBhcmFtIHtPYmplY3Q9fSBoZWFkZXJzIEhUVFAg
aGVhZGVycy4KKyAgICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVj
dCB3aXRoIGByZXNwb25kYCBtZXRob2QgdGhhdCBjb250cm9sIGhvdyBhIG1hdGNoZWQKKyAgICog
cmVxdWVzdCBpcyBoYW5kbGVkLiBTZWUgI2V4cGVjdCBmb3IgbW9yZSBpbmZvLgorICAgKi8KKwor
ICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5k
I2V4cGVjdEhFQUQKKyAgICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKKyAgICogQGRl
c2NyaXB0aW9uCisgICAqIENyZWF0ZXMgYSBuZXcgcmVxdWVzdCBleHBlY3RhdGlvbiBmb3IgSEVB
RCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUgYGV4cGVjdCgpYC4KKyAgICoKKyAgICogQHBh
cmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCisgICAqIEBwYXJhbSB7T2JqZWN0PX0g
aGVhZGVycyBIVFRQIGhlYWRlcnMuCisgICAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0
dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9kIHRoYXQgY29udHJvbCBob3cgYSBt
YXRjaGVkCisgICAqICAgcmVxdWVzdCBpcyBoYW5kbGVkLgorICAgKi8KKworICAvKioKKyAgICog
QG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI2V4cGVjdERFTEVU
RQorICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRwQmFja2VuZAorICAgKiBAZGVzY3JpcHRpb24K
KyAgICogQ3JlYXRlcyBhIG5ldyByZXF1ZXN0IGV4cGVjdGF0aW9uIGZvciBERUxFVEUgcmVxdWVz
dHMuIEZvciBtb3JlIGluZm8gc2VlIGBleHBlY3QoKWAuCisgICAqCisgICAqIEBwYXJhbSB7c3Ry
aW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgorICAgKiBAcGFyYW0ge09iamVjdD19IGhlYWRlcnMg
SFRUUCBoZWFkZXJzLgorICAgKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4g
b2JqZWN0IHdpdGggYHJlc3BvbmRgIG1ldGhvZCB0aGF0IGNvbnRyb2wgaG93IGEgbWF0Y2hlZAor
ICAgKiAgIHJlcXVlc3QgaXMgaGFuZGxlZC4KKyAgICovCisKKyAgLyoqCisgICAqIEBuZ2RvYyBt
ZXRob2QKKyAgICogQG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCNleHBlY3RQT1NUCisgICAqIEBt
ZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5kCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBDcmVh
dGVzIGEgbmV3IHJlcXVlc3QgZXhwZWN0YXRpb24gZm9yIFBPU1QgcmVxdWVzdHMuIEZvciBtb3Jl
IGluZm8gc2VlIGBleHBlY3QoKWAuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0g
dXJsIEhUVFAgdXJsLgorICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKT19IGRhdGEgSFRUUCBy
ZXF1ZXN0IGJvZHkuCisgICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyBIVFRQIGhlYWRlcnMu
CisgICAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBg
cmVzcG9uZGAgbWV0aG9kIHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVkCisgICAqICAgcmVxdWVz
dCBpcyBoYW5kbGVkLgorICAgKi8KKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBA
bmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI2V4cGVjdFBVVAorICAgKiBAbWV0aG9kT2YgbmdNb2Nr
LiRodHRwQmFja2VuZAorICAgKiBAZGVzY3JpcHRpb24KKyAgICogQ3JlYXRlcyBhIG5ldyByZXF1
ZXN0IGV4cGVjdGF0aW9uIGZvciBQVVQgcmVxdWVzdHMuIEZvciBtb3JlIGluZm8gc2VlIGBleHBl
Y3QoKWAuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgor
ICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKT19IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCisg
ICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCisgICAqIEByZXR1cm5z
IHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9k
IHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVkCisgICAqICAgcmVxdWVzdCBpcyBoYW5kbGVkLgor
ICAgKi8KKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBuZ01vY2suJGh0
dHBCYWNrZW5kI2V4cGVjdFBBVENICisgICAqIEBtZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5k
CisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBDcmVhdGVzIGEgbmV3IHJlcXVlc3QgZXhwZWN0YXRp
b24gZm9yIFBBVENIIHJlcXVlc3RzLiBGb3IgbW9yZSBpbmZvIHNlZSBgZXhwZWN0KClgLgorICAg
KgorICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVybCBIVFRQIHVybC4KKyAgICogQHBhcmFt
IHsoc3RyaW5nfFJlZ0V4cCk9fSBkYXRhIEhUVFAgcmVxdWVzdCBib2R5LgorICAgKiBAcGFyYW0g
e09iamVjdD19IGhlYWRlcnMgSFRUUCBoZWFkZXJzLgorICAgKiBAcmV0dXJucyB7cmVxdWVzdEhh
bmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIG1ldGhvZCB0aGF0IGNvbnRy
b2wgaG93IGEgbWF0Y2hlZAorICAgKiAgIHJlcXVlc3QgaXMgaGFuZGxlZC4KKyAgICovCisKKyAg
LyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCNl
eHBlY3RKU09OUAorICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRwQmFja2VuZAorICAgKiBAZGVz
Y3JpcHRpb24KKyAgICogQ3JlYXRlcyBhIG5ldyByZXF1ZXN0IGV4cGVjdGF0aW9uIGZvciBKU09O
UCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUgYGV4cGVjdCgpYC4KKyAgICoKKyAgICogQHBh
cmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCisgICAqIEByZXR1cm5zIHtyZXF1ZXN0
SGFuZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9kIHRoYXQgY29u
dHJvbCBob3cgYSBtYXRjaGVkCisgICAqICAgcmVxdWVzdCBpcyBoYW5kbGVkLgorICAgKi8KKyAg
Y3JlYXRlU2hvcnRNZXRob2RzKCdleHBlY3QnKTsKKworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0
aG9kCisgICAqIEBuYW1lIG5nTW9jay4kaHR0cEJhY2tlbmQjZmx1c2gKKyAgICogQG1ldGhvZE9m
IG5nTW9jay4kaHR0cEJhY2tlbmQKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEZsdXNoZXMgYWxs
IHBlbmRpbmcgcmVxdWVzdHMgdXNpbmcgdGhlIHRyYWluZWQgcmVzcG9uc2VzLgorICAgKgorICAg
KiBAcGFyYW0ge251bWJlcj19IGNvdW50IE51bWJlciBvZiByZXNwb25zZXMgdG8gZmx1c2ggKGlu
IHRoZSBvcmRlciB0aGV5IGFycml2ZWQpLiBJZiB1bmRlZmluZWQsCisgICAqICAgYWxsIHBlbmRp
bmcgcmVxdWVzdHMgd2lsbCBiZSBmbHVzaGVkLiBJZiB0aGVyZSBhcmUgbm8gcGVuZGluZyByZXF1
ZXN0cyB3aGVuIHRoZSBmbHVzaCBtZXRob2QKKyAgICogICBpcyBjYWxsZWQgYW4gZXhjZXB0aW9u
IGlzIHRocm93biAoYXMgdGhpcyB0eXBpY2FsbHkgYSBzaWduIG9mIHByb2dyYW1taW5nIGVycm9y
KS4KKyAgICovCisgICRodHRwQmFja2VuZC5mbHVzaCA9IGZ1bmN0aW9uKGNvdW50KSB7CisgICAg
aWYgKCFyZXNwb25zZXMubGVuZ3RoKSB0aHJvdyBFcnJvcignTm8gcGVuZGluZyByZXF1ZXN0IHRv
IGZsdXNoICEnKTsKKworICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChjb3VudCkpIHsKKyAgICAg
IHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgIGlmICghcmVzcG9uc2VzLmxlbmd0aCkgdGhyb3cg
RXJyb3IoJ05vIG1vcmUgcGVuZGluZyByZXF1ZXN0IHRvIGZsdXNoICEnKTsKKyAgICAgICAgcmVz
cG9uc2VzLnNoaWZ0KCkoKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgd2hpbGUgKHJl
c3BvbnNlcy5sZW5ndGgpIHsKKyAgICAgICAgcmVzcG9uc2VzLnNoaWZ0KCkoKTsKKyAgICAgIH0K
KyAgICB9CisgICAgJGh0dHBCYWNrZW5kLnZlcmlmeU5vT3V0c3RhbmRpbmdFeHBlY3RhdGlvbigp
OworICB9OworCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgbmdNb2Nr
LiRodHRwQmFja2VuZCN2ZXJpZnlOb091dHN0YW5kaW5nRXhwZWN0YXRpb24KKyAgICogQG1ldGhv
ZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFZlcmlmaWVz
IHRoYXQgYWxsIG9mIHRoZSByZXF1ZXN0cyBkZWZpbmVkIHZpYSB0aGUgYGV4cGVjdGAgYXBpIHdl
cmUgbWFkZS4gSWYgYW55IG9mIHRoZQorICAgKiByZXF1ZXN0cyB3ZXJlIG5vdCBtYWRlLCB2ZXJp
ZnlOb091dHN0YW5kaW5nRXhwZWN0YXRpb24gdGhyb3dzIGFuIGV4Y2VwdGlvbi4KKyAgICoKKyAg
ICogVHlwaWNhbGx5LCB5b3Ugd291bGQgY2FsbCB0aGlzIG1ldGhvZCBmb2xsb3dpbmcgZWFjaCB0
ZXN0IGNhc2UgdGhhdCBhc3NlcnRzIHJlcXVlc3RzIHVzaW5nIGFuCisgICAqICJhZnRlckVhY2gi
IGNsYXVzZS4KKyAgICoKKyAgICogPHByZT4KKyAgICogICBhZnRlckVhY2goJGh0dHBCYWNrZW5k
LnZlcmlmeUV4cGVjdGF0aW9ucyk7CisgICAqIDwvcHJlPgorICAgKi8KKyAgJGh0dHBCYWNrZW5k
LnZlcmlmeU5vT3V0c3RhbmRpbmdFeHBlY3RhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgIGlmIChl
eHBlY3RhdGlvbnMubGVuZ3RoKSB7CisgICAgICB0aHJvdyBFcnJvcignVW5zYXRpc2ZpZWQgcmVx
dWVzdHM6ICcgKyBleHBlY3RhdGlvbnMuam9pbignLCAnKSk7CisgICAgfQorICB9OworCisKKyAg
LyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCN2
ZXJpZnlOb091dHN0YW5kaW5nUmVxdWVzdAorICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRwQmFj
a2VuZAorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVmVyaWZpZXMgdGhhdCB0aGVyZSBhcmUgbm8g
b3V0c3RhbmRpbmcgcmVxdWVzdHMgdGhhdCBuZWVkIHRvIGJlIGZsdXNoZWQuCisgICAqCisgICAq
IFR5cGljYWxseSwgeW91IHdvdWxkIGNhbGwgdGhpcyBtZXRob2QgZm9sbG93aW5nIGVhY2ggdGVz
dCBjYXNlIHRoYXQgYXNzZXJ0cyByZXF1ZXN0cyB1c2luZyBhbgorICAgKiAiYWZ0ZXJFYWNoIiBj
bGF1c2UuCisgICAqCisgICAqIDxwcmU+CisgICAqICAgYWZ0ZXJFYWNoKCRodHRwQmFja2VuZC52
ZXJpZnlOb091dHN0YW5kaW5nUmVxdWVzdCk7CisgICAqIDwvcHJlPgorICAgKi8KKyAgJGh0dHBC
YWNrZW5kLnZlcmlmeU5vT3V0c3RhbmRpbmdSZXF1ZXN0ID0gZnVuY3Rpb24oKSB7CisgICAgaWYg
KHJlc3BvbnNlcy5sZW5ndGgpIHsKKyAgICAgIHRocm93IEVycm9yKCdVbmZsdXNoZWQgcmVxdWVz
dHM6ICcgKyByZXNwb25zZXMubGVuZ3RoKTsKKyAgICB9CisgIH07CisKKworICAvKioKKyAgICog
QG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI3Jlc2V0RXhwZWN0
YXRpb25zCisgICAqIEBtZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5kCisgICAqIEBkZXNjcmlw
dGlvbgorICAgKiBSZXNldHMgYWxsIHJlcXVlc3QgZXhwZWN0YXRpb25zLCBidXQgcHJlc2VydmVz
IGFsbCBiYWNrZW5kIGRlZmluaXRpb25zLiBUeXBpY2FsbHksIHlvdSB3b3VsZAorICAgKiBjYWxs
IHJlc2V0RXhwZWN0YXRpb25zIGR1cmluZyBhIG11bHRpcGxlLXBoYXNlIHRlc3Qgd2hlbiB5b3Ug
d2FudCB0byByZXVzZSB0aGUgc2FtZSBpbnN0YW5jZSBvZgorICAgKiAkaHR0cEJhY2tlbmQgbW9j
ay4KKyAgICovCisgICRodHRwQmFja2VuZC5yZXNldEV4cGVjdGF0aW9ucyA9IGZ1bmN0aW9uKCkg
eworICAgIGV4cGVjdGF0aW9ucy5sZW5ndGggPSAwOworICAgIHJlc3BvbnNlcy5sZW5ndGggPSAw
OworICB9OworCisgIHJldHVybiAkaHR0cEJhY2tlbmQ7CisKKworICBmdW5jdGlvbiBjcmVhdGVT
aG9ydE1ldGhvZHMocHJlZml4KSB7CisgICAgYW5ndWxhci5mb3JFYWNoKFsnR0VUJywgJ0RFTEVU
RScsICdKU09OUCddLCBmdW5jdGlvbihtZXRob2QpIHsKKyAgICAgJGh0dHBCYWNrZW5kW3ByZWZp
eCArIG1ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGhlYWRlcnMpIHsKKyAgICAgICByZXR1cm4gJGh0
dHBCYWNrZW5kW3ByZWZpeF0obWV0aG9kLCB1cmwsIHVuZGVmaW5lZCwgaGVhZGVycykKKyAgICAg
fQorICAgIH0pOworCisgICAgYW5ndWxhci5mb3JFYWNoKFsnUFVUJywgJ1BPU1QnLCAnUEFUQ0gn
XSwgZnVuY3Rpb24obWV0aG9kKSB7CisgICAgICAkaHR0cEJhY2tlbmRbcHJlZml4ICsgbWV0aG9k
XSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgaGVhZGVycykgeworICAgICAgICByZXR1cm4gJGh0dHBC
YWNrZW5kW3ByZWZpeF0obWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnMpCisgICAgICB9CisgICAg
fSk7CisgIH0KK30KKworZnVuY3Rpb24gTW9ja0h0dHBFeHBlY3RhdGlvbihtZXRob2QsIHVybCwg
ZGF0YSwgaGVhZGVycykgeworCisgIHRoaXMuZGF0YSA9IGRhdGE7CisgIHRoaXMuaGVhZGVycyA9
IGhlYWRlcnM7CisKKyAgdGhpcy5tYXRjaCA9IGZ1bmN0aW9uKG0sIHUsIGQsIGgpIHsKKyAgICBp
ZiAobWV0aG9kICE9IG0pIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXRoaXMubWF0Y2hVcmwodSkp
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoZCkgJiYgIXRoaXMubWF0
Y2hEYXRhKGQpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGgpICYm
ICF0aGlzLm1hdGNoSGVhZGVycyhoKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
ICB9OworCisgIHRoaXMubWF0Y2hVcmwgPSBmdW5jdGlvbih1KSB7CisgICAgaWYgKCF1cmwpIHJl
dHVybiB0cnVlOworICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24odXJsLnRlc3QpKSByZXR1cm4g
dXJsLnRlc3QodSk7CisgICAgcmV0dXJuIHVybCA9PSB1OworICB9OworCisgIHRoaXMubWF0Y2hI
ZWFkZXJzID0gZnVuY3Rpb24oaCkgeworICAgIGlmIChhbmd1bGFyLmlzVW5kZWZpbmVkKGhlYWRl
cnMpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGhlYWRlcnMpKSBy
ZXR1cm4gaGVhZGVycyhoKTsKKyAgICByZXR1cm4gYW5ndWxhci5lcXVhbHMoaGVhZGVycywgaCk7
CisgIH07CisKKyAgdGhpcy5tYXRjaERhdGEgPSBmdW5jdGlvbihkKSB7CisgICAgaWYgKGFuZ3Vs
YXIuaXNVbmRlZmluZWQoZGF0YSkpIHJldHVybiB0cnVlOworICAgIGlmIChkYXRhICYmIGFuZ3Vs
YXIuaXNGdW5jdGlvbihkYXRhLnRlc3QpKSByZXR1cm4gZGF0YS50ZXN0KGQpOworICAgIGlmIChk
YXRhICYmICFhbmd1bGFyLmlzU3RyaW5nKGRhdGEpKSByZXR1cm4gYW5ndWxhci50b0pzb24oZGF0
YSkgPT0gZDsKKyAgICByZXR1cm4gZGF0YSA9PSBkOworICB9OworCisgIHRoaXMudG9TdHJpbmcg
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gbWV0aG9kICsgJyAnICsgdXJsOworICB9OworfQor
CitmdW5jdGlvbiBNb2NrWGhyKCkgeworCisgIC8vIGhhY2sgZm9yIHRlc3RpbmcgJGh0dHAsICRo
dHRwQmFja2VuZAorICBNb2NrWGhyLiQkbGFzdEluc3RhbmNlID0gdGhpczsKKworICB0aGlzLm9w
ZW4gPSBmdW5jdGlvbihtZXRob2QsIHVybCwgYXN5bmMpIHsKKyAgICB0aGlzLiQkbWV0aG9kID0g
bWV0aG9kOworICAgIHRoaXMuJCR1cmwgPSB1cmw7CisgICAgdGhpcy4kJGFzeW5jID0gYXN5bmM7
CisgICAgdGhpcy4kJHJlcUhlYWRlcnMgPSB7fTsKKyAgICB0aGlzLiQkcmVzcEhlYWRlcnMgPSB7
fTsKKyAgfTsKKworICB0aGlzLnNlbmQgPSBmdW5jdGlvbihkYXRhKSB7CisgICAgdGhpcy4kJGRh
dGEgPSBkYXRhOworICB9OworCisgIHRoaXMuc2V0UmVxdWVzdEhlYWRlciA9IGZ1bmN0aW9uKGtl
eSwgdmFsdWUpIHsKKyAgICB0aGlzLiQkcmVxSGVhZGVyc1trZXldID0gdmFsdWU7CisgIH07CisK
KyAgdGhpcy5nZXRSZXNwb25zZUhlYWRlciA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAvLyB0aGUg
bG9va3VwIG11c3QgYmUgY2FzZSBpbnNlbnNpdGl2ZSwgdGhhdCdzIHdoeSB3ZSB0cnkgdHdvIHF1
aWNrIGxvb2t1cHMgYW5kIGZ1bGwgc2NhbiBhdCBsYXN0CisgICAgdmFyIGhlYWRlciA9IHRoaXMu
JCRyZXNwSGVhZGVyc1tuYW1lXTsKKyAgICBpZiAoaGVhZGVyKSByZXR1cm4gaGVhZGVyOworCisg
ICAgbmFtZSA9IGFuZ3VsYXIubG93ZXJjYXNlKG5hbWUpOworICAgIGhlYWRlciA9IHRoaXMuJCRy
ZXNwSGVhZGVyc1tuYW1lXTsKKyAgICBpZiAoaGVhZGVyKSByZXR1cm4gaGVhZGVyOworCisgICAg
aGVhZGVyID0gdW5kZWZpbmVkOworICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLiQkcmVzcEhlYWRl
cnMsIGZ1bmN0aW9uKGhlYWRlclZhbCwgaGVhZGVyTmFtZSkgeworICAgICAgaWYgKCFoZWFkZXIg
JiYgYW5ndWxhci5sb3dlcmNhc2UoaGVhZGVyTmFtZSkgPT0gbmFtZSkgaGVhZGVyID0gaGVhZGVy
VmFsOworICAgIH0pOworICAgIHJldHVybiBoZWFkZXI7CisgIH07CisKKyAgdGhpcy5nZXRBbGxS
ZXNwb25zZUhlYWRlcnMgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgbGluZXMgPSBbXTsKKworICAg
IGFuZ3VsYXIuZm9yRWFjaCh0aGlzLiQkcmVzcEhlYWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkp
IHsKKyAgICAgIGxpbmVzLnB1c2goa2V5ICsgJzogJyArIHZhbHVlKTsKKyAgICB9KTsKKyAgICBy
ZXR1cm4gbGluZXMuam9pbignXG4nKTsKKyAgfTsKKworICB0aGlzLmFib3J0ID0gYW5ndWxhci5u
b29wOworfQorCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBuZ01vY2suJHRp
bWVvdXQKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIFRoaXMgc2VydmljZSBpcyBqdXN0IGEgc2lt
cGxlIGRlY29yYXRvciBmb3Ige0BsaW5rIG5nLiR0aW1lb3V0ICR0aW1lb3V0fSBzZXJ2aWNlCisg
KiB0aGF0IGFkZHMgYSAiZmx1c2giIG1ldGhvZC4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBtZXRo
b2QKKyAqIEBuYW1lIG5nTW9jay4kdGltZW91dCNmbHVzaAorICogQG1ldGhvZE9mIG5nTW9jay4k
dGltZW91dAorICogQGRlc2NyaXB0aW9uCisgKgorICogRmx1c2hlcyB0aGUgcXVldWUgb2YgcGVu
ZGluZyB0YXNrcy4KKyAqLworCisvKioKKyAqCisgKi8KK2FuZ3VsYXIubW9jay4kUm9vdEVsZW1l
bnRQcm92aWRlciA9IGZ1bmN0aW9uKCkgeworICB0aGlzLiRnZXQgPSBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gYW5ndWxhci5lbGVtZW50KCc8ZGl2IG5nLWFwcD48L2Rpdj4nKTsKKyAgfQorfTsK
KworLyoqCisgKiBAbmdkb2Mgb3ZlcnZpZXcKKyAqIEBuYW1lIG5nTW9jaworICogQGRlc2NyaXB0
aW9uCisgKgorICogVGhlIGBuZ01vY2tgIGlzIGFuIGFuZ3VsYXIgbW9kdWxlIHdoaWNoIGlzIHVz
ZWQgd2l0aCBgbmdgIG1vZHVsZSBhbmQgYWRkcyB1bml0LXRlc3QgY29uZmlndXJhdGlvbiBhcyB3
ZWxsIGFzIHVzZWZ1bAorICogbW9ja3MgdG8gdGhlIHtAbGluayBBVVRPLiRpbmplY3RvciAkaW5q
ZWN0b3J9LgorICovCithbmd1bGFyLm1vZHVsZSgnbmdNb2NrJywgWyduZyddKS5wcm92aWRlcih7
CisgICRicm93c2VyOiBhbmd1bGFyLm1vY2suJEJyb3dzZXJQcm92aWRlciwKKyAgJGV4Y2VwdGlv
bkhhbmRsZXI6IGFuZ3VsYXIubW9jay4kRXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyLAorICAkbG9n
OiBhbmd1bGFyLm1vY2suJExvZ1Byb3ZpZGVyLAorICAkaHR0cEJhY2tlbmQ6IGFuZ3VsYXIubW9j
ay4kSHR0cEJhY2tlbmRQcm92aWRlciwKKyAgJHJvb3RFbGVtZW50OiBhbmd1bGFyLm1vY2suJFJv
b3RFbGVtZW50UHJvdmlkZXIKK30pLmNvbmZpZyhmdW5jdGlvbigkcHJvdmlkZSkgeworICAkcHJv
dmlkZS5kZWNvcmF0b3IoJyR0aW1lb3V0JywgZnVuY3Rpb24oJGRlbGVnYXRlLCAkYnJvd3Nlcikg
eworICAgICRkZWxlZ2F0ZS5mbHVzaCA9IGZ1bmN0aW9uKCkgeworICAgICAgJGJyb3dzZXIuZGVm
ZXIuZmx1c2goKTsKKyAgICB9OworICAgIHJldHVybiAkZGVsZWdhdGU7CisgIH0pOworfSk7CisK
KworLyoqCisgKiBAbmdkb2Mgb3ZlcnZpZXcKKyAqIEBuYW1lIG5nTW9ja0UyRQorICogQGRlc2Ny
aXB0aW9uCisgKgorICogVGhlIGBuZ01vY2tFMkVgIGlzIGFuIGFuZ3VsYXIgbW9kdWxlIHdoaWNo
IGNvbnRhaW5zIG1vY2tzIHN1aXRhYmxlIGZvciBlbmQtdG8tZW5kIHRlc3RpbmcuCisgKiBDdXJy
ZW50bHkgdGhlcmUgaXMgb25seSBvbmUgbW9jayBwcmVzZW50IGluIHRoaXMgbW9kdWxlIC0KKyAq
IHRoZSB7QGxpbmsgbmdNb2NrRTJFLiRodHRwQmFja2VuZCBlMmUgJGh0dHBCYWNrZW5kfSBtb2Nr
LgorICovCithbmd1bGFyLm1vZHVsZSgnbmdNb2NrRTJFJywgWyduZyddKS5jb25maWcoZnVuY3Rp
b24oJHByb3ZpZGUpIHsKKyAgJHByb3ZpZGUuZGVjb3JhdG9yKCckaHR0cEJhY2tlbmQnLCBhbmd1
bGFyLm1vY2suZTJlLiRodHRwQmFja2VuZERlY29yYXRvcik7Cit9KTsKKworLyoqCisgKiBAbmdk
b2Mgb2JqZWN0CisgKiBAbmFtZSBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kCisgKiBAZGVzY3JpcHRp
b24KKyAqIEZha2UgSFRUUCBiYWNrZW5kIGltcGxlbWVudGF0aW9uIHN1aXRhYmxlIGZvciBlbmQt
dG8tZW5kIHRlc3Rpbmcgb3IgYmFja2VuZC1sZXNzIGRldmVsb3BtZW50IG9mCisgKiBhcHBsaWNh
dGlvbnMgdGhhdCB1c2UgdGhlIHtAbGluayBuZy4kaHR0cCAkaHR0cCBzZXJ2aWNlfS4KKyAqCisg
KiAqTm90ZSo6IEZvciBmYWtlIGh0dHAgYmFja2VuZCBpbXBsZW1lbnRhdGlvbiBzdWl0YWJsZSBm
b3IgdW5pdCB0ZXN0aW5nIHBsZWFzZSBzZWUKKyAqIHtAbGluayBuZ01vY2suJGh0dHBCYWNrZW5k
IHVuaXQtdGVzdGluZyAkaHR0cEJhY2tlbmQgbW9ja30uCisgKgorICogVGhpcyBpbXBsZW1lbnRh
dGlvbiBjYW4gYmUgdXNlZCB0byByZXNwb25kIHdpdGggc3RhdGljIG9yIGR5bmFtaWMgcmVzcG9u
c2VzIHZpYSB0aGUgYHdoZW5gIGFwaQorICogYW5kIGl0cyBzaG9ydGN1dHMgKGB3aGVuR0VUYCwg
YHdoZW5QT1NUYCwgZXRjKSBhbmQgb3B0aW9uYWxseSBwYXNzIHRocm91Z2ggcmVxdWVzdHMgdG8g
dGhlCisgKiByZWFsICRodHRwQmFja2VuZCBmb3Igc3BlY2lmaWMgcmVxdWVzdHMgKGUuZy4gdG8g
aW50ZXJhY3Qgd2l0aCBjZXJ0YWluIHJlbW90ZSBhcGlzIG9yIHRvIGZldGNoCisgKiB0ZW1wbGF0
ZXMgZnJvbSBhIHdlYnNlcnZlcikuCisgKgorICogQXMgb3Bwb3NlZCB0byB1bml0LXRlc3Rpbmcs
IGluIGFuIGVuZC10by1lbmQgdGVzdGluZyBzY2VuYXJpbyBvciBpbiBzY2VuYXJpbyB3aGVuIGFu
IGFwcGxpY2F0aW9uCisgKiBpcyBiZWluZyBkZXZlbG9wZWQgd2l0aCB0aGUgcmVhbCBiYWNrZW5k
IGFwaSByZXBsYWNlZCB3aXRoIGEgbW9jaywgaXQgaXMgb2Z0ZW4gZGVzaXJhYmxlIGZvcgorICog
Y2VydGFpbiBjYXRlZ29yeSBvZiByZXF1ZXN0cyB0byBieXBhc3MgdGhlIG1vY2sgYW5kIGlzc3Vl
IGEgcmVhbCBodHRwIHJlcXVlc3QgKGUuZy4gdG8gZmV0Y2gKKyAqIHRlbXBsYXRlcyBvciBzdGF0
aWMgZmlsZXMgZnJvbSB0aGUgd2Vic2VydmVyKS4gVG8gY29uZmlndXJlIHRoZSBiYWNrZW5kIHdp
dGggdGhpcyBiZWhhdmlvcgorICogdXNlIHRoZSBgcGFzc1Rocm91Z2hgIHJlcXVlc3QgaGFuZGxl
ciBvZiBgd2hlbmAgaW5zdGVhZCBvZiBgcmVzcG9uZGAuCisgKgorICogQWRkaXRpb25hbGx5LCB3
ZSBkb24ndCB3YW50IHRvIG1hbnVhbGx5IGhhdmUgdG8gZmx1c2ggbW9ja2VkIG91dCByZXF1ZXN0
cyBsaWtlIHdlIGRvIGR1cmluZyB1bml0CisgKiB0ZXN0aW5nLiBGb3IgdGhpcyByZWFzb24gdGhl
IGUyZSAkaHR0cEJhY2tlbmQgYXV0b21hdGljYWxseSBmbHVzaGVzIG1vY2tlZCBvdXQgcmVxdWVz
dHMKKyAqIGF1dG9tYXRpY2FsbHksIGNsb3NlbHkgc2ltdWxhdGluZyB0aGUgYmVoYXZpb3Igb2Yg
dGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4KKyAqCisgKiBUbyBzZXR1cCB0aGUgYXBwbGljYXRp
b24gdG8gcnVuIHdpdGggdGhpcyBodHRwIGJhY2tlbmQsIHlvdSBoYXZlIHRvIGNyZWF0ZSBhIG1v
ZHVsZSB0aGF0IGRlcGVuZHMKKyAqIG9uIHRoZSBgbmdNb2NrRTJFYCBhbmQgeW91ciBhcHBsaWNh
dGlvbiBtb2R1bGVzIGFuZCBkZWZpbmVzIHRoZSBmYWtlIGJhY2tlbmQ6CisgKgorICogPHByZT4K
KyAqICAgbXlBcHBEZXYgPSBhbmd1bGFyLm1vZHVsZSgnbXlBcHBEZXYnLCBbJ215QXBwJywgJ25n
TW9ja0UyRSddKTsKKyAqICAgbXlBcHBEZXYucnVuKGZ1bmN0aW9uKCRodHRwQmFja2VuZCkgewor
ICogICAgIHBob25lcyA9IFt7bmFtZTogJ3Bob25lMSd9LCB7bmFtZTogJ3Bob25lMid9XTsKKyAq
CisgKiAgICAgLy8gcmV0dXJucyB0aGUgY3VycmVudCBsaXN0IG9mIHBob25lcworICogICAgICRo
dHRwQmFja2VuZC53aGVuR0VUKCcvcGhvbmVzJykucmVzcG9uZChwaG9uZXMpOworICoKKyAqICAg
ICAvLyBhZGRzIGEgbmV3IHBob25lIHRvIHRoZSBwaG9uZXMgYXJyYXkKKyAqICAgICAkaHR0cEJh
Y2tlbmQud2hlblBPU1QoJy9waG9uZXMnKS5yZXNwb25kKGZ1bmN0aW9uKG1ldGhvZCwgdXJsLCBk
YXRhKSB7CisgKiAgICAgICBwaG9uZXMucHVzaChhbmd1bGFyLmZyb21KU09OKGRhdGEpKTsKKyAq
ICAgICB9KTsKKyAqICAgICAkaHR0cEJhY2tlbmQud2hlbkdFVCgvXlwvdGVtcGxhdGVzXC8vKS5w
YXNzVGhyb3VnaCgpOworICogICAgIC8vLi4uCisgKiAgIH0pOworICogPC9wcmU+CisgKgorICog
QWZ0ZXJ3YXJkcywgYm9vdHN0cmFwIHlvdXIgYXBwIHdpdGggdGhpcyBuZXcgbW9kdWxlLgorICov
CisKKy8qKgorICogQG5nZG9jIG1ldGhvZAorICogQG5hbWUgbmdNb2NrRTJFLiRodHRwQmFja2Vu
ZCN3aGVuCisgKiBAbWV0aG9kT2YgbmdNb2NrRTJFLiRodHRwQmFja2VuZAorICogQGRlc2NyaXB0
aW9uCisgKiBDcmVhdGVzIGEgbmV3IGJhY2tlbmQgZGVmaW5pdGlvbi4KKyAqCisgKiBAcGFyYW0g
e3N0cmluZ30gbWV0aG9kIEhUVFAgbWV0aG9kLgorICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1
cmwgSFRUUCB1cmwuCisgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKT19IGRhdGEgSFRUUCByZXF1
ZXN0IGJvZHkuCisgKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24oT2JqZWN0KSk9fSBoZWFkZXJz
IEhUVFAgaGVhZGVycyBvciBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGh0dHAgaGVhZGVyCisgKiAg
IG9iamVjdCBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBoZWFkZXJzIG1hdGNoIHRoZSBjdXJyZW50
IGRlZmluaXRpb24uCisgKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2Jq
ZWN0IHdpdGggYHJlc3BvbmRgIGFuZCBgcGFzc1Rocm91Z2hgIG1ldGhvZHMgdGhhdAorICogICBj
b250cm9sIGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBpcyBoYW5kbGVkLgorICoKKyAqICAtIHJlc3Bv
bmQg4oCTIGB7ZnVuY3Rpb24oW3N0YXR1cyxdIGRhdGFbLCBoZWFkZXJzXSl8ZnVuY3Rpb24oZnVu
Y3Rpb24obWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnMpfWAKKyAqICAgIOKAkyBUaGUgcmVzcG9u
ZCBtZXRob2QgdGFrZXMgYSBzZXQgb2Ygc3RhdGljIGRhdGEgdG8gYmUgcmV0dXJuZWQgb3IgYSBm
dW5jdGlvbiB0aGF0IGNhbiByZXR1cm4KKyAqICAgIGFuIGFycmF5IGNvbnRhaW5pbmcgcmVzcG9u
c2Ugc3RhdHVzIChudW1iZXIpLCByZXNwb25zZSBkYXRhIChzdHJpbmcpIGFuZCByZXNwb25zZSBo
ZWFkZXJzCisgKiAgICAoT2JqZWN0KS4KKyAqICAtIHBhc3NUaHJvdWdoIOKAkyBge2Z1bmN0aW9u
KCl9YCDigJMgQW55IHJlcXVlc3QgbWF0Y2hpbmcgYSBiYWNrZW5kIGRlZmluaXRpb24gd2l0aCBg
cGFzc1Rocm91Z2hgCisgKiAgICBoYW5kbGVyLCB3aWxsIGJlIHBhc3MgdGhyb3VnaCB0byB0aGUg
cmVhbCBiYWNrZW5kIChhbiBYSFIgcmVxdWVzdCB3aWxsIGJlIG1hZGUgdG8gdGhlCisgKiAgICBz
ZXJ2ZXIuCisgKi8KKworLyoqCisgKiBAbmdkb2MgbWV0aG9kCisgKiBAbmFtZSBuZ01vY2tFMkUu
JGh0dHBCYWNrZW5kI3doZW5HRVQKKyAqIEBtZXRob2RPZiBuZ01vY2tFMkUuJGh0dHBCYWNrZW5k
CisgKiBAZGVzY3JpcHRpb24KKyAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZv
ciBHRVQgcmVxdWVzdHMuIEZvciBtb3JlIGluZm8gc2VlIGB3aGVuKClgLgorICoKKyAqIEBwYXJh
bSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgorICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0
aW9uKE9iamVjdCkpPX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCisgKiBAcmV0dXJucyB7cmVxdWVz
dEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIGFuZCBgcGFzc1Rocm91
Z2hgIG1ldGhvZHMgdGhhdAorICogICBjb250cm9sIGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBpcyBo
YW5kbGVkLgorICovCisKKy8qKgorICogQG5nZG9jIG1ldGhvZAorICogQG5hbWUgbmdNb2NrRTJF
LiRodHRwQmFja2VuZCN3aGVuSEVBRAorICogQG1ldGhvZE9mIG5nTW9ja0UyRS4kaHR0cEJhY2tl
bmQKKyAqIEBkZXNjcmlwdGlvbgorICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24g
Zm9yIEhFQUQgcmVxdWVzdHMuIEZvciBtb3JlIGluZm8gc2VlIGB3aGVuKClgLgorICoKKyAqIEBw
YXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgorICogQHBhcmFtIHsoT2JqZWN0fGZ1
bmN0aW9uKE9iamVjdCkpPX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCisgKiBAcmV0dXJucyB7cmVx
dWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIGFuZCBgcGFzc1Ro
cm91Z2hgIG1ldGhvZHMgdGhhdAorICogICBjb250cm9sIGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBp
cyBoYW5kbGVkLgorICovCisKKy8qKgorICogQG5nZG9jIG1ldGhvZAorICogQG5hbWUgbmdNb2Nr
RTJFLiRodHRwQmFja2VuZCN3aGVuREVMRVRFCisgKiBAbWV0aG9kT2YgbmdNb2NrRTJFLiRodHRw
QmFja2VuZAorICogQGRlc2NyaXB0aW9uCisgKiBDcmVhdGVzIGEgbmV3IGJhY2tlbmQgZGVmaW5p
dGlvbiBmb3IgREVMRVRFIHJlcXVlc3RzLiBGb3IgbW9yZSBpbmZvIHNlZSBgd2hlbigpYC4KKyAq
CisgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVybCBIVFRQIHVybC4KKyAqIEBwYXJhbSB7KE9i
amVjdHxmdW5jdGlvbihPYmplY3QpKT19IGhlYWRlcnMgSFRUUCBoZWFkZXJzLgorICogQHJldHVy
bnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGByZXNwb25kYCBhbmQg
YHBhc3NUaHJvdWdoYCBtZXRob2RzIHRoYXQKKyAqICAgY29udHJvbCBob3cgYSBtYXRjaGVkIHJl
cXVlc3QgaXMgaGFuZGxlZC4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBtZXRob2QKKyAqIEBuYW1l
IG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQjd2hlblBPU1QKKyAqIEBtZXRob2RPZiBuZ01vY2tFMkUu
JGh0dHBCYWNrZW5kCisgKiBAZGVzY3JpcHRpb24KKyAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBk
ZWZpbml0aW9uIGZvciBQT1NUIHJlcXVlc3RzLiBGb3IgbW9yZSBpbmZvIHNlZSBgd2hlbigpYC4K
KyAqCisgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVybCBIVFRQIHVybC4KKyAqIEBwYXJhbSB7
KHN0cmluZ3xSZWdFeHApPX0gZGF0YSBIVFRQIHJlcXVlc3QgYm9keS4KKyAqIEBwYXJhbSB7KE9i
amVjdHxmdW5jdGlvbihPYmplY3QpKT19IGhlYWRlcnMgSFRUUCBoZWFkZXJzLgorICogQHJldHVy
bnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGByZXNwb25kYCBhbmQg
YHBhc3NUaHJvdWdoYCBtZXRob2RzIHRoYXQKKyAqICAgY29udHJvbCBob3cgYSBtYXRjaGVkIHJl
cXVlc3QgaXMgaGFuZGxlZC4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBtZXRob2QKKyAqIEBuYW1l
IG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQjd2hlblBVVAorICogQG1ldGhvZE9mIG5nTW9ja0UyRS4k
aHR0cEJhY2tlbmQKKyAqIEBkZXNjcmlwdGlvbgorICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRl
ZmluaXRpb24gZm9yIFBVVCByZXF1ZXN0cy4gIEZvciBtb3JlIGluZm8gc2VlIGB3aGVuKClgLgor
ICoKKyAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgorICogQHBhcmFtIHso
c3RyaW5nfFJlZ0V4cCk9fSBkYXRhIEhUVFAgcmVxdWVzdCBib2R5LgorICogQHBhcmFtIHsoT2Jq
ZWN0fGZ1bmN0aW9uKE9iamVjdCkpPX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCisgKiBAcmV0dXJu
cyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIGFuZCBg
cGFzc1Rocm91Z2hgIG1ldGhvZHMgdGhhdAorICogICBjb250cm9sIGhvdyBhIG1hdGNoZWQgcmVx
dWVzdCBpcyBoYW5kbGVkLgorICovCisKKy8qKgorICogQG5nZG9jIG1ldGhvZAorICogQG5hbWUg
bmdNb2NrRTJFLiRodHRwQmFja2VuZCN3aGVuUEFUQ0gKKyAqIEBtZXRob2RPZiBuZ01vY2tFMkUu
JGh0dHBCYWNrZW5kCisgKiBAZGVzY3JpcHRpb24KKyAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBk
ZWZpbml0aW9uIGZvciBQQVRDSCByZXF1ZXN0cy4gIEZvciBtb3JlIGluZm8gc2VlIGB3aGVuKClg
LgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgorICogQHBhcmFt
IHsoc3RyaW5nfFJlZ0V4cCk9fSBkYXRhIEhUVFAgcmVxdWVzdCBib2R5LgorICogQHBhcmFtIHso
T2JqZWN0fGZ1bmN0aW9uKE9iamVjdCkpPX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCisgKiBAcmV0
dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIGFu
ZCBgcGFzc1Rocm91Z2hgIG1ldGhvZHMgdGhhdAorICogICBjb250cm9sIGhvdyBhIG1hdGNoZWQg
cmVxdWVzdCBpcyBoYW5kbGVkLgorICovCisKKy8qKgorICogQG5nZG9jIG1ldGhvZAorICogQG5h
bWUgbmdNb2NrRTJFLiRodHRwQmFja2VuZCN3aGVuSlNPTlAKKyAqIEBtZXRob2RPZiBuZ01vY2tF
MkUuJGh0dHBCYWNrZW5kCisgKiBAZGVzY3JpcHRpb24KKyAqIENyZWF0ZXMgYSBuZXcgYmFja2Vu
ZCBkZWZpbml0aW9uIGZvciBKU09OUCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4o
KWAuCisgKgorICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCisgKiBAcmV0
dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIGFu
ZCBgcGFzc1Rocm91Z2hgIG1ldGhvZHMgdGhhdAorICogICBjb250cm9sIGhvdyBhIG1hdGNoZWQg
cmVxdWVzdCBpcyBoYW5kbGVkLgorICovCithbmd1bGFyLm1vY2suZTJlID0ge307Cithbmd1bGFy
Lm1vY2suZTJlLiRodHRwQmFja2VuZERlY29yYXRvciA9IFsnJGRlbGVnYXRlJywgJyRicm93c2Vy
JywgY3JlYXRlSHR0cEJhY2tlbmRNb2NrXTsKKworCithbmd1bGFyLm1vY2suY2xlYXJEYXRhQ2Fj
aGUgPSBmdW5jdGlvbigpIHsKKyAgdmFyIGtleSwKKyAgICAgIGNhY2hlID0gYW5ndWxhci5lbGVt
ZW50LmNhY2hlOworCisgIGZvcihrZXkgaW4gY2FjaGUpIHsKKyAgICBpZiAoY2FjaGUuaGFzT3du
UHJvcGVydHkoa2V5KSkgeworICAgICAgdmFyIGhhbmRsZSA9IGNhY2hlW2tleV0uaGFuZGxlOwor
CisgICAgICBoYW5kbGUgJiYgYW5ndWxhci5lbGVtZW50KGhhbmRsZS5lbGVtKS51bmJpbmQoKTsK
KyAgICAgIGRlbGV0ZSBjYWNoZVtrZXldOworICAgIH0KKyAgfQorfTsKKworCit3aW5kb3cuanN0
ZXN0ZHJpdmVyICYmIChmdW5jdGlvbih3aW5kb3cpIHsKKyAgLyoqCisgICAqIEdsb2JhbCBtZXRo
b2QgdG8gb3V0cHV0IGFueSBudW1iZXIgb2Ygb2JqZWN0cyBpbnRvIEpTVEQgY29uc29sZS4gVXNl
ZnVsIGZvciBkZWJ1Z2dpbmcuCisgICAqLworICB3aW5kb3cuZHVtcCA9IGZ1bmN0aW9uKCkgewor
ICAgIHZhciBhcmdzID0gW107CisgICAgYW5ndWxhci5mb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rp
b24oYXJnKSB7CisgICAgICBhcmdzLnB1c2goYW5ndWxhci5tb2NrLmR1bXAoYXJnKSk7CisgICAg
fSk7CisgICAganN0ZXN0ZHJpdmVyLmNvbnNvbGUubG9nLmFwcGx5KGpzdGVzdGRyaXZlci5jb25z
b2xlLCBhcmdzKTsKKyAgICBpZiAod2luZG93LmNvbnNvbGUpIHsKKyAgICAgIHdpbmRvdy5jb25z
b2xlLmxvZy5hcHBseSh3aW5kb3cuY29uc29sZSwgYXJncyk7CisgICAgfQorICB9OworfSkod2lu
ZG93KTsKKworCit3aW5kb3cuamFzbWluZSAmJiAoZnVuY3Rpb24od2luZG93KSB7CisKKyAgYWZ0
ZXJFYWNoKGZ1bmN0aW9uKCkgeworICAgIHZhciBzcGVjID0gZ2V0Q3VycmVudFNwZWMoKTsKKyAg
ICB2YXIgaW5qZWN0b3IgPSBzcGVjLiRpbmplY3RvcjsKKworICAgIHNwZWMuJGluamVjdG9yID0g
bnVsbDsKKyAgICBzcGVjLiRtb2R1bGVzID0gbnVsbDsKKworICAgIGlmIChpbmplY3Rvcikgewor
ICAgICAgaW5qZWN0b3IuZ2V0KCckcm9vdEVsZW1lbnQnKS51bmJpbmQoKTsKKyAgICAgIGluamVj
dG9yLmdldCgnJGJyb3dzZXInKS5wb2xsRm5zLmxlbmd0aCA9IDA7CisgICAgfQorCisgICAgYW5n
dWxhci5tb2NrLmNsZWFyRGF0YUNhY2hlKCk7CisKKyAgICAvLyBjbGVhbiB1cCBqcXVlcnkncyBm
cmFnbWVudCBjYWNoZQorICAgIGFuZ3VsYXIuZm9yRWFjaChhbmd1bGFyLmVsZW1lbnQuZnJhZ21l
bnRzLCBmdW5jdGlvbih2YWwsIGtleSkgeworICAgICAgZGVsZXRlIGFuZ3VsYXIuZWxlbWVudC5m
cmFnbWVudHNba2V5XTsKKyAgICB9KTsKKworICAgIE1vY2tYaHIuJCRsYXN0SW5zdGFuY2UgPSBu
dWxsOworCisgICAgYW5ndWxhci5mb3JFYWNoKGFuZ3VsYXIuY2FsbGJhY2tzLCBmdW5jdGlvbih2
YWwsIGtleSkgeworICAgICAgZGVsZXRlIGFuZ3VsYXIuY2FsbGJhY2tzW2tleV07CisgICAgfSk7
CisgICAgYW5ndWxhci5jYWxsYmFja3MuY291bnRlciA9IDA7CisgIH0pOworCisgIGZ1bmN0aW9u
IGdldEN1cnJlbnRTcGVjKCkgeworICAgIHJldHVybiBqYXNtaW5lLmdldEVudigpLmN1cnJlbnRT
cGVjOworICB9CisKKyAgZnVuY3Rpb24gaXNTcGVjUnVubmluZygpIHsKKyAgICB2YXIgc3BlYyA9
IGdldEN1cnJlbnRTcGVjKCk7CisgICAgcmV0dXJuIHNwZWMgJiYgc3BlYy5xdWV1ZS5ydW5uaW5n
OworICB9CisKKyAgLyoqCisgICAqIEBuZ2RvYyBmdW5jdGlvbgorICAgKiBAbmFtZSBhbmd1bGFy
Lm1vY2subW9kdWxlCisgICAqIEBkZXNjcmlwdGlvbgorICAgKgorICAgKiAqTk9URSo6IFRoaXMg
aXMgZnVuY3Rpb24gaXMgYWxzbyBwdWJsaXNoZWQgb24gd2luZG93IGZvciBlYXN5IGFjY2Vzcy48
YnI+CisgICAqICpOT1RFKjogT25seSBhdmFpbGFibGUgd2l0aCB7QGxpbmsgaHR0cDovL3Bpdm90
YWwuZ2l0aHViLmNvbS9qYXNtaW5lLyBqYXNtaW5lfS4KKyAgICoKKyAgICogVGhpcyBmdW5jdGlv
biByZWdpc3RlcnMgYSBtb2R1bGUgY29uZmlndXJhdGlvbiBjb2RlLiBJdCBjb2xsZWN0cyB0aGUg
Y29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorICAgKiB3aGljaCB3aWxsIGJlIHVzZWQgd2hlbiB0
aGUgaW5qZWN0b3IgaXMgY3JlYXRlZCBieSB7QGxpbmsgYW5ndWxhci5tb2NrLmluamVjdCBpbmpl
Y3R9LgorICAgKgorICAgKiBTZWUge0BsaW5rIGFuZ3VsYXIubW9jay5pbmplY3QgaW5qZWN0fSBm
b3IgdXNhZ2UgZXhhbXBsZQorICAgKgorICAgKiBAcGFyYW0gey4uLihzdHJpbmd8RnVuY3Rpb24p
fSBmbnMgYW55IG51bWJlciBvZiBtb2R1bGVzIHdoaWNoIGFyZSByZXByZXNlbnRlZCBhcyBzdHJp
bmcKKyAgICogICAgICAgIGFsaWFzZXMgb3IgYXMgYW5vbnltb3VzIG1vZHVsZSBpbml0aWFsaXph
dGlvbiBmdW5jdGlvbnMuIFRoZSBtb2R1bGVzIGFyZSB1c2VkIHRvCisgICAqICAgICAgICBjb25m
aWd1cmUgdGhlIGluamVjdG9yLiBUaGUgJ25nJyBhbmQgJ25nTW9jaycgbW9kdWxlcyBhcmUgYXV0
b21hdGljYWxseSBsb2FkZWQuCisgICAqLworICB3aW5kb3cubW9kdWxlID0gYW5ndWxhci5tb2Nr
Lm1vZHVsZSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBtb2R1bGVGbnMgPSBBcnJheS5wcm90b3R5
cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOworICAgIHJldHVybiBpc1NwZWNSdW5uaW5nKCkg
PyB3b3JrRm4oKSA6IHdvcmtGbjsKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICBmdW5j
dGlvbiB3b3JrRm4oKSB7CisgICAgICB2YXIgc3BlYyA9IGdldEN1cnJlbnRTcGVjKCk7CisgICAg
ICBpZiAoc3BlYy4kaW5qZWN0b3IpIHsKKyAgICAgICAgdGhyb3cgRXJyb3IoJ0luamVjdG9yIGFs
cmVhZHkgY3JlYXRlZCwgY2FuIG5vdCByZWdpc3RlciBhIG1vZHVsZSEnKTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIHZhciBtb2R1bGVzID0gc3BlYy4kbW9kdWxlcyB8fCAoc3BlYy4kbW9kdWxl
cyA9IFtdKTsKKyAgICAgICAgYW5ndWxhci5mb3JFYWNoKG1vZHVsZUZucywgZnVuY3Rpb24obW9k
dWxlKSB7CisgICAgICAgICAgbW9kdWxlcy5wdXNoKG1vZHVsZSk7CisgICAgICAgIH0pOworICAg
ICAgfQorICAgIH0KKyAgfTsKKworICAvKioKKyAgICogQG5nZG9jIGZ1bmN0aW9uCisgICAqIEBu
YW1lIGFuZ3VsYXIubW9jay5pbmplY3QKKyAgICogQGRlc2NyaXB0aW9uCisgICAqCisgICAqICpO
T1RFKjogVGhpcyBpcyBmdW5jdGlvbiBpcyBhbHNvIHB1Ymxpc2hlZCBvbiB3aW5kb3cgZm9yIGVh
c3kgYWNjZXNzLjxicj4KKyAgICogKk5PVEUqOiBPbmx5IGF2YWlsYWJsZSB3aXRoIHtAbGluayBo
dHRwOi8vcGl2b3RhbC5naXRodWIuY29tL2phc21pbmUvIGphc21pbmV9LgorICAgKgorICAgKiBU
aGUgaW5qZWN0IGZ1bmN0aW9uIHdyYXBzIGEgZnVuY3Rpb24gaW50byBhbiBpbmplY3RhYmxlIGZ1
bmN0aW9uLiBUaGUgaW5qZWN0KCkgY3JlYXRlcyBuZXcKKyAgICogaW5zdGFuY2Ugb2Yge0BsaW5r
IEFVVE8uJGluamVjdG9yICRpbmplY3Rvcn0gcGVyIHRlc3QsIHdoaWNoIGlzIHRoZW4gdXNlZCBm
b3IKKyAgICogcmVzb2x2aW5nIHJlZmVyZW5jZXMuCisgICAqCisgICAqIFNlZSBhbHNvIHtAbGlu
ayBhbmd1bGFyLm1vY2subW9kdWxlIG1vZHVsZX0KKyAgICoKKyAgICogRXhhbXBsZSBvZiB3aGF0
IGEgdHlwaWNhbCBqYXNtaW5lIHRlc3RzIGxvb2tzIGxpa2Ugd2l0aCB0aGUgaW5qZWN0IG1ldGhv
ZC4KKyAgICogPHByZT4KKyAgICoKKyAgICogICBhbmd1bGFyLm1vZHVsZSgnbXlBcHBsaWNhdGlv
bk1vZHVsZScsIFtdKQorICAgKiAgICAgICAudmFsdWUoJ21vZGUnLCAnYXBwJykKKyAgICogICAg
ICAgLnZhbHVlKCd2ZXJzaW9uJywgJ3YxLjAuMScpOworICAgKgorICAgKgorICAgKiAgIGRlc2Ny
aWJlKCdNeUFwcCcsIGZ1bmN0aW9uKCkgeworICAgKgorICAgKiAgICAgLy8gWW91IG5lZWQgdG8g
bG9hZCBtb2R1bGVzIHRoYXQgeW91IHdhbnQgdG8gdGVzdCwKKyAgICogICAgIC8vIGl0IGxvYWRz
IG9ubHkgdGhlICJuZyIgbW9kdWxlIGJ5IGRlZmF1bHQuCisgICAqICAgICBiZWZvcmVFYWNoKG1v
ZHVsZSgnbXlBcHBsaWNhdGlvbk1vZHVsZScpKTsKKyAgICoKKyAgICoKKyAgICogICAgIC8vIGlu
amVjdCgpIGlzIHVzZWQgdG8gaW5qZWN0IGFyZ3VtZW50cyBvZiBhbGwgZ2l2ZW4gZnVuY3Rpb25z
CisgICAqICAgICBpdCgnc2hvdWxkIHByb3ZpZGUgYSB2ZXJzaW9uJywgaW5qZWN0KGZ1bmN0aW9u
KG1vZGUsIHZlcnNpb24pIHsKKyAgICogICAgICAgZXhwZWN0KHZlcnNpb24pLnRvRXF1YWwoJ3Yx
LjAuMScpOworICAgKiAgICAgICBleHBlY3QobW9kZSkudG9FcXVhbCgnYXBwJyk7CisgICAqICAg
ICB9KSk7CisgICAqCisgICAqCisgICAqICAgICAvLyBUaGUgaW5qZWN0IGFuZCBtb2R1bGUgbWV0
aG9kIGNhbiBhbHNvIGJlIHVzZWQgaW5zaWRlIG9mIHRoZSBpdCBvciBiZWZvcmVFYWNoCisgICAq
ICAgICBpdCgnc2hvdWxkIG92ZXJyaWRlIGEgdmVyc2lvbiBhbmQgdGVzdCB0aGUgbmV3IHZlcnNp
b24gaXMgaW5qZWN0ZWQnLCBmdW5jdGlvbigpIHsKKyAgICogICAgICAgLy8gbW9kdWxlKCkgdGFr
ZXMgZnVuY3Rpb25zIG9yIHN0cmluZ3MgKG1vZHVsZSBhbGlhc2VzKQorICAgKiAgICAgICBtb2R1
bGUoZnVuY3Rpb24oJHByb3ZpZGUpIHsKKyAgICogICAgICAgICAkcHJvdmlkZS52YWx1ZSgndmVy
c2lvbicsICdvdmVycmlkZGVuJyk7IC8vIG92ZXJyaWRlIHZlcnNpb24gaGVyZQorICAgKiAgICAg
ICB9KTsKKyAgICoKKyAgICogICAgICAgaW5qZWN0KGZ1bmN0aW9uKHZlcnNpb24pIHsKKyAgICog
ICAgICAgICBleHBlY3QodmVyc2lvbikudG9FcXVhbCgnb3ZlcnJpZGRlbicpOworICAgKiAgICAg
ICB9KTsKKyAgICogICAgICkpOworICAgKiAgIH0pOworICAgKgorICAgKiA8L3ByZT4KKyAgICoK
KyAgICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gZm5zIGFueSBudW1iZXIgb2YgZnVuY3Rpb25zIHdo
aWNoIHdpbGwgYmUgaW5qZWN0ZWQgdXNpbmcgdGhlIGluamVjdG9yLgorICAgKi8KKyAgd2luZG93
LmluamVjdCA9IGFuZ3VsYXIubW9jay5pbmplY3QgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgYmxv
Y2tGbnMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOworICAgIHZh
ciBlcnJvckZvclN0YWNrID0gbmV3IEVycm9yKCdEZWNsYXJhdGlvbiBMb2NhdGlvbicpOworICAg
IHJldHVybiBpc1NwZWNSdW5uaW5nKCkgPyB3b3JrRm4oKSA6IHdvcmtGbjsKKyAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKyAgICBmdW5jdGlvbiB3b3JrRm4oKSB7CisgICAgICB2YXIgc3BlYyA9
IGdldEN1cnJlbnRTcGVjKCk7CisgICAgICB2YXIgbW9kdWxlcyA9IHNwZWMuJG1vZHVsZXMgfHwg
W107CisgICAgICBtb2R1bGVzLnVuc2hpZnQoJ25nTW9jaycpOworICAgICAgbW9kdWxlcy51bnNo
aWZ0KCduZycpOworICAgICAgdmFyIGluamVjdG9yID0gc3BlYy4kaW5qZWN0b3I7CisgICAgICBp
ZiAoIWluamVjdG9yKSB7CisgICAgICAgIGluamVjdG9yID0gc3BlYy4kaW5qZWN0b3IgPSBhbmd1
bGFyLmluamVjdG9yKG1vZHVsZXMpOworICAgICAgfQorICAgICAgZm9yKHZhciBpID0gMCwgaWkg
PSBibG9ja0Zucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgaW5qZWN0b3IuaW52b2tlKGJsb2NrRm5zW2ldIHx8IGFuZ3VsYXIubm9vcCwgdGhpcyk7Cisg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICBpZihlLnN0YWNrKSBlLnN0YWNrICs9ICAn
XG4nICsgZXJyb3JGb3JTdGFjay5zdGFjazsKKyAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9
IGZpbmFsbHkgeworICAgICAgICAgIGVycm9yRm9yU3RhY2sgPSBudWxsOworICAgICAgICB9Cisg
ICAgICB9CisgICAgfQorICB9OworfSkod2luZG93KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jv
d2VyX2NvbXBvbmVudHMvYW5ndWxhci9hbmd1bGFyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5n
dWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvYW5ndWxhci9hbmd1bGFyLmpzCShyZXZpc2lvbiAwKQor
KysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29tcG9uZW50cy9hbmd1bGFyL2FuZ3VsYXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDg0NyBAQAorLyoqCisgKiBAbGljZW5zZSBBbmd1bGFy
SlMgdjEuMC43CisgKiAoYykgMjAxMC0yMDEyIEdvb2dsZSwgSW5jLiBodHRwOi8vYW5ndWxhcmpz
Lm9yZworICogTGljZW5zZTogTUlUCisgKi8KKyhmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50LCB1
bmRlZmluZWQpIHsKKyd1c2Ugc3RyaWN0JzsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmxv
d2VyY2FzZQorICogQGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBz
cGVjaWZpZWQgc3RyaW5nIHRvIGxvd2VyY2FzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcg
U3RyaW5nIHRvIGJlIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuCisgKiBAcmV0dXJucyB7c3RyaW5n
fSBMb3dlcmNhc2VkIHN0cmluZy4KKyAqLwordmFyIGxvd2VyY2FzZSA9IGZ1bmN0aW9uKHN0cmlu
Zyl7cmV0dXJuIGlzU3RyaW5nKHN0cmluZykgPyBzdHJpbmcudG9Mb3dlckNhc2UoKSA6IHN0cmlu
Zzt9OworCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLnVwcGVy
Y2FzZQorICogQGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBzcGVj
aWZpZWQgc3RyaW5nIHRvIHVwcGVyY2FzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3Ry
aW5nIHRvIGJlIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuCisgKiBAcmV0dXJucyB7c3RyaW5nfSBV
cHBlcmNhc2VkIHN0cmluZy4KKyAqLwordmFyIHVwcGVyY2FzZSA9IGZ1bmN0aW9uKHN0cmluZyl7
cmV0dXJuIGlzU3RyaW5nKHN0cmluZykgPyBzdHJpbmcudG9VcHBlckNhc2UoKSA6IHN0cmluZzt9
OworCisKK3ZhciBtYW51YWxMb3dlcmNhc2UgPSBmdW5jdGlvbihzKSB7CisgIHJldHVybiBpc1N0
cmluZyhzKQorICAgICAgPyBzLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKGNoKSB7cmV0dXJu
IFN0cmluZy5mcm9tQ2hhckNvZGUoY2guY2hhckNvZGVBdCgwKSB8IDMyKTt9KQorICAgICAgOiBz
OworfTsKK3ZhciBtYW51YWxVcHBlcmNhc2UgPSBmdW5jdGlvbihzKSB7CisgIHJldHVybiBpc1N0
cmluZyhzKQorICAgICAgPyBzLnJlcGxhY2UoL1thLXpdL2csIGZ1bmN0aW9uKGNoKSB7cmV0dXJu
IFN0cmluZy5mcm9tQ2hhckNvZGUoY2guY2hhckNvZGVBdCgwKSAmIH4zMik7fSkKKyAgICAgIDog
czsKK307CisKKworLy8gU3RyaW5nI3RvTG93ZXJDYXNlIGFuZCBTdHJpbmcjdG9VcHBlckNhc2Ug
ZG9uJ3QgcHJvZHVjZSBjb3JyZWN0IHJlc3VsdHMgaW4gYnJvd3NlcnMgd2l0aCBUdXJraXNoCisv
LyBsb2NhbGUsIGZvciB0aGlzIHJlYXNvbiB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzIGNhc2UgYW5k
IHJlZGVmaW5lIGxvd2VyY2FzZS91cHBlcmNhc2UgbWV0aG9kcworLy8gd2l0aCBjb3JyZWN0IGJ1
dCBzbG93ZXIgYWx0ZXJuYXRpdmVzLgoraWYgKCdpJyAhPT0gJ0knLnRvTG93ZXJDYXNlKCkpIHsK
KyAgbG93ZXJjYXNlID0gbWFudWFsTG93ZXJjYXNlOworICB1cHBlcmNhc2UgPSBtYW51YWxVcHBl
cmNhc2U7Cit9CisKKwordmFyIC8qKiBob2xkcyBtYWpvciB2ZXJzaW9uIG51bWJlciBmb3IgSUUg
b3IgTmFOIGZvciByZWFsIGJyb3dzZXJzICovCisgICAgbXNpZSAgICAgICAgICAgICAgPSBpbnQo
KC9tc2llIChcZCspLy5leGVjKGxvd2VyY2FzZShuYXZpZ2F0b3IudXNlckFnZW50KSkgfHwgW10p
WzFdKSwKKyAgICBqcUxpdGUsICAgICAgICAgICAvLyBkZWxheSBiaW5kaW5nIHNpbmNlIGpRdWVy
eSBjb3VsZCBiZSBsb2FkZWQgYWZ0ZXIgdXMuCisgICAgalF1ZXJ5LCAgICAgICAgICAgLy8gZGVs
YXkgYmluZGluZworICAgIHNsaWNlICAgICAgICAgICAgID0gW10uc2xpY2UsCisgICAgcHVzaCAg
ICAgICAgICAgICAgPSBbXS5wdXNoLAorICAgIHRvU3RyaW5nICAgICAgICAgID0gT2JqZWN0LnBy
b3RvdHlwZS50b1N0cmluZywKKworICAgIC8qKiBAbmFtZSBhbmd1bGFyICovCisgICAgYW5ndWxh
ciAgICAgICAgICAgPSB3aW5kb3cuYW5ndWxhciB8fCAod2luZG93LmFuZ3VsYXIgPSB7fSksCisg
ICAgYW5ndWxhck1vZHVsZSwKKyAgICBub2RlTmFtZV8sCisgICAgdWlkICAgICAgICAgICAgICAg
PSBbJzAnLCAnMCcsICcwJ107CisKKworLyoqCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHsqfSBv
YmoKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBgb2JqYCBpcyBhbiBhcnJh
eSBvciBhcnJheS1saWtlIG9iamVjdCAoTm9kZUxpc3QsIEFyZ3VtZW50cywgLi4uKQorICovCitm
dW5jdGlvbiBpc0FycmF5TGlrZShvYmopIHsKKyAgaWYgKCFvYmogfHwgKHR5cGVvZiBvYmoubGVu
Z3RoICE9PSAnbnVtYmVyJykpIHJldHVybiBmYWxzZTsKKworICAvLyBXZSBoYXZlIG9uIG9iamVj
dCB3aGljaCBoYXMgbGVuZ3RoIHByb3BlcnR5LiBTaG91bGQgd2UgdHJlYXQgaXQgYXMgYXJyYXk/
CisgIGlmICh0eXBlb2Ygb2JqLmhhc093blByb3BlcnR5ICE9ICdmdW5jdGlvbicgJiYKKyAgICAg
IHR5cGVvZiBvYmouY29uc3RydWN0b3IgIT0gJ2Z1bmN0aW9uJykgeworICAgIC8vIFRoaXMgaXMg
aGVyZSBmb3IgSUU4OiBpdCBpcyBhIGJvZ3VzIG9iamVjdCB0cmVhdCBpdCBhcyBhcnJheTsKKyAg
ICByZXR1cm4gdHJ1ZTsKKyAgfSBlbHNlICB7CisgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEpR
TGl0ZSB8fCAgICAgICAgICAgICAgICAgICAgICAvLyBKUUxpdGUKKyAgICAgICAgICAgKGpRdWVy
eSAmJiBvYmogaW5zdGFuY2VvZiBqUXVlcnkpIHx8ICAgICAgICAgIC8vIGpRdWVyeQorICAgICAg
ICAgICB0b1N0cmluZy5jYWxsKG9iaikgIT09ICdbb2JqZWN0IE9iamVjdF0nIHx8ICAgLy8gc29t
ZSBicm93c2VyIG5hdGl2ZSBvYmplY3QKKyAgICAgICAgICAgdHlwZW9mIG9iai5jYWxsZWUgPT09
ICdmdW5jdGlvbic7ICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgKG9uIElFOCBsb29rcyBsaWtl
IHJlZ3VsYXIgb2JqKQorICB9Cit9CisKKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBu
YW1lIGFuZ3VsYXIuZm9yRWFjaAorICogQGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisg
KiBJbnZva2VzIHRoZSBgaXRlcmF0b3JgIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggaXRlbSBpbiBg
b2JqYCBjb2xsZWN0aW9uLCB3aGljaCBjYW4gYmUgZWl0aGVyIGFuCisgKiBvYmplY3Qgb3IgYW4g
YXJyYXkuIFRoZSBgaXRlcmF0b3JgIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCBgaXRlcmF0b3Io
dmFsdWUsIGtleSlgLCB3aGVyZSBgdmFsdWVgCisgKiBpcyB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0
IHByb3BlcnR5IG9yIGFuIGFycmF5IGVsZW1lbnQgYW5kIGBrZXlgIGlzIHRoZSBvYmplY3QgcHJv
cGVydHkga2V5IG9yCisgKiBhcnJheSBlbGVtZW50IGluZGV4LiBTcGVjaWZ5aW5nIGEgYGNvbnRl
eHRgIGZvciB0aGUgZnVuY3Rpb24gaXMgb3B0aW9uYWwuCisgKgorICogTm90ZTogdGhpcyBmdW5j
dGlvbiB3YXMgcHJldmlvdXNseSBrbm93biBhcyBgYW5ndWxhci5mb3JlYWNoYC4KKyAqCisgICA8
cHJlPgorICAgICB2YXIgdmFsdWVzID0ge25hbWU6ICdtaXNrbycsIGdlbmRlcjogJ21hbGUnfTsK
KyAgICAgdmFyIGxvZyA9IFtdOworICAgICBhbmd1bGFyLmZvckVhY2godmFsdWVzLCBmdW5jdGlv
bih2YWx1ZSwga2V5KXsKKyAgICAgICB0aGlzLnB1c2goa2V5ICsgJzogJyArIHZhbHVlKTsKKyAg
ICAgfSwgbG9nKTsKKyAgICAgZXhwZWN0KGxvZykudG9FcXVhbChbJ25hbWU6IG1pc2tvJywgJ2dl
bmRlcjptYWxlJ10pOworICAgPC9wcmU+CisgKgorICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9i
aiBPYmplY3QgdG8gaXRlcmF0ZSBvdmVyLgorICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3Ig
SXRlcmF0b3IgZnVuY3Rpb24uCisgKiBAcGFyYW0ge09iamVjdD19IGNvbnRleHQgT2JqZWN0IHRv
IGJlY29tZSBjb250ZXh0IChgdGhpc2ApIGZvciB0aGUgaXRlcmF0b3IgZnVuY3Rpb24uCisgKiBA
cmV0dXJucyB7T2JqZWN0fEFycmF5fSBSZWZlcmVuY2UgdG8gYG9iamAuCisgKi8KK2Z1bmN0aW9u
IGZvckVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkgeworICB2YXIga2V5OworICBpZiAob2Jq
KSB7CisgICAgaWYgKGlzRnVuY3Rpb24ob2JqKSl7CisgICAgICBmb3IgKGtleSBpbiBvYmopIHsK
KyAgICAgICAgaWYgKGtleSAhPSAncHJvdG90eXBlJyAmJiBrZXkgIT0gJ2xlbmd0aCcgJiYga2V5
ICE9ICduYW1lJyAmJiBvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgIGl0ZXJh
dG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKG9iai5mb3JFYWNoICYmIG9iai5mb3JFYWNoICE9PSBmb3JFYWNoKSB7Cisg
ICAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCk7CisgICAgfSBlbHNlIGlmIChpc0Fy
cmF5TGlrZShvYmopKSB7CisgICAgICBmb3IgKGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtl
eSsrKQorICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXkpOworICAg
IH0gZWxzZSB7CisgICAgICBmb3IgKGtleSBpbiBvYmopIHsKKyAgICAgICAgaWYgKG9iai5oYXNP
d25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpb
a2V5XSwga2V5KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gb2Jq
OworfQorCitmdW5jdGlvbiBzb3J0ZWRLZXlzKG9iaikgeworICB2YXIga2V5cyA9IFtdOworICBm
b3IgKHZhciBrZXkgaW4gb2JqKSB7CisgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7
CisgICAgICBrZXlzLnB1c2goa2V5KTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGtleXMuc29ydCgp
OworfQorCitmdW5jdGlvbiBmb3JFYWNoU29ydGVkKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHsK
KyAgdmFyIGtleXMgPSBzb3J0ZWRLZXlzKG9iaik7CisgIGZvciAoIHZhciBpID0gMDsgaSA8IGtl
eXMubGVuZ3RoOyBpKyspIHsKKyAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXlzW2ld
XSwga2V5c1tpXSk7CisgIH0KKyAgcmV0dXJuIGtleXM7Cit9CisKKworLyoqCisgKiB3aGVuIHVz
aW5nIGZvckVhY2ggdGhlIHBhcmFtcyBhcmUgdmFsdWUsIGtleSwgYnV0IGl0IGlzIG9mdGVuIHVz
ZWZ1bCB0byBoYXZlIGtleSwgdmFsdWUuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZywgKil9
IGl0ZXJhdG9yRm4KKyAqIEByZXR1cm5zIHtmdW5jdGlvbigqLCBzdHJpbmcpfQorICovCitmdW5j
dGlvbiByZXZlcnNlUGFyYW1zKGl0ZXJhdG9yRm4pIHsKKyAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVl
LCBrZXkpIHsgaXRlcmF0b3JGbihrZXksIHZhbHVlKSB9OworfQorCisvKioKKyAqIEEgY29uc2lz
dGVudCB3YXkgb2YgY3JlYXRpbmcgdW5pcXVlIElEcyBpbiBhbmd1bGFyLiBUaGUgSUQgaXMgYSBz
ZXF1ZW5jZSBvZiBhbHBoYSBudW1lcmljCisgKiBjaGFyYWN0ZXJzIHN1Y2ggYXMgJzAxMkFCQycu
IFRoZSByZWFzb24gd2h5IHdlIGFyZSBub3QgdXNpbmcgc2ltcGx5IGEgbnVtYmVyIGNvdW50ZXIg
aXMgdGhhdAorICogdGhlIG51bWJlciBzdHJpbmcgZ2V0cyBsb25nZXIgb3ZlciB0aW1lLCBhbmQg
aXQgY2FuIGFsc28gb3ZlcmZsb3csIHdoZXJlIGFzIHRoZSBuZXh0SWQKKyAqIHdpbGwgZ3JvdyBt
dWNoIHNsb3dlciwgaXQgaXMgYSBzdHJpbmcsIGFuZCBpdCB3aWxsIG5ldmVyIG92ZXJmbG93Lgor
ICoKKyAqIEByZXR1cm5zIGFuIHVuaXF1ZSBhbHBoYS1udW1lcmljIHN0cmluZworICovCitmdW5j
dGlvbiBuZXh0VWlkKCkgeworICB2YXIgaW5kZXggPSB1aWQubGVuZ3RoOworICB2YXIgZGlnaXQ7
CisKKyAgd2hpbGUoaW5kZXgpIHsKKyAgICBpbmRleC0tOworICAgIGRpZ2l0ID0gdWlkW2luZGV4
XS5jaGFyQ29kZUF0KDApOworICAgIGlmIChkaWdpdCA9PSA1NyAvKic5JyovKSB7CisgICAgICB1
aWRbaW5kZXhdID0gJ0EnOworICAgICAgcmV0dXJuIHVpZC5qb2luKCcnKTsKKyAgICB9CisgICAg
aWYgKGRpZ2l0ID09IDkwICAvKidaJyovKSB7CisgICAgICB1aWRbaW5kZXhdID0gJzAnOworICAg
IH0gZWxzZSB7CisgICAgICB1aWRbaW5kZXhdID0gU3RyaW5nLmZyb21DaGFyQ29kZShkaWdpdCAr
IDEpOworICAgICAgcmV0dXJuIHVpZC5qb2luKCcnKTsKKyAgICB9CisgIH0KKyAgdWlkLnVuc2hp
ZnQoJzAnKTsKKyAgcmV0dXJuIHVpZC5qb2luKCcnKTsKK30KKworCisvKioKKyAqIFNldCBvciBj
bGVhciB0aGUgaGFzaGtleSBmb3IgYW4gb2JqZWN0LgorICogQHBhcmFtIG9iaiBvYmplY3QgCisg
KiBAcGFyYW0gaCB0aGUgaGFzaGtleSAoIXRydXRoeSB0byBkZWxldGUgdGhlIGhhc2hrZXkpCisg
Ki8KK2Z1bmN0aW9uIHNldEhhc2hLZXkob2JqLCBoKSB7CisgIGlmIChoKSB7CisgICAgb2JqLiQk
aGFzaEtleSA9IGg7CisgIH0KKyAgZWxzZSB7CisgICAgZGVsZXRlIG9iai4kJGhhc2hLZXk7Cisg
IH0KK30KKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIuZXh0ZW5k
CisgKiBAZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEV4dGVuZHMgdGhlIGRlc3Rp
bmF0aW9uIG9iamVjdCBgZHN0YCBieSBjb3B5aW5nIGFsbCBvZiB0aGUgcHJvcGVydGllcyBmcm9t
IHRoZSBgc3JjYCBvYmplY3QocykKKyAqIHRvIGBkc3RgLiBZb3UgY2FuIHNwZWNpZnkgbXVsdGlw
bGUgYHNyY2Agb2JqZWN0cy4KKyAqCisgKiBAcGFyYW0ge09iamVjdH0gZHN0IERlc3RpbmF0aW9u
IG9iamVjdC4KKyAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzcmMgU291cmNlIG9iamVjdChzKS4KKyAq
IEByZXR1cm5zIHtPYmplY3R9IFJlZmVyZW5jZSB0byBgZHN0YC4KKyAqLworZnVuY3Rpb24gZXh0
ZW5kKGRzdCkgeworICB2YXIgaCA9IGRzdC4kJGhhc2hLZXk7CisgIGZvckVhY2goYXJndW1lbnRz
LCBmdW5jdGlvbihvYmopeworICAgIGlmIChvYmogIT09IGRzdCkgeworICAgICAgZm9yRWFjaChv
YmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpeworICAgICAgICBkc3Rba2V5XSA9IHZhbHVlOworICAg
ICAgfSk7CisgICAgfQorICB9KTsKKworICBzZXRIYXNoS2V5KGRzdCxoKTsKKyAgcmV0dXJuIGRz
dDsKK30KKworZnVuY3Rpb24gaW50KHN0cikgeworICByZXR1cm4gcGFyc2VJbnQoc3RyLCAxMCk7
Cit9CisKKworZnVuY3Rpb24gaW5oZXJpdChwYXJlbnQsIGV4dHJhKSB7CisgIHJldHVybiBleHRl
bmQobmV3IChleHRlbmQoZnVuY3Rpb24oKSB7fSwge3Byb3RvdHlwZTpwYXJlbnR9KSkoKSwgZXh0
cmEpOworfQorCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLm5v
b3AKKyAqIEBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogQSBmdW5jdGlvbiB0aGF0
IHBlcmZvcm1zIG5vIG9wZXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCB3aGVu
IHdyaXRpbmcgY29kZSBpbiB0aGUKKyAqIGZ1bmN0aW9uYWwgc3R5bGUuCisgICA8cHJlPgorICAg
ICBmdW5jdGlvbiBmb28oY2FsbGJhY2spIHsKKyAgICAgICB2YXIgcmVzdWx0ID0gY2FsY3VsYXRl
UmVzdWx0KCk7CisgICAgICAgKGNhbGxiYWNrIHx8IGFuZ3VsYXIubm9vcCkocmVzdWx0KTsKKyAg
ICAgfQorICAgPC9wcmU+CisgKi8KK2Z1bmN0aW9uIG5vb3AoKSB7fQorbm9vcC4kaW5qZWN0ID0g
W107CisKKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIuaWRlbnRp
dHkKKyAqIEBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogQSBmdW5jdGlvbiB0aGF0
IHJldHVybnMgaXRzIGZpcnN0IGFyZ3VtZW50LiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVu
IHdyaXRpbmcgY29kZSBpbiB0aGUKKyAqIGZ1bmN0aW9uYWwgc3R5bGUuCisgKgorICAgPHByZT4K
KyAgICAgZnVuY3Rpb24gdHJhbnNmb3JtZXIodHJhbnNmb3JtYXRpb25GbiwgdmFsdWUpIHsKKyAg
ICAgICByZXR1cm4gKHRyYW5zZm9ybWF0aW9uRm4gfHwgaWRlbnRpdHkpKHZhbHVlKTsKKyAgICAg
fTsKKyAgIDwvcHJlPgorICovCitmdW5jdGlvbiBpZGVudGl0eSgkKSB7cmV0dXJuICQ7fQoraWRl
bnRpdHkuJGluamVjdCA9IFtdOworCisKK2Z1bmN0aW9uIHZhbHVlRm4odmFsdWUpIHtyZXR1cm4g
ZnVuY3Rpb24oKSB7cmV0dXJuIHZhbHVlO307fQorCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgor
ICogQG5hbWUgYW5ndWxhci5pc1VuZGVmaW5lZAorICogQGZ1bmN0aW9uCisgKgorICogQGRlc2Ny
aXB0aW9uCisgKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIHVuZGVmaW5lZC4KKyAqCisg
KiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4KKyAqIEByZXR1cm5zIHtib29s
ZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgdW5kZWZpbmVkLgorICovCitmdW5jdGlvbiBpc1VuZGVm
aW5lZCh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAndW5kZWZpbmVkJzt9CisKKworLyoq
CisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIuaXNEZWZpbmVkCisgKiBAZnVu
Y3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2Ug
aXMgZGVmaW5lZC4KKyAqCisgKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4K
KyAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgZGVmaW5lZC4KKyAqLwor
ZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlICE9ICd1bmRlZmlu
ZWQnO30KKworCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5pc09i
amVjdAorICogQGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBEZXRlcm1pbmVzIGlm
IGEgcmVmZXJlbmNlIGlzIGFuIGBPYmplY3RgLiBVbmxpa2UgYHR5cGVvZmAgaW4gSmF2YVNjcmlw
dCwgYG51bGxgcyBhcmUgbm90CisgKiBjb25zaWRlcmVkIHRvIGJlIG9iamVjdHMuCisgKgorICog
QHBhcmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCisgKiBAcmV0dXJucyB7Ym9vbGVh
bn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGFuIGBPYmplY3RgIGJ1dCBub3QgYG51bGxgLgorICovCitm
dW5jdGlvbiBpc09iamVjdCh2YWx1ZSl7cmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZh
bHVlID09ICdvYmplY3QnO30KKworCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUg
YW5ndWxhci5pc1N0cmluZworICogQGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBE
ZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGEgYFN0cmluZ2AuCisgKgorICogQHBhcmFtIHsq
fSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBp
ZiBgdmFsdWVgIGlzIGEgYFN0cmluZ2AuCisgKi8KK2Z1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKXty
ZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnO30KKworCisvKioKKyAqIEBuZ2RvYyBmdW5j
dGlvbgorICogQG5hbWUgYW5ndWxhci5pc051bWJlcgorICogQGZ1bmN0aW9uCisgKgorICogQGRl
c2NyaXB0aW9uCisgKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGEgYE51bWJlcmAuCisg
KgorICogQHBhcmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCisgKiBAcmV0dXJucyB7
Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGEgYE51bWJlcmAuCisgKi8KK2Z1bmN0aW9uIGlz
TnVtYmVyKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInO30KKworCisvKioK
KyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5pc0RhdGUKKyAqIEBmdW5jdGlv
bgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGV0ZXJtaW5lcyBpZiBhIHZhbHVlIGlzIGEgZGF0
ZS4KKyAqCisgKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4KKyAqIEByZXR1
cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBgRGF0ZWAuCisgKi8KK2Z1bmN0aW9u
IGlzRGF0ZSh2YWx1ZSl7CisgIHJldHVybiB0b1N0cmluZy5hcHBseSh2YWx1ZSkgPT0gJ1tvYmpl
Y3QgRGF0ZV0nOworfQorCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1
bGFyLmlzQXJyYXkKKyAqIEBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGV0ZXJt
aW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBhbiBgQXJyYXlgLgorICoKKyAqIEBwYXJhbSB7Kn0gdmFs
dWUgUmVmZXJlbmNlIHRvIGNoZWNrLgorICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZh
bHVlYCBpcyBhbiBgQXJyYXlgLgorICovCitmdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7CisgIHJl
dHVybiB0b1N0cmluZy5hcHBseSh2YWx1ZSkgPT0gJ1tvYmplY3QgQXJyYXldJzsKK30KKworCisv
KioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5pc0Z1bmN0aW9uCisgKiBA
ZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIERldGVybWluZXMgaWYgYSByZWZlcmVu
Y2UgaXMgYSBgRnVuY3Rpb25gLgorICoKKyAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRv
IGNoZWNrLgorICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBhIGBGdW5j
dGlvbmAuCisgKi8KK2Z1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpe3JldHVybiB0eXBlb2YgdmFs
dWUgPT0gJ2Z1bmN0aW9uJzt9CisKKworLyoqCisgKiBDaGVja3MgaWYgYG9iamAgaXMgYSB3aW5k
b3cgb2JqZWN0LgorICoKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0geyp9IG9iaiBPYmplY3QgdG8g
Y2hlY2sKKyAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGBvYmpgIGlzIGEgd2luZG93IG9i
ai4KKyAqLworZnVuY3Rpb24gaXNXaW5kb3cob2JqKSB7CisgIHJldHVybiBvYmogJiYgb2JqLmRv
Y3VtZW50ICYmIG9iai5sb2NhdGlvbiAmJiBvYmouYWxlcnQgJiYgb2JqLnNldEludGVydmFsOwor
fQorCisKK2Z1bmN0aW9uIGlzU2NvcGUob2JqKSB7CisgIHJldHVybiBvYmogJiYgb2JqLiRldmFs
QXN5bmMgJiYgb2JqLiR3YXRjaDsKK30KKworCitmdW5jdGlvbiBpc0ZpbGUob2JqKSB7CisgIHJl
dHVybiB0b1N0cmluZy5hcHBseShvYmopID09PSAnW29iamVjdCBGaWxlXSc7Cit9CisKKworZnVu
Y3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7CisgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ2Jvb2xl
YW4nOworfQorCisKK2Z1bmN0aW9uIHRyaW0odmFsdWUpIHsKKyAgcmV0dXJuIGlzU3RyaW5nKHZh
bHVlKSA/IHZhbHVlLnJlcGxhY2UoL15ccyovLCAnJykucmVwbGFjZSgvXHMqJC8sICcnKSA6IHZh
bHVlOworfQorCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5pc0Vs
ZW1lbnQKKyAqIEBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGV0ZXJtaW5lcyBp
ZiBhIHJlZmVyZW5jZSBpcyBhIERPTSBlbGVtZW50IChvciB3cmFwcGVkIGpRdWVyeSBlbGVtZW50
KS4KKyAqCisgKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4KKyAqIEByZXR1
cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBET00gZWxlbWVudCAob3Igd3JhcHBl
ZCBqUXVlcnkgZWxlbWVudCkuCisgKi8KK2Z1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7CisgIHJl
dHVybiBub2RlICYmCisgICAgKG5vZGUubm9kZU5hbWUgIC8vIHdlIGFyZSBhIGRpcmVjdCBlbGVt
ZW50CisgICAgfHwgKG5vZGUuYmluZCAmJiBub2RlLmZpbmQpKTsgIC8vIHdlIGhhdmUgYSBiaW5k
IGFuZCBmaW5kIG1ldGhvZCBwYXJ0IG9mIGpRdWVyeSBBUEkKK30KKworLyoqCisgKiBAcGFyYW0g
c3RyICdrZXkxLGtleTIsLi4uJworICogQHJldHVybnMge29iamVjdH0gaW4gdGhlIGZvcm0gb2Yg
e2tleTE6dHJ1ZSwga2V5Mjp0cnVlLCAuLi59CisgKi8KK2Z1bmN0aW9uIG1ha2VNYXAoc3RyKXsK
KyAgdmFyIG9iaiA9IHt9LCBpdGVtcyA9IHN0ci5zcGxpdCgiLCIpLCBpOworICBmb3IgKCBpID0g
MDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrICkKKyAgICBvYmpbIGl0ZW1zW2ldIF0gPSB0cnVlOwor
ICByZXR1cm4gb2JqOworfQorCisKK2lmIChtc2llIDwgOSkgeworICBub2RlTmFtZV8gPSBmdW5j
dGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9IGVsZW1lbnQubm9kZU5hbWUgPyBlbGVtZW50
IDogZWxlbWVudFswXTsKKyAgICByZXR1cm4gKGVsZW1lbnQuc2NvcGVOYW1lICYmIGVsZW1lbnQu
c2NvcGVOYW1lICE9ICdIVE1MJykKKyAgICAgID8gdXBwZXJjYXNlKGVsZW1lbnQuc2NvcGVOYW1l
ICsgJzonICsgZWxlbWVudC5ub2RlTmFtZSkgOiBlbGVtZW50Lm5vZGVOYW1lOworICB9OworfSBl
bHNlIHsKKyAgbm9kZU5hbWVfID0gZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHJldHVybiBlbGVt
ZW50Lm5vZGVOYW1lID8gZWxlbWVudC5ub2RlTmFtZSA6IGVsZW1lbnRbMF0ubm9kZU5hbWU7Cisg
IH07Cit9CisKKworZnVuY3Rpb24gbWFwKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHsKKyAgdmFy
IHJlc3VsdHMgPSBbXTsKKyAgZm9yRWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlz
dCkgeworICAgIHJlc3VsdHMucHVzaChpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRl
eCwgbGlzdCkpOworICB9KTsKKyAgcmV0dXJuIHJlc3VsdHM7Cit9CisKKworLyoqCisgKiBAZGVz
Y3JpcHRpb24KKyAqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBhcnJh
eSwgdGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBoYXMsIG9yCisgKiB0aGUgbGVu
Z3RoIG9mIGEgc3RyaW5nLgorICoKKyAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBh
dWdtZW50IHRoZSBPYmplY3QgdHlwZSBpbiBBbmd1bGFyIGV4cHJlc3Npb25zLiBTZWUKKyAqIHtA
bGluayBhbmd1bGFyLk9iamVjdH0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW5ndWxhciBh
cnJheXMuCisgKgorICogQHBhcmFtIHtPYmplY3R8QXJyYXl8c3RyaW5nfSBvYmogT2JqZWN0LCBh
cnJheSwgb3Igc3RyaW5nIHRvIGluc3BlY3QuCisgKiBAcGFyYW0ge2Jvb2xlYW59IFtvd25Qcm9w
c09ubHk9ZmFsc2VdIENvdW50IG9ubHkgIm93biIgcHJvcGVydGllcyBpbiBhbiBvYmplY3QKKyAq
IEByZXR1cm5zIHtudW1iZXJ9IFRoZSBzaXplIG9mIGBvYmpgIG9yIGAwYCBpZiBgb2JqYCBpcyBu
ZWl0aGVyIGFuIG9iamVjdCBub3IgYW4gYXJyYXkuCisgKi8KK2Z1bmN0aW9uIHNpemUob2JqLCBv
d25Qcm9wc09ubHkpIHsKKyAgdmFyIHNpemUgPSAwLCBrZXk7CisKKyAgaWYgKGlzQXJyYXkob2Jq
KSB8fCBpc1N0cmluZyhvYmopKSB7CisgICAgcmV0dXJuIG9iai5sZW5ndGg7CisgIH0gZWxzZSBp
ZiAoaXNPYmplY3Qob2JqKSl7CisgICAgZm9yIChrZXkgaW4gb2JqKQorICAgICAgaWYgKCFvd25Q
cm9wc09ubHkgfHwgb2JqLmhhc093blByb3BlcnR5KGtleSkpCisgICAgICAgIHNpemUrKzsKKyAg
fQorCisgIHJldHVybiBzaXplOworfQorCisKK2Z1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCBvYmop
IHsKKyAgcmV0dXJuIGluZGV4T2YoYXJyYXksIG9iaikgIT0gLTE7Cit9CisKK2Z1bmN0aW9uIGlu
ZGV4T2YoYXJyYXksIG9iaikgeworICBpZiAoYXJyYXkuaW5kZXhPZikgcmV0dXJuIGFycmF5Lmlu
ZGV4T2Yob2JqKTsKKworICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykg
eworICAgIGlmIChvYmogPT09IGFycmF5W2ldKSByZXR1cm4gaTsKKyAgfQorICByZXR1cm4gLTE7
Cit9CisKK2Z1bmN0aW9uIGFycmF5UmVtb3ZlKGFycmF5LCB2YWx1ZSkgeworICB2YXIgaW5kZXgg
PSBpbmRleE9mKGFycmF5LCB2YWx1ZSk7CisgIGlmIChpbmRleCA+PTApCisgICAgYXJyYXkuc3Bs
aWNlKGluZGV4LCAxKTsKKyAgcmV0dXJuIHZhbHVlOworfQorCitmdW5jdGlvbiBpc0xlYWZOb2Rl
IChub2RlKSB7CisgIGlmIChub2RlKSB7CisgICAgc3dpdGNoIChub2RlLm5vZGVOYW1lKSB7Cisg
ICAgY2FzZSAiT1BUSU9OIjoKKyAgICBjYXNlICJQUkUiOgorICAgIGNhc2UgIlRJVExFIjoKKyAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKKy8qKgor
ICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmNvcHkKKyAqIEBmdW5jdGlvbgor
ICoKKyAqIEBkZXNjcmlwdGlvbgorICogQ3JlYXRlcyBhIGRlZXAgY29weSBvZiBgc291cmNlYCwg
d2hpY2ggc2hvdWxkIGJlIGFuIG9iamVjdCBvciBhbiBhcnJheS4KKyAqCisgKiAqIElmIG5vIGRl
c3RpbmF0aW9uIGlzIHN1cHBsaWVkLCBhIGNvcHkgb2YgdGhlIG9iamVjdCBvciBhcnJheSBpcyBj
cmVhdGVkLgorICogKiBJZiBhIGRlc3RpbmF0aW9uIGlzIHByb3ZpZGVkLCBhbGwgb2YgaXRzIGVs
ZW1lbnRzIChmb3IgYXJyYXkpIG9yIHByb3BlcnRpZXMgKGZvciBvYmplY3RzKQorICogICBhcmUg
ZGVsZXRlZCBhbmQgdGhlbiBhbGwgZWxlbWVudHMvcHJvcGVydGllcyBmcm9tIHRoZSBzb3VyY2Ug
YXJlIGNvcGllZCB0byBpdC4KKyAqICogSWYgIGBzb3VyY2VgIGlzIG5vdCBhbiBvYmplY3Qgb3Ig
YXJyYXksIGBzb3VyY2VgIGlzIHJldHVybmVkLgorICoKKyAqIE5vdGU6IHRoaXMgZnVuY3Rpb24g
aXMgdXNlZCB0byBhdWdtZW50IHRoZSBPYmplY3QgdHlwZSBpbiBBbmd1bGFyIGV4cHJlc3Npb25z
LiBTZWUKKyAqIHtAbGluayBuZy4kZmlsdGVyfSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBB
bmd1bGFyIGFycmF5cy4KKyAqCisgKiBAcGFyYW0geyp9IHNvdXJjZSBUaGUgc291cmNlIHRoYXQg
d2lsbCBiZSB1c2VkIHRvIG1ha2UgYSBjb3B5LgorICogICAgICAgICAgICAgICAgICAgQ2FuIGJl
IGFueSB0eXBlLCBpbmNsdWRpbmcgcHJpbWl0aXZlcywgYG51bGxgLCBhbmQgYHVuZGVmaW5lZGAu
CisgKiBAcGFyYW0geyhPYmplY3R8QXJyYXkpPX0gZGVzdGluYXRpb24gRGVzdGluYXRpb24gaW50
byB3aGljaCB0aGUgc291cmNlIGlzIGNvcGllZC4gSWYKKyAqICAgICBwcm92aWRlZCwgbXVzdCBi
ZSBvZiB0aGUgc2FtZSB0eXBlIGFzIGBzb3VyY2VgLgorICogQHJldHVybnMgeyp9IFRoZSBjb3B5
IG9yIHVwZGF0ZWQgYGRlc3RpbmF0aW9uYCwgaWYgYGRlc3RpbmF0aW9uYCB3YXMgc3BlY2lmaWVk
LgorICovCitmdW5jdGlvbiBjb3B5KHNvdXJjZSwgZGVzdGluYXRpb24peworICBpZiAoaXNXaW5k
b3coc291cmNlKSB8fCBpc1Njb3BlKHNvdXJjZSkpIHRocm93IEVycm9yKCJDYW4ndCBjb3B5IFdp
bmRvdyBvciBTY29wZSIpOworICBpZiAoIWRlc3RpbmF0aW9uKSB7CisgICAgZGVzdGluYXRpb24g
PSBzb3VyY2U7CisgICAgaWYgKHNvdXJjZSkgeworICAgICAgaWYgKGlzQXJyYXkoc291cmNlKSkg
eworICAgICAgICBkZXN0aW5hdGlvbiA9IGNvcHkoc291cmNlLCBbXSk7CisgICAgICB9IGVsc2Ug
aWYgKGlzRGF0ZShzb3VyY2UpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uID0gbmV3IERhdGUoc291
cmNlLmdldFRpbWUoKSk7CisgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHsKKyAg
ICAgICAgZGVzdGluYXRpb24gPSBjb3B5KHNvdXJjZSwge30pOworICAgICAgfQorICAgIH0KKyAg
fSBlbHNlIHsKKyAgICBpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbikgdGhyb3cgRXJyb3IoIkNh
bid0IGNvcHkgZXF1aXZhbGVudCBvYmplY3RzIG9yIGFycmF5cyIpOworICAgIGlmIChpc0FycmF5
KHNvdXJjZSkpIHsKKyAgICAgIGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7CisgICAgICBmb3IgKCB2
YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZGVzdGluYXRpb24u
cHVzaChjb3B5KHNvdXJjZVtpXSkpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB2YXIg
aCA9IGRlc3RpbmF0aW9uLiQkaGFzaEtleTsKKyAgICAgIGZvckVhY2goZGVzdGluYXRpb24sIGZ1
bmN0aW9uKHZhbHVlLCBrZXkpeworICAgICAgICBkZWxldGUgZGVzdGluYXRpb25ba2V5XTsKKyAg
ICAgIH0pOworICAgICAgZm9yICggdmFyIGtleSBpbiBzb3VyY2UpIHsKKyAgICAgICAgZGVzdGlu
YXRpb25ba2V5XSA9IGNvcHkoc291cmNlW2tleV0pOworICAgICAgfQorICAgICAgc2V0SGFzaEtl
eShkZXN0aW5hdGlvbixoKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGRlc3RpbmF0aW9uOworfQor
CisvKioKKyAqIENyZWF0ZSBhIHNoYWxsb3cgY29weSBvZiBhbiBvYmplY3QKKyAqLworZnVuY3Rp
b24gc2hhbGxvd0NvcHkoc3JjLCBkc3QpIHsKKyAgZHN0ID0gZHN0IHx8IHt9OworCisgIGZvcih2
YXIga2V5IGluIHNyYykgeworICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXku
c3Vic3RyKDAsIDIpICE9PSAnJCQnKSB7CisgICAgICBkc3Rba2V5XSA9IHNyY1trZXldOworICAg
IH0KKyAgfQorCisgIHJldHVybiBkc3Q7Cit9CisKKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24K
KyAqIEBuYW1lIGFuZ3VsYXIuZXF1YWxzCisgKiBAZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRp
b24KKyAqIERldGVybWluZXMgaWYgdHdvIG9iamVjdHMgb3IgdHdvIHZhbHVlcyBhcmUgZXF1aXZh
bGVudC4gU3VwcG9ydHMgdmFsdWUgdHlwZXMsIGFycmF5cyBhbmQKKyAqIG9iamVjdHMuCisgKgor
ICogVHdvIG9iamVjdHMgb3IgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgYXQg
bGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAqCisgKiAqIEJvdGggb2JqZWN0
cyBvciB2YWx1ZXMgcGFzcyBgPT09YCBjb21wYXJpc29uLgorICogKiBCb3RoIG9iamVjdHMgb3Ig
dmFsdWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBhbGwgb2YgdGhlaXIgcHJvcGVydGllcyBw
YXNzIGA9PT1gIGNvbXBhcmlzb24uCisgKiAqIEJvdGggdmFsdWVzIGFyZSBOYU4uIChJbiBKYXZh
c1NjcmlwdCwgTmFOID09IE5hTiA9PiBmYWxzZS4gQnV0IHdlIGNvbnNpZGVyIHR3byBOYU4gYXMg
ZXF1YWwpCisgKgorICogRHVyaW5nIGEgcHJvcGVydHkgY29tcGFyaXNpb24sIHByb3BlcnRpZXMg
b2YgYGZ1bmN0aW9uYCB0eXBlIGFuZCBwcm9wZXJ0aWVzIHdpdGggbmFtZXMKKyAqIHRoYXQgYmVn
aW4gd2l0aCBgJGAgYXJlIGlnbm9yZWQuCisgKgorICogU2NvcGUgYW5kIERPTVdpbmRvdyBvYmpl
Y3RzIGFyZSBiZWluZyBjb21wYXJlZCBvbmx5IGJ5IGlkZW50aWZ5IChgPT09YCkuCisgKgorICog
QHBhcmFtIHsqfSBvMSBPYmplY3Qgb3IgdmFsdWUgdG8gY29tcGFyZS4KKyAqIEBwYXJhbSB7Kn0g
bzIgT2JqZWN0IG9yIHZhbHVlIHRvIGNvbXBhcmUuCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1
ZSBpZiBhcmd1bWVudHMgYXJlIGVxdWFsLgorICovCitmdW5jdGlvbiBlcXVhbHMobzEsIG8yKSB7
CisgIGlmIChvMSA9PT0gbzIpIHJldHVybiB0cnVlOworICBpZiAobzEgPT09IG51bGwgfHwgbzIg
PT09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgaWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpIHJl
dHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTgorICB2YXIgdDEgPSB0eXBlb2YgbzEsIHQyID0gdHlw
ZW9mIG8yLCBsZW5ndGgsIGtleSwga2V5U2V0OworICBpZiAodDEgPT0gdDIpIHsKKyAgICBpZiAo
dDEgPT0gJ29iamVjdCcpIHsKKyAgICAgIGlmIChpc0FycmF5KG8xKSkgeworICAgICAgICBpZiAo
KGxlbmd0aCA9IG8xLmxlbmd0aCkgPT0gbzIubGVuZ3RoKSB7CisgICAgICAgICAgZm9yKGtleT0w
OyBrZXk8bGVuZ3RoOyBrZXkrKykgeworICAgICAgICAgICAgaWYgKCFlcXVhbHMobzFba2V5XSwg
bzJba2V5XSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKG8xKSkgeworICAgICAgICBy
ZXR1cm4gaXNEYXRlKG8yKSAmJiBvMS5nZXRUaW1lKCkgPT0gbzIuZ2V0VGltZSgpOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKGlzU2NvcGUobzEpIHx8IGlzU2NvcGUobzIpIHx8IGlzV2lu
ZG93KG8xKSB8fCBpc1dpbmRvdyhvMikpIHJldHVybiBmYWxzZTsKKyAgICAgICAga2V5U2V0ID0g
e307CisgICAgICAgIGZvcihrZXkgaW4gbzEpIHsKKyAgICAgICAgICBpZiAoa2V5LmNoYXJBdCgw
KSA9PT0gJyQnIHx8IGlzRnVuY3Rpb24obzFba2V5XSkpIGNvbnRpbnVlOworICAgICAgICAgIGlm
ICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAga2V5
U2V0W2tleV0gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGZvcihrZXkgaW4gbzIpIHsKKyAg
ICAgICAgICBpZiAoIWtleVNldFtrZXldICYmCisgICAgICAgICAgICAgIGtleS5jaGFyQXQoMCkg
IT09ICckJyAmJgorICAgICAgICAgICAgICBvMltrZXldICE9PSB1bmRlZmluZWQgJiYKKyAgICAg
ICAgICAgICAgIWlzRnVuY3Rpb24obzJba2V5XSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGZhbHNl
OworfQorCisKK2Z1bmN0aW9uIGNvbmNhdChhcnJheTEsIGFycmF5MiwgaW5kZXgpIHsKKyAgcmV0
dXJuIGFycmF5MS5jb25jYXQoc2xpY2UuY2FsbChhcnJheTIsIGluZGV4KSk7Cit9CisKK2Z1bmN0
aW9uIHNsaWNlQXJncyhhcmdzLCBzdGFydEluZGV4KSB7CisgIHJldHVybiBzbGljZS5jYWxsKGFy
Z3MsIHN0YXJ0SW5kZXggfHwgMCk7Cit9CisKKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAq
IEBuYW1lIGFuZ3VsYXIuYmluZAorICogQGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisg
KiBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FsbHMgZnVuY3Rpb24gYGZuYCBib3VuZCB0byBg
c2VsZmAgKGBzZWxmYCBiZWNvbWVzIHRoZSBgdGhpc2AgZm9yCisgKiBgZm5gKS4gWW91IGNhbiBz
dXBwbHkgb3B0aW9uYWwgYGFyZ3NgIHRoYXQgYXJlIHByZWJvdW5kIHRvIHRoZSBmdW5jdGlvbi4g
VGhpcyBmZWF0dXJlIGlzIGFsc28KKyAqIGtub3duIGFzIFtmdW5jdGlvbiBjdXJyeWluZ10oaHR0
cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdXJyeWluZykuCisgKgorICogQHBhcmFtIHtPYmpl
Y3R9IHNlbGYgQ29udGV4dCB3aGljaCBgZm5gIHNob3VsZCBiZSBldmFsdWF0ZWQgaW4uCisgKiBA
cGFyYW0ge2Z1bmN0aW9uKCl9IGZuIEZ1bmN0aW9uIHRvIGJlIGJvdW5kLgorICogQHBhcmFtIHsu
Li4qfSBhcmdzIE9wdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwcmVib3VuZCB0byB0aGUgYGZuYCBm
dW5jdGlvbiBjYWxsLgorICogQHJldHVybnMge2Z1bmN0aW9uKCl9IEZ1bmN0aW9uIHRoYXQgd3Jh
cHMgdGhlIGBmbmAgd2l0aCBhbGwgdGhlIHNwZWNpZmllZCBiaW5kaW5ncy4KKyAqLworZnVuY3Rp
b24gYmluZChzZWxmLCBmbikgeworICB2YXIgY3VycnlBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+
IDIgPyBzbGljZUFyZ3MoYXJndW1lbnRzLCAyKSA6IFtdOworICBpZiAoaXNGdW5jdGlvbihmbikg
JiYgIShmbiBpbnN0YW5jZW9mIFJlZ0V4cCkpIHsKKyAgICByZXR1cm4gY3VycnlBcmdzLmxlbmd0
aAorICAgICAgPyBmdW5jdGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0
aAorICAgICAgICAgICAgPyBmbi5hcHBseShzZWxmLCBjdXJyeUFyZ3MuY29uY2F0KHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAwKSkpCisgICAgICAgICAgICA6IGZuLmFwcGx5KHNlbGYsIGN1cnJ5QXJn
cyk7CisgICAgICAgIH0KKyAgICAgIDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50cy5sZW5ndGgKKyAgICAgICAgICAgID8gZm4uYXBwbHkoc2VsZiwgYXJndW1lbnRzKQor
ICAgICAgICAgICAgOiBmbi5jYWxsKHNlbGYpOworICAgICAgICB9OworICB9IGVsc2UgeworICAg
IC8vIGluIElFLCBuYXRpdmUgbWV0aG9kcyBhcmUgbm90IGZ1bmN0aW9ucyBzbyB0aGV5IGNhbm5v
dCBiZSBib3VuZCAobm90ZTogdGhleSBkb24ndCBuZWVkIHRvIGJlKQorICAgIHJldHVybiBmbjsK
KyAgfQorfQorCisKK2Z1bmN0aW9uIHRvSnNvblJlcGxhY2VyKGtleSwgdmFsdWUpIHsKKyAgdmFy
IHZhbCA9IHZhbHVlOworCisgIGlmICgvXlwkKy8udGVzdChrZXkpKSB7CisgICAgdmFsID0gdW5k
ZWZpbmVkOworICB9IGVsc2UgaWYgKGlzV2luZG93KHZhbHVlKSkgeworICAgIHZhbCA9ICckV0lO
RE9XJzsKKyAgfSBlbHNlIGlmICh2YWx1ZSAmJiAgZG9jdW1lbnQgPT09IHZhbHVlKSB7CisgICAg
dmFsID0gJyRET0NVTUVOVCc7CisgIH0gZWxzZSBpZiAoaXNTY29wZSh2YWx1ZSkpIHsKKyAgICB2
YWwgPSAnJFNDT1BFJzsKKyAgfQorCisgIHJldHVybiB2YWw7Cit9CisKKworLyoqCisgKiBAbmdk
b2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIudG9Kc29uCisgKiBAZnVuY3Rpb24KKyAqCisg
KiBAZGVzY3JpcHRpb24KKyAqIFNlcmlhbGl6ZXMgaW5wdXQgaW50byBhIEpTT04tZm9ybWF0dGVk
IHN0cmluZy4KKyAqCisgKiBAcGFyYW0ge09iamVjdHxBcnJheXxEYXRlfHN0cmluZ3xudW1iZXJ9
IG9iaiBJbnB1dCB0byBiZSBzZXJpYWxpemVkIGludG8gSlNPTi4KKyAqIEBwYXJhbSB7Ym9vbGVh
bj19IHByZXR0eSBJZiBzZXQgdG8gdHJ1ZSwgdGhlIEpTT04gb3V0cHV0IHdpbGwgY29udGFpbiBu
ZXdsaW5lcyBhbmQgd2hpdGVzcGFjZS4KKyAqIEByZXR1cm5zIHtzdHJpbmd9IEpzb25pZmllZCBz
dHJpbmcgcmVwcmVzZW50aW5nIGBvYmpgLgorICovCitmdW5jdGlvbiB0b0pzb24ob2JqLCBwcmV0
dHkpIHsKKyAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgdG9Kc29uUmVwbGFjZXIsIHByZXR0
eSA/ICcgICcgOiBudWxsKTsKK30KKworCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5h
bWUgYW5ndWxhci5mcm9tSnNvbgorICogQGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisg
KiBEZXNlcmlhbGl6ZXMgYSBKU09OIHN0cmluZy4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30ganNv
biBKU09OIHN0cmluZyB0byBkZXNlcmlhbGl6ZS4KKyAqIEByZXR1cm5zIHtPYmplY3R8QXJyYXl8
RGF0ZXxzdHJpbmd8bnVtYmVyfSBEZXNlcmlhbGl6ZWQgdGhpbmd5LgorICovCitmdW5jdGlvbiBm
cm9tSnNvbihqc29uKSB7CisgIHJldHVybiBpc1N0cmluZyhqc29uKQorICAgICAgPyBKU09OLnBh
cnNlKGpzb24pCisgICAgICA6IGpzb247Cit9CisKKworZnVuY3Rpb24gdG9Cb29sZWFuKHZhbHVl
KSB7CisgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggIT09IDApIHsKKyAgICB2YXIgdiA9IGxv
d2VyY2FzZSgiIiArIHZhbHVlKTsKKyAgICB2YWx1ZSA9ICEodiA9PSAnZicgfHwgdiA9PSAnMCcg
fHwgdiA9PSAnZmFsc2UnIHx8IHYgPT0gJ25vJyB8fCB2ID09ICduJyB8fCB2ID09ICdbXScpOwor
ICB9IGVsc2UgeworICAgIHZhbHVlID0gZmFsc2U7CisgIH0KKyAgcmV0dXJuIHZhbHVlOworfQor
CisvKioKKyAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRh
dGlvbiBvZiB0aGUgZWxlbWVudC4KKyAqLworZnVuY3Rpb24gc3RhcnRpbmdUYWcoZWxlbWVudCkg
eworICBlbGVtZW50ID0ganFMaXRlKGVsZW1lbnQpLmNsb25lKCk7CisgIHRyeSB7CisgICAgLy8g
dHVybnMgb3V0IElFIGRvZXMgbm90IGxldCB5b3Ugc2V0IC5odG1sKCkgb24gZWxlbWVudHMgd2hp
Y2gKKyAgICAvLyBhcmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBjaGlsZHJlbi4gU28gd2UganVzdCBp
Z25vcmUgaXQuCisgICAgZWxlbWVudC5odG1sKCcnKTsKKyAgfSBjYXRjaChlKSB7fQorICAvLyBB
cyBQZXIgRE9NIFN0YW5kYXJkcworICB2YXIgVEVYVF9OT0RFID0gMzsKKyAgdmFyIGVsZW1IdG1s
ID0ganFMaXRlKCc8ZGl2PicpLmFwcGVuZChlbGVtZW50KS5odG1sKCk7CisgIHRyeSB7CisgICAg
cmV0dXJuIGVsZW1lbnRbMF0ubm9kZVR5cGUgPT09IFRFWFRfTk9ERSA/IGxvd2VyY2FzZShlbGVt
SHRtbCkgOgorICAgICAgICBlbGVtSHRtbC4KKyAgICAgICAgICBtYXRjaCgvXig8W14+XSs+KS8p
WzFdLgorICAgICAgICAgIHJlcGxhY2UoL148KFtcd1wtXSspLywgZnVuY3Rpb24obWF0Y2gsIG5v
ZGVOYW1lKSB7IHJldHVybiAnPCcgKyBsb3dlcmNhc2Uobm9kZU5hbWUpOyB9KTsKKyAgfSBjYXRj
aChlKSB7CisgICAgcmV0dXJuIGxvd2VyY2FzZShlbGVtSHRtbCk7CisgIH0KKworfQorCisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoqCisg
KiBQYXJzZXMgYW4gZXNjYXBlZCB1cmwgcXVlcnkgc3RyaW5nIGludG8ga2V5LXZhbHVlIHBhaXJz
LgorICogQHJldHVybnMgT2JqZWN0Ljwoc3RyaW5nfGJvb2xlYW4pPgorICovCitmdW5jdGlvbiBw
YXJzZUtleVZhbHVlKC8qKnN0cmluZyova2V5VmFsdWUpIHsKKyAgdmFyIG9iaiA9IHt9LCBrZXlf
dmFsdWUsIGtleTsKKyAgZm9yRWFjaCgoa2V5VmFsdWUgfHwgIiIpLnNwbGl0KCcmJyksIGZ1bmN0
aW9uKGtleVZhbHVlKXsKKyAgICBpZiAoa2V5VmFsdWUpIHsKKyAgICAgIGtleV92YWx1ZSA9IGtl
eVZhbHVlLnNwbGl0KCc9Jyk7CisgICAgICBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5X3Zh
bHVlWzBdKTsKKyAgICAgIG9ialtrZXldID0gaXNEZWZpbmVkKGtleV92YWx1ZVsxXSkgPyBkZWNv
ZGVVUklDb21wb25lbnQoa2V5X3ZhbHVlWzFdKSA6IHRydWU7CisgICAgfQorICB9KTsKKyAgcmV0
dXJuIG9iajsKK30KKworZnVuY3Rpb24gdG9LZXlWYWx1ZShvYmopIHsKKyAgdmFyIHBhcnRzID0g
W107CisgIGZvckVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CisgICAgcGFydHMucHVz
aChlbmNvZGVVcmlRdWVyeShrZXksIHRydWUpICsgKHZhbHVlID09PSB0cnVlID8gJycgOiAnPScg
KyBlbmNvZGVVcmlRdWVyeSh2YWx1ZSwgdHJ1ZSkpKTsKKyAgfSk7CisgIHJldHVybiBwYXJ0cy5s
ZW5ndGggPyBwYXJ0cy5qb2luKCcmJykgOiAnJzsKK30KKworCisvKioKKyAqIFdlIG5lZWQgb3Vy
IGN1c3RvbSBtZXRob2QgYmVjYXVzZSBlbmNvZGVVUklDb21wb25lbnQgaXMgdG9vIGFncmVzc2l2
ZSBhbmQgZG9lc24ndCBmb2xsb3cKKyAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM5ODYu
dHh0IHdpdGggcmVnYXJkcyB0byB0aGUgY2hhcmFjdGVyIHNldCAocGNoYXIpIGFsbG93ZWQgaW4g
cGF0aAorICogc2VnbWVudHM6CisgKiAgICBzZWdtZW50ICAgICAgID0gKnBjaGFyCisgKiAgICBw
Y2hhciAgICAgICAgID0gdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvICI6
IiAvICJAIgorICogICAgcGN0LWVuY29kZWQgICA9ICIlIiBIRVhESUcgSEVYRElHCisgKiAgICB1
bnJlc2VydmVkICAgID0gQUxQSEEgLyBESUdJVCAvICItIiAvICIuIiAvICJfIiAvICJ+IgorICog
ICAgc3ViLWRlbGltcyAgICA9ICIhIiAvICIkIiAvICImIiAvICInIiAvICIoIiAvICIpIgorICog
ICAgICAgICAgICAgICAgICAgICAvICIqIiAvICIrIiAvICIsIiAvICI7IiAvICI9IgorICovCitm
dW5jdGlvbiBlbmNvZGVVcmlTZWdtZW50KHZhbCkgeworICByZXR1cm4gZW5jb2RlVXJpUXVlcnko
dmFsLCB0cnVlKS4KKyAgICAgICAgICAgICByZXBsYWNlKC8lMjYvZ2ksICcmJykuCisgICAgICAg
ICAgICAgcmVwbGFjZSgvJTNEL2dpLCAnPScpLgorICAgICAgICAgICAgIHJlcGxhY2UoLyUyQi9n
aSwgJysnKTsKK30KKworCisvKioKKyAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciBlbmNv
ZGluZyAqa2V5KiBvciAqdmFsdWUqIHBhcnRzIG9mIHF1ZXJ5IGNvbXBvbmVudC4gV2UgbmVlZCBh
IGN1c3RvbQorICogbWV0aG9kIGJlY3Vhc2UgZW5jb2RlVVJJQ29tcG9uZW50IGlzIHRvbyBhZ3Jl
c3NpdmUgYW5kIGVuY29kZXMgc3R1ZmYgdGhhdCBkb2Vzbid0IGhhdmUgdG8gYmUKKyAqIGVuY29k
ZWQgcGVyIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODY6CisgKiAgICBxdWVyeSAg
ICAgICA9ICooIHBjaGFyIC8gIi8iIC8gIj8iICkKKyAqICAgIHBjaGFyICAgICAgICAgPSB1bnJl
c2VydmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zIC8gIjoiIC8gIkAiCisgKiAgICB1bnJl
c2VydmVkICAgID0gQUxQSEEgLyBESUdJVCAvICItIiAvICIuIiAvICJfIiAvICJ+IgorICogICAg
cGN0LWVuY29kZWQgICA9ICIlIiBIRVhESUcgSEVYRElHCisgKiAgICBzdWItZGVsaW1zICAgID0g
IiEiIC8gIiQiIC8gIiYiIC8gIiciIC8gIigiIC8gIikiCisgKiAgICAgICAgICAgICAgICAgICAg
IC8gIioiIC8gIisiIC8gIiwiIC8gIjsiIC8gIj0iCisgKi8KK2Z1bmN0aW9uIGVuY29kZVVyaVF1
ZXJ5KHZhbCwgcGN0RW5jb2RlU3BhY2VzKSB7CisgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQo
dmFsKS4KKyAgICAgICAgICAgICByZXBsYWNlKC8lNDAvZ2ksICdAJykuCisgICAgICAgICAgICAg
cmVwbGFjZSgvJTNBL2dpLCAnOicpLgorICAgICAgICAgICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcp
LgorICAgICAgICAgICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS4KKyAgICAgICAgICAgICByZXBs
YWNlKC8lMjAvZywgKHBjdEVuY29kZVNwYWNlcyA/ICclMjAnIDogJysnKSk7Cit9CisKKworLyoq
CisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdBcHAKKyAqCisg
KiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7YW5ndWxhci5Nb2R1bGV9IG5nQXBwIGFuIG9wdGlv
bmFsIGFwcGxpY2F0aW9uCisgKiAgIHtAbGluayBhbmd1bGFyLm1vZHVsZSBtb2R1bGV9IG5hbWUg
dG8gbG9hZC4KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBVc2UgdGhpcyBkaXJlY3RpdmUg
dG8gYXV0by1ib290c3RyYXAgYW4gYXBwbGljYXRpb24uIE9ubHkKKyAqIG9uZSBkaXJlY3RpdmUg
Y2FuIGJlIHVzZWQgcGVyIEhUTUwgZG9jdW1lbnQuIFRoZSBkaXJlY3RpdmUKKyAqIGRlc2lnbmF0
ZXMgdGhlIHJvb3Qgb2YgdGhlIGFwcGxpY2F0aW9uIGFuZCBpcyB0eXBpY2FsbHkgcGxhY2VkCisg
KiBhdCB0aGUgcm9vdCBvZiB0aGUgcGFnZS4KKyAqCisgKiBJbiB0aGUgZXhhbXBsZSBiZWxvdyBp
ZiB0aGUgYG5nQXBwYCBkaXJlY3RpdmUgd291bGQgbm90IGJlIHBsYWNlZAorICogb24gdGhlIGBo
dG1sYCBlbGVtZW50IHRoZW4gdGhlIGRvY3VtZW50IHdvdWxkIG5vdCBiZSBjb21waWxlZAorICog
YW5kIHRoZSBge3sgMSsyIH19YCB3b3VsZCBub3QgYmUgcmVzb2x2ZWQgdG8gYDNgLgorICoKKyAq
IGBuZ0FwcGAgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIGJvb3RzdHJhcCBhbiBhcHBsaWNhdGlvbi4K
KyAqCisgPGRvYzpleGFtcGxlPgorICAgPGRvYzpzb3VyY2U+CisgICAgSSBjYW4gYWRkOiAxICsg
MiA9ICB7eyAxKzIgfX0KKyAgIDwvZG9jOnNvdXJjZT4KKyA8L2RvYzpleGFtcGxlPgorICoKKyAq
LworZnVuY3Rpb24gYW5ndWxhckluaXQoZWxlbWVudCwgYm9vdHN0cmFwKSB7CisgIHZhciBlbGVt
ZW50cyA9IFtlbGVtZW50XSwKKyAgICAgIGFwcEVsZW1lbnQsCisgICAgICBtb2R1bGUsCisgICAg
ICBuYW1lcyA9IFsnbmc6YXBwJywgJ25nLWFwcCcsICd4LW5nLWFwcCcsICdkYXRhLW5nLWFwcCdd
LAorICAgICAgTkdfQVBQX0NMQVNTX1JFR0VYUCA9IC9cc25nWzpcLV1hcHAoOlxzKihbXHdcZF9d
Kyk7Pyk/XHMvOworCisgIGZ1bmN0aW9uIGFwcGVuZChlbGVtZW50KSB7CisgICAgZWxlbWVudCAm
JiBlbGVtZW50cy5wdXNoKGVsZW1lbnQpOworICB9CisKKyAgZm9yRWFjaChuYW1lcywgZnVuY3Rp
b24obmFtZSkgeworICAgIG5hbWVzW25hbWVdID0gdHJ1ZTsKKyAgICBhcHBlbmQoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQobmFtZSkpOworICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoJzonLCAnXFw6
Jyk7CisgICAgaWYgKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCkgeworICAgICAgZm9yRWFjaChl
bGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy4nICsgbmFtZSksIGFwcGVuZCk7CisgICAgICBmb3JF
YWNoKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicgKyBuYW1lICsgJ1xcOicpLCBhcHBlbmQp
OworICAgICAgZm9yRWFjaChlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1snICsgbmFtZSArICdd
JyksIGFwcGVuZCk7CisgICAgfQorICB9KTsKKworICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlv
bihlbGVtZW50KSB7CisgICAgaWYgKCFhcHBFbGVtZW50KSB7CisgICAgICB2YXIgY2xhc3NOYW1l
ID0gJyAnICsgZWxlbWVudC5jbGFzc05hbWUgKyAnICc7CisgICAgICB2YXIgbWF0Y2ggPSBOR19B
UFBfQ0xBU1NfUkVHRVhQLmV4ZWMoY2xhc3NOYW1lKTsKKyAgICAgIGlmIChtYXRjaCkgeworICAg
ICAgICBhcHBFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgbW9kdWxlID0gKG1hdGNoWzJdIHx8
ICcnKS5yZXBsYWNlKC9ccysvZywgJywnKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZvckVh
Y2goZWxlbWVudC5hdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyKSB7CisgICAgICAgICAgaWYgKCFh
cHBFbGVtZW50ICYmIG5hbWVzW2F0dHIubmFtZV0pIHsKKyAgICAgICAgICAgIGFwcEVsZW1lbnQg
PSBlbGVtZW50OworICAgICAgICAgICAgbW9kdWxlID0gYXR0ci52YWx1ZTsKKyAgICAgICAgICB9
CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0KKyAgfSk7CisgIGlmIChhcHBFbGVtZW50KSB7
CisgICAgYm9vdHN0cmFwKGFwcEVsZW1lbnQsIG1vZHVsZSA/IFttb2R1bGVdIDogW10pOworICB9
Cit9CisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmJvb3RzdHJh
cAorICogQGRlc2NyaXB0aW9uCisgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBtYW51YWxseSBzdGFy
dCB1cCBhbmd1bGFyIGFwcGxpY2F0aW9uLgorICoKKyAqIFNlZToge0BsaW5rIGd1aWRlL2Jvb3Rz
dHJhcCBCb290c3RyYXB9CisgKgorICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IERPTSBlbGVt
ZW50IHdoaWNoIGlzIHRoZSByb290IG9mIGFuZ3VsYXIgYXBwbGljYXRpb24uCisgKiBAcGFyYW0g
e0FycmF5PFN0cmluZ3xGdW5jdGlvbj49fSBtb2R1bGVzIGFuIGFycmF5IG9mIG1vZHVsZSBkZWNs
YXJhdGlvbnMuIFNlZToge0BsaW5rIGFuZ3VsYXIubW9kdWxlIG1vZHVsZXN9CisgKiBAcmV0dXJu
cyB7QVVUTy4kaW5qZWN0b3J9IFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgaW5qZWN0b3IgZm9y
IHRoaXMgYXBwLgorICovCitmdW5jdGlvbiBib290c3RyYXAoZWxlbWVudCwgbW9kdWxlcykgewor
ICB2YXIgcmVzdW1lQm9vdHN0cmFwSW50ZXJuYWwgPSBmdW5jdGlvbigpIHsKKyAgICBlbGVtZW50
ID0ganFMaXRlKGVsZW1lbnQpOworICAgIG1vZHVsZXMgPSBtb2R1bGVzIHx8IFtdOworICAgIG1v
ZHVsZXMudW5zaGlmdChbJyRwcm92aWRlJywgZnVuY3Rpb24oJHByb3ZpZGUpIHsKKyAgICAgICRw
cm92aWRlLnZhbHVlKCckcm9vdEVsZW1lbnQnLCBlbGVtZW50KTsKKyAgICB9XSk7CisgICAgbW9k
dWxlcy51bnNoaWZ0KCduZycpOworICAgIHZhciBpbmplY3RvciA9IGNyZWF0ZUluamVjdG9yKG1v
ZHVsZXMpOworICAgIGluamVjdG9yLmludm9rZShbJyRyb290U2NvcGUnLCAnJHJvb3RFbGVtZW50
JywgJyRjb21waWxlJywgJyRpbmplY3RvcicsCisgICAgICAgZnVuY3Rpb24oc2NvcGUsIGVsZW1l
bnQsIGNvbXBpbGUsIGluamVjdG9yKSB7CisgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigp
IHsKKyAgICAgICAgICBlbGVtZW50LmRhdGEoJyRpbmplY3RvcicsIGluamVjdG9yKTsKKyAgICAg
ICAgICBjb21waWxlKGVsZW1lbnQpKHNjb3BlKTsKKyAgICAgICAgfSk7CisgICAgICB9XQorICAg
ICk7CisgICAgcmV0dXJuIGluamVjdG9yOworICB9OworCisgIHZhciBOR19ERUZFUl9CT09UU1RS
QVAgPSAvXk5HX0RFRkVSX0JPT1RTVFJBUCEvOworCisgIGlmICh3aW5kb3cgJiYgIU5HX0RFRkVS
X0JPT1RTVFJBUC50ZXN0KHdpbmRvdy5uYW1lKSkgeworICAgIHJldHVybiByZXN1bWVCb290c3Ry
YXBJbnRlcm5hbCgpOworICB9CisKKyAgd2luZG93Lm5hbWUgPSB3aW5kb3cubmFtZS5yZXBsYWNl
KE5HX0RFRkVSX0JPT1RTVFJBUCwgJycpOworICBhbmd1bGFyLnJlc3VtZUJvb3RzdHJhcCA9IGZ1
bmN0aW9uKGV4dHJhTW9kdWxlcykgeworICAgIGZvckVhY2goZXh0cmFNb2R1bGVzLCBmdW5jdGlv
bihtb2R1bGUpIHsKKyAgICAgIG1vZHVsZXMucHVzaChtb2R1bGUpOworICAgIH0pOworICAgIHJl
c3VtZUJvb3RzdHJhcEludGVybmFsKCk7CisgIH07Cit9CisKK3ZhciBTTkFLRV9DQVNFX1JFR0VY
UCA9IC9bQS1aXS9nOworZnVuY3Rpb24gc25ha2VfY2FzZShuYW1lLCBzZXBhcmF0b3IpeworICBz
ZXBhcmF0b3IgPSBzZXBhcmF0b3IgfHwgJ18nOworICByZXR1cm4gbmFtZS5yZXBsYWNlKFNOQUtF
X0NBU0VfUkVHRVhQLCBmdW5jdGlvbihsZXR0ZXIsIHBvcykgeworICAgIHJldHVybiAocG9zID8g
c2VwYXJhdG9yIDogJycpICsgbGV0dGVyLnRvTG93ZXJDYXNlKCk7CisgIH0pOworfQorCitmdW5j
dGlvbiBiaW5kSlF1ZXJ5KCkgeworICAvLyBiaW5kIHRvIGpRdWVyeSBpZiBwcmVzZW50OworICBq
UXVlcnkgPSB3aW5kb3cualF1ZXJ5OworICAvLyByZXNldCB0byBqUXVlcnkgb3IgZGVmYXVsdCB0
byB1cy4KKyAgaWYgKGpRdWVyeSkgeworICAgIGpxTGl0ZSA9IGpRdWVyeTsKKyAgICBleHRlbmQo
alF1ZXJ5LmZuLCB7CisgICAgICBzY29wZTogSlFMaXRlUHJvdG90eXBlLnNjb3BlLAorICAgICAg
Y29udHJvbGxlcjogSlFMaXRlUHJvdG90eXBlLmNvbnRyb2xsZXIsCisgICAgICBpbmplY3Rvcjog
SlFMaXRlUHJvdG90eXBlLmluamVjdG9yLAorICAgICAgaW5oZXJpdGVkRGF0YTogSlFMaXRlUHJv
dG90eXBlLmluaGVyaXRlZERhdGEKKyAgICB9KTsKKyAgICBKUUxpdGVQYXRjaEpRdWVyeVJlbW92
ZSgncmVtb3ZlJywgdHJ1ZSk7CisgICAgSlFMaXRlUGF0Y2hKUXVlcnlSZW1vdmUoJ2VtcHR5Jyk7
CisgICAgSlFMaXRlUGF0Y2hKUXVlcnlSZW1vdmUoJ2h0bWwnKTsKKyAgfSBlbHNlIHsKKyAgICBq
cUxpdGUgPSBKUUxpdGU7CisgIH0KKyAgYW5ndWxhci5lbGVtZW50ID0ganFMaXRlOworfQorCisv
KioKKyAqIHRocm93IGVycm9yIGlmIHRoZSBhcmd1bWVudCBpcyBmYWxzeS4KKyAqLworZnVuY3Rp
b24gYXNzZXJ0QXJnKGFyZywgbmFtZSwgcmVhc29uKSB7CisgIGlmICghYXJnKSB7CisgICAgdGhy
b3cgbmV3IEVycm9yKCJBcmd1bWVudCAnIiArIChuYW1lIHx8ICc/JykgKyAiJyBpcyAiICsgKHJl
YXNvbiB8fCAicmVxdWlyZWQiKSk7CisgIH0KKyAgcmV0dXJuIGFyZzsKK30KKworZnVuY3Rpb24g
YXNzZXJ0QXJnRm4oYXJnLCBuYW1lLCBhY2NlcHRBcnJheUFubm90YXRpb24pIHsKKyAgaWYgKGFj
Y2VwdEFycmF5QW5ub3RhdGlvbiAmJiBpc0FycmF5KGFyZykpIHsKKyAgICAgIGFyZyA9IGFyZ1th
cmcubGVuZ3RoIC0gMV07CisgIH0KKworICBhc3NlcnRBcmcoaXNGdW5jdGlvbihhcmcpLCBuYW1l
LCAnbm90IGEgZnVuY3Rpb24sIGdvdCAnICsKKyAgICAgIChhcmcgJiYgdHlwZW9mIGFyZyA9PSAn
b2JqZWN0JyA/IGFyZy5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnIDogdHlwZW9mIGFyZykp
OworICByZXR1cm4gYXJnOworfQorCisvKioKKyAqIEBuZ2RvYyBpbnRlcmZhY2UKKyAqIEBuYW1l
IGFuZ3VsYXIuTW9kdWxlCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBJbnRlcmZhY2UgZm9yIGNv
bmZpZ3VyaW5nIGFuZ3VsYXIge0BsaW5rIGFuZ3VsYXIubW9kdWxlIG1vZHVsZXN9LgorICovCisK
K2Z1bmN0aW9uIHNldHVwTW9kdWxlTG9hZGVyKHdpbmRvdykgeworCisgIGZ1bmN0aW9uIGVuc3Vy
ZShvYmosIG5hbWUsIGZhY3RvcnkpIHsKKyAgICByZXR1cm4gb2JqW25hbWVdIHx8IChvYmpbbmFt
ZV0gPSBmYWN0b3J5KCkpOworICB9CisKKyAgcmV0dXJuIGVuc3VyZShlbnN1cmUod2luZG93LCAn
YW5ndWxhcicsIE9iamVjdCksICdtb2R1bGUnLCBmdW5jdGlvbigpIHsKKyAgICAvKiogQHR5cGUg
e09iamVjdC48c3RyaW5nLCBhbmd1bGFyLk1vZHVsZT59ICovCisgICAgdmFyIG1vZHVsZXMgPSB7
fTsKKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBmdW5jdGlvbgorICAgICAqIEBuYW1lIGFuZ3Vs
YXIubW9kdWxlCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICoKKyAgICAgKiBUaGUgYGFuZ3Vs
YXIubW9kdWxlYCBpcyBhIGdsb2JhbCBwbGFjZSBmb3IgY3JlYXRpbmcgYW5kIHJlZ2lzdGVyaW5n
IEFuZ3VsYXIgbW9kdWxlcy4gQWxsCisgICAgICogbW9kdWxlcyAoYW5ndWxhciBjb3JlIG9yIDNy
ZCBwYXJ0eSkgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlIHRvIGFuIGFwcGxpY2F0aW9uIG11c3Qg
YmUKKyAgICAgKiByZWdpc3RlcmVkIHVzaW5nIHRoaXMgbWVjaGFuaXNtLgorICAgICAqCisgICAg
ICoKKyAgICAgKiAjIE1vZHVsZQorICAgICAqCisgICAgICogQSBtb2R1bGUgaXMgYSBjb2xsb2Nh
dGlvbiBvZiBzZXJ2aWNlcywgZGlyZWN0aXZlcywgZmlsdGVycywgYW5kIGNvbmZpZ3VyYXRpb24g
aW5mb3JtYXRpb24uIE1vZHVsZQorICAgICAqIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSB7QGxp
bmsgQVVUTy4kaW5qZWN0b3IgJGluamVjdG9yfS4KKyAgICAgKgorICAgICAqIDxwcmU+CisgICAg
ICogLy8gQ3JlYXRlIGEgbmV3IG1vZHVsZQorICAgICAqIHZhciBteU1vZHVsZSA9IGFuZ3VsYXIu
bW9kdWxlKCdteU1vZHVsZScsIFtdKTsKKyAgICAgKgorICAgICAqIC8vIHJlZ2lzdGVyIGEgbmV3
IHNlcnZpY2UKKyAgICAgKiBteU1vZHVsZS52YWx1ZSgnYXBwTmFtZScsICdNeUNvb2xBcHAnKTsK
KyAgICAgKgorICAgICAqIC8vIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcyBpbnNpZGUgaW5p
dGlhbGl6YXRpb24gYmxvY2tzLgorICAgICAqIG15TW9kdWxlLmNvbmZpZyhmdW5jdGlvbigkbG9j
YXRpb25Qcm92aWRlcikgeworICAgICAqICAgLy8gQ29uZmlndXJlIGV4aXN0aW5nIHByb3ZpZGVy
cworICAgICAqICAgJGxvY2F0aW9uUHJvdmlkZXIuaGFzaFByZWZpeCgnIScpOworICAgICAqIH0p
OworICAgICAqIDwvcHJlPgorICAgICAqCisgICAgICogVGhlbiB5b3UgY2FuIGNyZWF0ZSBhbiBp
bmplY3RvciBhbmQgbG9hZCB5b3VyIG1vZHVsZXMgbGlrZSB0aGlzOgorICAgICAqCisgICAgICog
PHByZT4KKyAgICAgKiB2YXIgaW5qZWN0b3IgPSBhbmd1bGFyLmluamVjdG9yKFsnbmcnLCAnTXlN
b2R1bGUnXSkKKyAgICAgKiA8L3ByZT4KKyAgICAgKgorICAgICAqIEhvd2V2ZXIgaXQncyBtb3Jl
IGxpa2VseSB0aGF0IHlvdSdsbCBqdXN0IHVzZQorICAgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6
bmdBcHAgbmdBcHB9IG9yCisgICAgICoge0BsaW5rIGFuZ3VsYXIuYm9vdHN0cmFwfSB0byBzaW1w
bGlmeSB0aGlzIHByb2Nlc3MgZm9yIHlvdS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7IXN0cmlu
Z30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIGNyZWF0ZSBvciByZXRyaWV2ZS4KKyAg
ICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+PX0gcmVxdWlyZXMgSWYgc3BlY2lmaWVkIHRoZW4g
bmV3IG1vZHVsZSBpcyBiZWluZyBjcmVhdGVkLiBJZiB1bnNwZWNpZmllZCB0aGVuIHRoZQorICAg
ICAqICAgICAgICB0aGUgbW9kdWxlIGlzIGJlaW5nIHJldHJpZXZlZCBmb3IgZnVydGhlciBjb25m
aWd1cmF0aW9uLgorICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmZpZ0ZuIE9wdGlvbmFsIGNv
bmZpZ3VyYXRpb24gZnVuY3Rpb24gZm9yIHRoZSBtb2R1bGUuIFNhbWUgYXMKKyAgICAgKiAgICAg
ICAge0BsaW5rIGFuZ3VsYXIuTW9kdWxlI2NvbmZpZyBNb2R1bGUjY29uZmlnKCl9LgorICAgICAq
IEByZXR1cm5zIHttb2R1bGV9IG5ldyBtb2R1bGUgd2l0aCB0aGUge0BsaW5rIGFuZ3VsYXIuTW9k
dWxlfSBhcGkuCisgICAgICovCisgICAgcmV0dXJuIGZ1bmN0aW9uIG1vZHVsZShuYW1lLCByZXF1
aXJlcywgY29uZmlnRm4pIHsKKyAgICAgIGlmIChyZXF1aXJlcyAmJiBtb2R1bGVzLmhhc093blBy
b3BlcnR5KG5hbWUpKSB7CisgICAgICAgIG1vZHVsZXNbbmFtZV0gPSBudWxsOworICAgICAgfQor
ICAgICAgcmV0dXJuIGVuc3VyZShtb2R1bGVzLCBuYW1lLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKCFyZXF1aXJlcykgeworICAgICAgICAgIHRocm93IEVycm9yKCdObyBtb2R1bGU6ICcgKyBu
YW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBAdHlwZSB7IUFycmF5LjxBcnJheS48Kj4+
fSAqLworICAgICAgICB2YXIgaW52b2tlUXVldWUgPSBbXTsKKworICAgICAgICAvKiogQHR5cGUg
eyFBcnJheS48RnVuY3Rpb24+fSAqLworICAgICAgICB2YXIgcnVuQmxvY2tzID0gW107CisKKyAg
ICAgICAgdmFyIGNvbmZpZyA9IGludm9rZUxhdGVyKCckaW5qZWN0b3InLCAnaW52b2tlJyk7CisK
KyAgICAgICAgLyoqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX0gKi8KKyAgICAgICAgdmFyIG1vZHVs
ZUluc3RhbmNlID0geworICAgICAgICAgIC8vIFByaXZhdGUgc3RhdGUKKyAgICAgICAgICBfaW52
b2tlUXVldWU6IGludm9rZVF1ZXVlLAorICAgICAgICAgIF9ydW5CbG9ja3M6IHJ1bkJsb2NrcywK
KworICAgICAgICAgIC8qKgorICAgICAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eQorICAgICAgICAg
ICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI3JlcXVpcmVzCisgICAgICAgICAgICogQHByb3BlcnR5
T2YgYW5ndWxhci5Nb2R1bGUKKyAgICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59
IExpc3Qgb2YgbW9kdWxlIG5hbWVzIHdoaWNoIG11c3QgYmUgbG9hZGVkIGJlZm9yZSB0aGlzIG1v
ZHVsZS4KKyAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAgICAgKiBIb2xkcyB0aGUg
bGlzdCBvZiBtb2R1bGVzIHdoaWNoIHRoZSBpbmplY3RvciB3aWxsIGxvYWQgYmVmb3JlIHRoZSBj
dXJyZW50IG1vZHVsZSBpcyBsb2FkZWQuCisgICAgICAgICAgICovCisgICAgICAgICAgcmVxdWly
ZXM6IHJlcXVpcmVzLAorCisgICAgICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIHByb3Bl
cnR5CisgICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjbmFtZQorICAgICAgICAgICAq
IEBwcm9wZXJ0eU9mIGFuZ3VsYXIuTW9kdWxlCisgICAgICAgICAgICogQHJldHVybnMge3N0cmlu
Z30gTmFtZSBvZiB0aGUgbW9kdWxlLgorICAgICAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAg
ICAgICAqLworICAgICAgICAgIG5hbWU6IG5hbWUsCisKKworICAgICAgICAgIC8qKgorICAgICAg
ICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNw
cm92aWRlcgorICAgICAgICAgICAqIEBtZXRob2RPZiBhbmd1bGFyLk1vZHVsZQorICAgICAgICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHNlcnZpY2UgbmFtZQorICAgICAgICAgICAqIEBwYXJh
bSB7RnVuY3Rpb259IHByb3ZpZGVyVHlwZSBDb25zdHJ1Y3Rpb24gZnVuY3Rpb24gZm9yIGNyZWF0
aW5nIG5ldyBpbnN0YW5jZSBvZiB0aGUgc2VydmljZS4KKyAgICAgICAgICAgKiBAZGVzY3JpcHRp
b24KKyAgICAgICAgICAgKiBTZWUge0BsaW5rIEFVVE8uJHByb3ZpZGUjcHJvdmlkZXIgJHByb3Zp
ZGUucHJvdmlkZXIoKX0uCisgICAgICAgICAgICovCisgICAgICAgICAgcHJvdmlkZXI6IGludm9r
ZUxhdGVyKCckcHJvdmlkZScsICdwcm92aWRlcicpLAorCisgICAgICAgICAgLyoqCisgICAgICAg
ICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2Zh
Y3RvcnkKKyAgICAgICAgICAgKiBAbWV0aG9kT2YgYW5ndWxhci5Nb2R1bGUKKyAgICAgICAgICAg
KiBAcGFyYW0ge3N0cmluZ30gbmFtZSBzZXJ2aWNlIG5hbWUKKyAgICAgICAgICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufSBwcm92aWRlckZ1bmN0aW9uIEZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5z
dGFuY2Ugb2YgdGhlIHNlcnZpY2UuCisgICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAg
ICAgICogU2VlIHtAbGluayBBVVRPLiRwcm92aWRlI2ZhY3RvcnkgJHByb3ZpZGUuZmFjdG9yeSgp
fS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBmYWN0b3J5OiBpbnZva2VMYXRlcignJHByb3Zp
ZGUnLCAnZmFjdG9yeScpLAorCisgICAgICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI3NlcnZpY2UKKyAgICAgICAg
ICAgKiBAbWV0aG9kT2YgYW5ndWxhci5Nb2R1bGUKKyAgICAgICAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gbmFtZSBzZXJ2aWNlIG5hbWUKKyAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25z
dHJ1Y3RvciBBIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWQu
CisgICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAgICogU2VlIHtAbGluayBBVVRP
LiRwcm92aWRlI3NlcnZpY2UgJHByb3ZpZGUuc2VydmljZSgpfS4KKyAgICAgICAgICAgKi8KKyAg
ICAgICAgICBzZXJ2aWNlOiBpbnZva2VMYXRlcignJHByb3ZpZGUnLCAnc2VydmljZScpLAorCisg
ICAgICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICAgICAqIEBu
YW1lIGFuZ3VsYXIuTW9kdWxlI3ZhbHVlCisgICAgICAgICAgICogQG1ldGhvZE9mIGFuZ3VsYXIu
TW9kdWxlCisgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgc2VydmljZSBuYW1lCisg
ICAgICAgICAgICogQHBhcmFtIHsqfSBvYmplY3QgU2VydmljZSBpbnN0YW5jZSBvYmplY3QuCisg
ICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAgICogU2VlIHtAbGluayBBVVRPLiRw
cm92aWRlI3ZhbHVlICRwcm92aWRlLnZhbHVlKCl9LgorICAgICAgICAgICAqLworICAgICAgICAg
IHZhbHVlOiBpbnZva2VMYXRlcignJHByb3ZpZGUnLCAndmFsdWUnKSwKKworICAgICAgICAgIC8q
KgorICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFy
Lk1vZHVsZSNjb25zdGFudAorICAgICAgICAgICAqIEBtZXRob2RPZiBhbmd1bGFyLk1vZHVsZQor
ICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIGNvbnN0YW50IG5hbWUKKyAgICAgICAg
ICAgKiBAcGFyYW0geyp9IG9iamVjdCBDb25zdGFudCB2YWx1ZS4KKyAgICAgICAgICAgKiBAZGVz
Y3JpcHRpb24KKyAgICAgICAgICAgKiBCZWNhdXNlIHRoZSBjb25zdGFudCBhcmUgZml4ZWQsIHRo
ZXkgZ2V0IGFwcGxpZWQgYmVmb3JlIG90aGVyIHByb3ZpZGUgbWV0aG9kcy4KKyAgICAgICAgICAg
KiBTZWUge0BsaW5rIEFVVE8uJHByb3ZpZGUjY29uc3RhbnQgJHByb3ZpZGUuY29uc3RhbnQoKX0u
CisgICAgICAgICAgICovCisgICAgICAgICAgY29uc3RhbnQ6IGludm9rZUxhdGVyKCckcHJvdmlk
ZScsICdjb25zdGFudCcsICd1bnNoaWZ0JyksCisKKyAgICAgICAgICAvKioKKyAgICAgICAgICAg
KiBAbmdkb2MgbWV0aG9kCisgICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjZmlsdGVy
CisgICAgICAgICAgICogQG1ldGhvZE9mIGFuZ3VsYXIuTW9kdWxlCisgICAgICAgICAgICogQHBh
cmFtIHtzdHJpbmd9IG5hbWUgRmlsdGVyIG5hbWUuCisgICAgICAgICAgICogQHBhcmFtIHtGdW5j
dGlvbn0gZmlsdGVyRmFjdG9yeSBGYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5z
dGFuY2Ugb2YgZmlsdGVyLgorICAgICAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICAgICAq
IFNlZSB7QGxpbmsgbmcuJGZpbHRlclByb3ZpZGVyI3JlZ2lzdGVyICRmaWx0ZXJQcm92aWRlci5y
ZWdpc3RlcigpfS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBmaWx0ZXI6IGludm9rZUxhdGVy
KCckZmlsdGVyUHJvdmlkZXInLCAncmVnaXN0ZXInKSwKKworICAgICAgICAgIC8qKgorICAgICAg
ICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNj
b250cm9sbGVyCisgICAgICAgICAgICogQG1ldGhvZE9mIGFuZ3VsYXIuTW9kdWxlCisgICAgICAg
ICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ29udHJvbGxlciBuYW1lLgorICAgICAgICAgICAq
IEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yIENvbnRyb2xsZXIgY29uc3RydWN0b3IgZnVu
Y3Rpb24uCisgICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAgICogU2VlIHtAbGlu
ayBuZy4kY29udHJvbGxlclByb3ZpZGVyI3JlZ2lzdGVyICRjb250cm9sbGVyUHJvdmlkZXIucmVn
aXN0ZXIoKX0uCisgICAgICAgICAgICovCisgICAgICAgICAgY29udHJvbGxlcjogaW52b2tlTGF0
ZXIoJyRjb250cm9sbGVyUHJvdmlkZXInLCAncmVnaXN0ZXInKSwKKworICAgICAgICAgIC8qKgor
ICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1v
ZHVsZSNkaXJlY3RpdmUKKyAgICAgICAgICAgKiBAbWV0aG9kT2YgYW5ndWxhci5Nb2R1bGUKKyAg
ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBkaXJlY3RpdmUgbmFtZQorICAgICAgICAg
ICAqIEBwYXJhbSB7RnVuY3Rpb259IGRpcmVjdGl2ZUZhY3RvcnkgRmFjdG9yeSBmdW5jdGlvbiBm
b3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlIG9mCisgICAgICAgICAgICogZGlyZWN0aXZlcy4KKyAg
ICAgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAgICAgKiBTZWUge0BsaW5rIG5nLiRjb21w
aWxlUHJvdmlkZXIjZGlyZWN0aXZlICRjb21waWxlUHJvdmlkZXIuZGlyZWN0aXZlKCl9LgorICAg
ICAgICAgICAqLworICAgICAgICAgIGRpcmVjdGl2ZTogaW52b2tlTGF0ZXIoJyRjb21waWxlUHJv
dmlkZXInLCAnZGlyZWN0aXZlJyksCisKKyAgICAgICAgICAvKioKKyAgICAgICAgICAgKiBAbmdk
b2MgbWV0aG9kCisgICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjY29uZmlnCisgICAg
ICAgICAgICogQG1ldGhvZE9mIGFuZ3VsYXIuTW9kdWxlCisgICAgICAgICAgICogQHBhcmFtIHtG
dW5jdGlvbn0gY29uZmlnRm4gRXhlY3V0ZSB0aGlzIGZ1bmN0aW9uIG9uIG1vZHVsZSBsb2FkLiBV
c2VmdWwgZm9yIHNlcnZpY2UKKyAgICAgICAgICAgKiAgICBjb25maWd1cmF0aW9uLgorICAgICAg
ICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byByZWdp
c3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZy4K
KyAgICAgICAgICAgKi8KKyAgICAgICAgICBjb25maWc6IGNvbmZpZywKKworICAgICAgICAgIC8q
KgorICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFy
Lk1vZHVsZSNydW4KKyAgICAgICAgICAgKiBAbWV0aG9kT2YgYW5ndWxhci5Nb2R1bGUKKyAgICAg
ICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbml0aWFsaXphdGlvbkZuIEV4ZWN1dGUgdGhpcyBm
dW5jdGlvbiBhZnRlciBpbmplY3RvciBjcmVhdGlvbi4KKyAgICAgICAgICAgKiAgICBVc2VmdWwg
Zm9yIGFwcGxpY2F0aW9uIGluaXRpYWxpemF0aW9uLgorICAgICAgICAgICAqIEBkZXNjcmlwdGlv
bgorICAgICAgICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIHNo
b3VsZCBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgaW5qZWN0b3IgaXMgZG9uZQorICAgICAgICAgICAq
IGxvYWRpbmcgYWxsIG1vZHVsZXMuCisgICAgICAgICAgICovCisgICAgICAgICAgcnVuOiBmdW5j
dGlvbihibG9jaykgeworICAgICAgICAgICAgcnVuQmxvY2tzLnB1c2goYmxvY2spOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGlm
IChjb25maWdGbikgeworICAgICAgICAgIGNvbmZpZyhjb25maWdGbik7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gIG1vZHVsZUluc3RhbmNlOworCisgICAgICAgIC8qKgorICAgICAgICAg
KiBAcGFyYW0ge3N0cmluZ30gcHJvdmlkZXIKKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1l
dGhvZAorICAgICAgICAgKiBAcGFyYW0ge1N0cmluZz19IGluc2VydE1ldGhvZAorICAgICAgICAg
KiBAcmV0dXJucyB7YW5ndWxhci5Nb2R1bGV9CisgICAgICAgICAqLworICAgICAgICBmdW5jdGlv
biBpbnZva2VMYXRlcihwcm92aWRlciwgbWV0aG9kLCBpbnNlcnRNZXRob2QpIHsKKyAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbnZva2VRdWV1ZVtpbnNlcnRNZXRo
b2QgfHwgJ3B1c2gnXShbcHJvdmlkZXIsIG1ldGhvZCwgYXJndW1lbnRzXSk7CisgICAgICAgICAg
ICByZXR1cm4gbW9kdWxlSW5zdGFuY2U7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9
KTsKKyAgICB9OworICB9KTsKKworfQorCisvKioKKyAqIEBuZ2RvYyBwcm9wZXJ0eQorICogQG5h
bWUgYW5ndWxhci52ZXJzaW9uCisgKiBAZGVzY3JpcHRpb24KKyAqIEFuIG9iamVjdCB0aGF0IGNv
bnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IEFuZ3VsYXJKUyB2ZXJzaW9uLiBU
aGlzIG9iamVjdCBoYXMgdGhlCisgKiBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAqCisgKiAtIGBm
dWxsYCDigJMgYHtzdHJpbmd9YCDigJMgRnVsbCB2ZXJzaW9uIHN0cmluZywgc3VjaCBhcyAiMC45
LjE4Ii4KKyAqIC0gYG1ham9yYCDigJMgYHtudW1iZXJ9YCDigJMgTWFqb3IgdmVyc2lvbiBudW1i
ZXIsIHN1Y2ggYXMgIjAiLgorICogLSBgbWlub3JgIOKAkyBge251bWJlcn1gIOKAkyBNaW5vciB2
ZXJzaW9uIG51bWJlciwgc3VjaCBhcyAiOSIuCisgKiAtIGBkb3RgIOKAkyBge251bWJlcn1gIOKA
kyBEb3QgdmVyc2lvbiBudW1iZXIsIHN1Y2ggYXMgIjE4Ii4KKyAqIC0gYGNvZGVOYW1lYCDigJMg
YHtzdHJpbmd9YCDigJMgQ29kZSBuYW1lIG9mIHRoZSByZWxlYXNlLCBzdWNoIGFzICJqaWdnbGlu
Zy1hcm1mYXQiLgorICovCit2YXIgdmVyc2lvbiA9IHsKKyAgZnVsbDogJzEuMC43JywgICAgLy8g
YWxsIG9mIHRoZXNlIHBsYWNlaG9sZGVyIHN0cmluZ3Mgd2lsbCBiZSByZXBsYWNlZCBieSBncnVu
dCdzCisgIG1ham9yOiAxLCAgICAvLyBwYWNrYWdlIHRhc2sKKyAgbWlub3I6IDAsCisgIGRvdDog
NywKKyAgY29kZU5hbWU6ICdtb25vY2hyb21hdGljLXJhaW5ib3cnCit9OworCisKK2Z1bmN0aW9u
IHB1Ymxpc2hFeHRlcm5hbEFQSShhbmd1bGFyKXsKKyAgZXh0ZW5kKGFuZ3VsYXIsIHsKKyAgICAn
Ym9vdHN0cmFwJzogYm9vdHN0cmFwLAorICAgICdjb3B5JzogY29weSwKKyAgICAnZXh0ZW5kJzog
ZXh0ZW5kLAorICAgICdlcXVhbHMnOiBlcXVhbHMsCisgICAgJ2VsZW1lbnQnOiBqcUxpdGUsCisg
ICAgJ2ZvckVhY2gnOiBmb3JFYWNoLAorICAgICdpbmplY3Rvcic6IGNyZWF0ZUluamVjdG9yLAor
ICAgICdub29wJzpub29wLAorICAgICdiaW5kJzpiaW5kLAorICAgICd0b0pzb24nOiB0b0pzb24s
CisgICAgJ2Zyb21Kc29uJzogZnJvbUpzb24sCisgICAgJ2lkZW50aXR5JzppZGVudGl0eSwKKyAg
ICAnaXNVbmRlZmluZWQnOiBpc1VuZGVmaW5lZCwKKyAgICAnaXNEZWZpbmVkJzogaXNEZWZpbmVk
LAorICAgICdpc1N0cmluZyc6IGlzU3RyaW5nLAorICAgICdpc0Z1bmN0aW9uJzogaXNGdW5jdGlv
biwKKyAgICAnaXNPYmplY3QnOiBpc09iamVjdCwKKyAgICAnaXNOdW1iZXInOiBpc051bWJlciwK
KyAgICAnaXNFbGVtZW50JzogaXNFbGVtZW50LAorICAgICdpc0FycmF5JzogaXNBcnJheSwKKyAg
ICAndmVyc2lvbic6IHZlcnNpb24sCisgICAgJ2lzRGF0ZSc6IGlzRGF0ZSwKKyAgICAnbG93ZXJj
YXNlJzogbG93ZXJjYXNlLAorICAgICd1cHBlcmNhc2UnOiB1cHBlcmNhc2UsCisgICAgJ2NhbGxi
YWNrcyc6IHtjb3VudGVyOiAwfQorICB9KTsKKworICBhbmd1bGFyTW9kdWxlID0gc2V0dXBNb2R1
bGVMb2FkZXIod2luZG93KTsKKyAgdHJ5IHsKKyAgICBhbmd1bGFyTW9kdWxlKCduZ0xvY2FsZScp
OworICB9IGNhdGNoIChlKSB7CisgICAgYW5ndWxhck1vZHVsZSgnbmdMb2NhbGUnLCBbXSkucHJv
dmlkZXIoJyRsb2NhbGUnLCAkTG9jYWxlUHJvdmlkZXIpOworICB9CisKKyAgYW5ndWxhck1vZHVs
ZSgnbmcnLCBbJ25nTG9jYWxlJ10sIFsnJHByb3ZpZGUnLAorICAgIGZ1bmN0aW9uIG5nTW9kdWxl
KCRwcm92aWRlKSB7CisgICAgICAkcHJvdmlkZS5wcm92aWRlcignJGNvbXBpbGUnLCAkQ29tcGls
ZVByb3ZpZGVyKS4KKyAgICAgICAgZGlyZWN0aXZlKHsKKyAgICAgICAgICAgIGE6IGh0bWxBbmNo
b3JEaXJlY3RpdmUsCisgICAgICAgICAgICBpbnB1dDogaW5wdXREaXJlY3RpdmUsCisgICAgICAg
ICAgICB0ZXh0YXJlYTogaW5wdXREaXJlY3RpdmUsCisgICAgICAgICAgICBmb3JtOiBmb3JtRGly
ZWN0aXZlLAorICAgICAgICAgICAgc2NyaXB0OiBzY3JpcHREaXJlY3RpdmUsCisgICAgICAgICAg
ICBzZWxlY3Q6IHNlbGVjdERpcmVjdGl2ZSwKKyAgICAgICAgICAgIHN0eWxlOiBzdHlsZURpcmVj
dGl2ZSwKKyAgICAgICAgICAgIG9wdGlvbjogb3B0aW9uRGlyZWN0aXZlLAorICAgICAgICAgICAg
bmdCaW5kOiBuZ0JpbmREaXJlY3RpdmUsCisgICAgICAgICAgICBuZ0JpbmRIdG1sVW5zYWZlOiBu
Z0JpbmRIdG1sVW5zYWZlRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdCaW5kVGVtcGxhdGU6IG5n
QmluZFRlbXBsYXRlRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdDbGFzczogbmdDbGFzc0RpcmVj
dGl2ZSwKKyAgICAgICAgICAgIG5nQ2xhc3NFdmVuOiBuZ0NsYXNzRXZlbkRpcmVjdGl2ZSwKKyAg
ICAgICAgICAgIG5nQ2xhc3NPZGQ6IG5nQ2xhc3NPZGREaXJlY3RpdmUsCisgICAgICAgICAgICBu
Z0NzcDogbmdDc3BEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ0Nsb2FrOiBuZ0Nsb2FrRGlyZWN0
aXZlLAorICAgICAgICAgICAgbmdDb250cm9sbGVyOiBuZ0NvbnRyb2xsZXJEaXJlY3RpdmUsCisg
ICAgICAgICAgICBuZ0Zvcm06IG5nRm9ybURpcmVjdGl2ZSwKKyAgICAgICAgICAgIG5nSGlkZTog
bmdIaWRlRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdJbmNsdWRlOiBuZ0luY2x1ZGVEaXJlY3Rp
dmUsCisgICAgICAgICAgICBuZ0luaXQ6IG5nSW5pdERpcmVjdGl2ZSwKKyAgICAgICAgICAgIG5n
Tm9uQmluZGFibGU6IG5nTm9uQmluZGFibGVEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ1BsdXJh
bGl6ZTogbmdQbHVyYWxpemVEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ1JlcGVhdDogbmdSZXBl
YXREaXJlY3RpdmUsCisgICAgICAgICAgICBuZ1Nob3c6IG5nU2hvd0RpcmVjdGl2ZSwKKyAgICAg
ICAgICAgIG5nU3VibWl0OiBuZ1N1Ym1pdERpcmVjdGl2ZSwKKyAgICAgICAgICAgIG5nU3R5bGU6
IG5nU3R5bGVEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ1N3aXRjaDogbmdTd2l0Y2hEaXJlY3Rp
dmUsCisgICAgICAgICAgICBuZ1N3aXRjaFdoZW46IG5nU3dpdGNoV2hlbkRpcmVjdGl2ZSwKKyAg
ICAgICAgICAgIG5nU3dpdGNoRGVmYXVsdDogbmdTd2l0Y2hEZWZhdWx0RGlyZWN0aXZlLAorICAg
ICAgICAgICAgbmdPcHRpb25zOiBuZ09wdGlvbnNEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ1Zp
ZXc6IG5nVmlld0RpcmVjdGl2ZSwKKyAgICAgICAgICAgIG5nVHJhbnNjbHVkZTogbmdUcmFuc2Ns
dWRlRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdNb2RlbDogbmdNb2RlbERpcmVjdGl2ZSwKKyAg
ICAgICAgICAgIG5nTGlzdDogbmdMaXN0RGlyZWN0aXZlLAorICAgICAgICAgICAgbmdDaGFuZ2U6
IG5nQ2hhbmdlRGlyZWN0aXZlLAorICAgICAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkRGlyZWN0
aXZlLAorICAgICAgICAgICAgbmdSZXF1aXJlZDogcmVxdWlyZWREaXJlY3RpdmUsCisgICAgICAg
ICAgICBuZ1ZhbHVlOiBuZ1ZhbHVlRGlyZWN0aXZlCisgICAgICAgIH0pLgorICAgICAgICBkaXJl
Y3RpdmUobmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2ZXMpLgorICAgICAgICBkaXJlY3RpdmUobmdF
dmVudERpcmVjdGl2ZXMpOworICAgICAgJHByb3ZpZGUucHJvdmlkZXIoeworICAgICAgICAkYW5j
aG9yU2Nyb2xsOiAkQW5jaG9yU2Nyb2xsUHJvdmlkZXIsCisgICAgICAgICRicm93c2VyOiAkQnJv
d3NlclByb3ZpZGVyLAorICAgICAgICAkY2FjaGVGYWN0b3J5OiAkQ2FjaGVGYWN0b3J5UHJvdmlk
ZXIsCisgICAgICAgICRjb250cm9sbGVyOiAkQ29udHJvbGxlclByb3ZpZGVyLAorICAgICAgICAk
ZG9jdW1lbnQ6ICREb2N1bWVudFByb3ZpZGVyLAorICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcjog
JEV4Y2VwdGlvbkhhbmRsZXJQcm92aWRlciwKKyAgICAgICAgJGZpbHRlcjogJEZpbHRlclByb3Zp
ZGVyLAorICAgICAgICAkaW50ZXJwb2xhdGU6ICRJbnRlcnBvbGF0ZVByb3ZpZGVyLAorICAgICAg
ICAkaHR0cDogJEh0dHBQcm92aWRlciwKKyAgICAgICAgJGh0dHBCYWNrZW5kOiAkSHR0cEJhY2tl
bmRQcm92aWRlciwKKyAgICAgICAgJGxvY2F0aW9uOiAkTG9jYXRpb25Qcm92aWRlciwKKyAgICAg
ICAgJGxvZzogJExvZ1Byb3ZpZGVyLAorICAgICAgICAkcGFyc2U6ICRQYXJzZVByb3ZpZGVyLAor
ICAgICAgICAkcm91dGU6ICRSb3V0ZVByb3ZpZGVyLAorICAgICAgICAkcm91dGVQYXJhbXM6ICRS
b3V0ZVBhcmFtc1Byb3ZpZGVyLAorICAgICAgICAkcm9vdFNjb3BlOiAkUm9vdFNjb3BlUHJvdmlk
ZXIsCisgICAgICAgICRxOiAkUVByb3ZpZGVyLAorICAgICAgICAkc25pZmZlcjogJFNuaWZmZXJQ
cm92aWRlciwKKyAgICAgICAgJHRlbXBsYXRlQ2FjaGU6ICRUZW1wbGF0ZUNhY2hlUHJvdmlkZXIs
CisgICAgICAgICR0aW1lb3V0OiAkVGltZW91dFByb3ZpZGVyLAorICAgICAgICAkd2luZG93OiAk
V2luZG93UHJvdmlkZXIKKyAgICAgIH0pOworICAgIH0KKyAgXSk7Cit9CisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vSlFMaXRlCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFy
LmVsZW1lbnQKKyAqIEBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogV3JhcHMgYSBy
YXcgRE9NIGVsZW1lbnQgb3IgSFRNTCBzdHJpbmcgYXMgYSBbalF1ZXJ5XShodHRwOi8vanF1ZXJ5
LmNvbSkgZWxlbWVudC4KKyAqIGBhbmd1bGFyLmVsZW1lbnRgIGNhbiBiZSBlaXRoZXIgYW4gYWxp
YXMgZm9yIFtqUXVlcnldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkvKSBmdW5jdGlvbiwg
aWYKKyAqIGpRdWVyeSBpcyBhdmFpbGFibGUsIG9yIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUg
ZWxlbWVudCBvciBzdHJpbmcgaW4gQW5ndWxhcidzIGpRdWVyeSBsaXRlCisgKiBpbXBsZW1lbnRh
dGlvbiAoY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMganFMaXRlKS4KKyAqCisgKiBSZWFsIGpRdWVy
eSBhbHdheXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGpxTGl0ZSwgcHJvdmlkZWQgaXQgd2FzIGxv
YWRlZCBiZWZvcmUgYERPTUNvbnRlbnRMb2FkZWRgCisgKiBldmVudCBmaXJlZC4KKyAqCisgKiBq
cUxpdGUgaXMgYSB0aW55LCBBUEktY29tcGF0aWJsZSBzdWJzZXQgb2YgalF1ZXJ5IHRoYXQgYWxs
b3dzCisgKiBBbmd1bGFyIHRvIG1hbmlwdWxhdGUgdGhlIERPTS4ganFMaXRlIGltcGxlbWVudHMg
b25seSB0aGUgbW9zdCBjb21tb25seSBuZWVkZWQgZnVuY3Rpb25hbGl0eQorICogd2l0aGluIGEg
dmVyeSBzbWFsbCBmb290cHJpbnQsIHNvIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGpRdWVyeSBBUEkg
LSBtZXRob2RzLCBhcmd1bWVudHMgYW5kCisgKiBpbnZvY2F0aW9uIHN0eWxlcyAtIGFyZSBzdXBw
b3J0ZWQuCisgKgorICogTm90ZTogQWxsIGVsZW1lbnQgcmVmZXJlbmNlcyBpbiBBbmd1bGFyIGFy
ZSBhbHdheXMgd3JhcHBlZCB3aXRoIGpRdWVyeSBvciBqcUxpdGU7IHRoZXkgYXJlIG5ldmVyCisg
KiByYXcgRE9NIHJlZmVyZW5jZXMuCisgKgorICogIyMgQW5ndWxhcidzIGpRdWVyeSBsaXRlIHBy
b3ZpZGVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKyAqCisgKiAtIFthZGRDbGFzcygpXShodHRw
Oi8vYXBpLmpxdWVyeS5jb20vYWRkQ2xhc3MvKQorICogLSBbYWZ0ZXIoKV0oaHR0cDovL2FwaS5q
cXVlcnkuY29tL2FmdGVyLykKKyAqIC0gW2FwcGVuZCgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20v
YXBwZW5kLykKKyAqIC0gW2F0dHIoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2F0dHIvKQorICog
LSBbYmluZCgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vYmluZC8pIC0gRG9lcyBub3Qgc3VwcG9y
dCBuYW1lc3BhY2VzCisgKiAtIFtjaGlsZHJlbigpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vY2hp
bGRyZW4vKSAtIERvZXMgbm90IHN1cHBvcnQgc2VsZWN0b3JzCisgKiAtIFtjbG9uZSgpXShodHRw
Oi8vYXBpLmpxdWVyeS5jb20vY2xvbmUvKQorICogLSBbY29udGVudHMoKV0oaHR0cDovL2FwaS5q
cXVlcnkuY29tL2NvbnRlbnRzLykKKyAqIC0gW2NzcygpXShodHRwOi8vYXBpLmpxdWVyeS5jb20v
Y3NzLykKKyAqIC0gW2RhdGEoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2RhdGEvKQorICogLSBb
ZXEoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2VxLykKKyAqIC0gW2ZpbmQoKV0oaHR0cDovL2Fw
aS5qcXVlcnkuY29tL2ZpbmQvKSAtIExpbWl0ZWQgdG8gbG9va3VwcyBieSB0YWcgbmFtZQorICog
LSBbaGFzQ2xhc3MoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2hhc0NsYXNzLykKKyAqIC0gW2h0
bWwoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2h0bWwvKQorICogLSBbbmV4dCgpXShodHRwOi8v
YXBpLmpxdWVyeS5jb20vbmV4dC8pIC0gRG9lcyBub3Qgc3VwcG9ydCBzZWxlY3RvcnMKKyAqIC0g
W3BhcmVudCgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcGFyZW50LykgLSBEb2VzIG5vdCBzdXBw
b3J0IHNlbGVjdG9ycworICogLSBbcHJlcGVuZCgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcHJl
cGVuZC8pCisgKiAtIFtwcm9wKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9wcm9wLykKKyAqIC0g
W3JlYWR5KCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9yZWFkeS8pCisgKiAtIFtyZW1vdmUoKV0o
aHR0cDovL2FwaS5qcXVlcnkuY29tL3JlbW92ZS8pCisgKiAtIFtyZW1vdmVBdHRyKCldKGh0dHA6
Ly9hcGkuanF1ZXJ5LmNvbS9yZW1vdmVBdHRyLykKKyAqIC0gW3JlbW92ZUNsYXNzKCldKGh0dHA6
Ly9hcGkuanF1ZXJ5LmNvbS9yZW1vdmVDbGFzcy8pCisgKiAtIFtyZW1vdmVEYXRhKCldKGh0dHA6
Ly9hcGkuanF1ZXJ5LmNvbS9yZW1vdmVEYXRhLykKKyAqIC0gW3JlcGxhY2VXaXRoKCldKGh0dHA6
Ly9hcGkuanF1ZXJ5LmNvbS9yZXBsYWNlV2l0aC8pCisgKiAtIFt0ZXh0KCldKGh0dHA6Ly9hcGku
anF1ZXJ5LmNvbS90ZXh0LykKKyAqIC0gW3RvZ2dsZUNsYXNzKCldKGh0dHA6Ly9hcGkuanF1ZXJ5
LmNvbS90b2dnbGVDbGFzcy8pCisgKiAtIFt0cmlnZ2VySGFuZGxlcigpXShodHRwOi8vYXBpLmpx
dWVyeS5jb20vdHJpZ2dlckhhbmRsZXIvKSAtIERvZXNuJ3QgcGFzcyBuYXRpdmUgZXZlbnQgb2Jq
ZWN0cyB0byBoYW5kbGVycy4KKyAqIC0gW3VuYmluZCgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20v
dW5iaW5kLykgLSBEb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZXMKKyAqIC0gW3ZhbCgpXShodHRw
Oi8vYXBpLmpxdWVyeS5jb20vdmFsLykKKyAqIC0gW3dyYXAoKV0oaHR0cDovL2FwaS5qcXVlcnku
Y29tL3dyYXAvKQorICoKKyAqICMjIEluIGFkZHRpb24gdG8gdGhlIGFib3ZlLCBBbmd1bGFyIHBy
b3ZpZGVzIGFkZGl0aW9uYWwgbWV0aG9kcyB0byBib3RoIGpRdWVyeSBhbmQgalF1ZXJ5IGxpdGU6
CisgKgorICogLSBgY29udHJvbGxlcihuYW1lKWAgLSByZXRyaWV2ZXMgdGhlIGNvbnRyb2xsZXIg
b2YgdGhlIGN1cnJlbnQgZWxlbWVudCBvciBpdHMgcGFyZW50LiBCeSBkZWZhdWx0CisgKiAgIHJl
dHJpZXZlcyBjb250cm9sbGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgYG5nQ29udHJvbGxlcmAgZGly
ZWN0aXZlLiBJZiBgbmFtZWAgaXMgcHJvdmlkZWQgYXMKKyAqICAgY2FtZWxDYXNlIGRpcmVjdGl2
ZSBuYW1lLCB0aGVuIHRoZSBjb250cm9sbGVyIGZvciB0aGlzIGRpcmVjdGl2ZSB3aWxsIGJlIHJl
dHJpZXZlZCAoZS5nLgorICogICBgJ25nTW9kZWwnYCkuCisgKiAtIGBpbmplY3RvcigpYCAtIHJl
dHJpZXZlcyB0aGUgaW5qZWN0b3Igb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBvciBpdHMgcGFyZW50
LgorICogLSBgc2NvcGUoKWAgLSByZXRyaWV2ZXMgdGhlIHtAbGluayBhcGkvbmcuJHJvb3RTY29w
ZS5TY29wZSBzY29wZX0gb2YgdGhlIGN1cnJlbnQKKyAqICAgZWxlbWVudCBvciBpdHMgcGFyZW50
LgorICogLSBgaW5oZXJpdGVkRGF0YSgpYCAtIHNhbWUgYXMgYGRhdGEoKWAsIGJ1dCB3YWxrcyB1
cCB0aGUgRE9NIHVudGlsIGEgdmFsdWUgaXMgZm91bmQgb3IgdGhlIHRvcAorICogICBwYXJlbnQg
ZWxlbWVudCBpcyByZWFjaGVkLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfERPTUVsZW1lbnR9IGVs
ZW1lbnQgSFRNTCBzdHJpbmcgb3IgRE9NRWxlbWVudCB0byBiZSB3cmFwcGVkIGludG8galF1ZXJ5
LgorICogQHJldHVybnMge09iamVjdH0galF1ZXJ5IG9iamVjdC4KKyAqLworCit2YXIganFDYWNo
ZSA9IEpRTGl0ZS5jYWNoZSA9IHt9LAorICAgIGpxTmFtZSA9IEpRTGl0ZS5leHBhbmRvID0gJ25n
LScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKKyAgICBqcUlkID0gMSwKKyAgICBhZGRFdmVudExp
c3RlbmVyRm4gPSAod2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIKKyAgICAgID8gZnVu
Y3Rpb24oZWxlbWVudCwgdHlwZSwgZm4pIHtlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwg
Zm4sIGZhbHNlKTt9CisgICAgICA6IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIGZuKSB7ZWxlbWVu
dC5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO30pLAorICAgIHJlbW92ZUV2ZW50TGlzdGVu
ZXJGbiA9ICh3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcgorICAgICAgPyBmdW5j
dGlvbihlbGVtZW50LCB0eXBlLCBmbikge2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBl
LCBmbiwgZmFsc2UpOyB9CisgICAgICA6IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIGZuKSB7ZWxl
bWVudC5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pOyB9KTsKKworZnVuY3Rpb24ganFOZXh0
SWQoKSB7IHJldHVybiArK2pxSWQ7IH0KKworCit2YXIgU1BFQ0lBTF9DSEFSU19SRUdFWFAgPSAv
KFtcOlwtXF9dKyguKSkvZzsKK3ZhciBNT1pfSEFDS19SRUdFWFAgPSAvXm1veihbQS1aXSkvOwor
CisvKioKKyAqIENvbnZlcnRzIHNuYWtlX2Nhc2UgdG8gY2FtZWxDYXNlLgorICogQWxzbyB0aGVy
ZSBpcyBzcGVjaWFsIGNhc2UgZm9yIE1veiBwcmVmaXggc3RhcnRpbmcgd2l0aCB1cHBlciBjYXNl
IGxldHRlci4KKyAqIEBwYXJhbSBuYW1lIE5hbWUgdG8gbm9ybWFsaXplCisgKi8KK2Z1bmN0aW9u
IGNhbWVsQ2FzZShuYW1lKSB7CisgIHJldHVybiBuYW1lLgorICAgIHJlcGxhY2UoU1BFQ0lBTF9D
SEFSU19SRUdFWFAsIGZ1bmN0aW9uKF8sIHNlcGFyYXRvciwgbGV0dGVyLCBvZmZzZXQpIHsKKyAg
ICAgIHJldHVybiBvZmZzZXQgPyBsZXR0ZXIudG9VcHBlckNhc2UoKSA6IGxldHRlcjsKKyAgICB9
KS4KKyAgICByZXBsYWNlKE1PWl9IQUNLX1JFR0VYUCwgJ01veiQxJyk7Cit9CisKKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8galF1ZXJ5IG11dGF0aW9u
IHBhdGNoCisvLworLy8gIEluIGNvbmp1bmN0aW9uIHdpdGggYmluZEpRdWVyeSBpbnRlcmNlcHRz
IGFsbCBqUXVlcnkncyBET00gZGVzdHJ1Y3Rpb24gYXBpcyBhbmQgZmlyZXMgYQorLy8gJGRlc3Ry
b3kgZXZlbnQgb24gYWxsIERPTSBub2RlcyBiZWluZyByZW1vdmVkLgorLy8KKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitmdW5jdGlvbiBKUUxpdGVQYXRj
aEpRdWVyeVJlbW92ZShuYW1lLCBkaXNwYXRjaFRoaXMpIHsKKyAgdmFyIG9yaWdpbmFsSnFGbiA9
IGpRdWVyeS5mbltuYW1lXTsKKyAgb3JpZ2luYWxKcUZuID0gb3JpZ2luYWxKcUZuLiRvcmlnaW5h
bCB8fCBvcmlnaW5hbEpxRm47CisgIHJlbW92ZVBhdGNoLiRvcmlnaW5hbCA9IG9yaWdpbmFsSnFG
bjsKKyAgalF1ZXJ5LmZuW25hbWVdID0gcmVtb3ZlUGF0Y2g7CisKKyAgZnVuY3Rpb24gcmVtb3Zl
UGF0Y2goKSB7CisgICAgdmFyIGxpc3QgPSBbdGhpc10sCisgICAgICAgIGZpcmVFdmVudCA9IGRp
c3BhdGNoVGhpcywKKyAgICAgICAgc2V0LCBzZXRJbmRleCwgc2V0TGVuZ3RoLAorICAgICAgICBl
bGVtZW50LCBjaGlsZEluZGV4LCBjaGlsZExlbmd0aCwgY2hpbGRyZW4sCisgICAgICAgIGZucywg
ZXZlbnRzOworCisgICAgd2hpbGUobGlzdC5sZW5ndGgpIHsKKyAgICAgIHNldCA9IGxpc3Quc2hp
ZnQoKTsKKyAgICAgIGZvcihzZXRJbmRleCA9IDAsIHNldExlbmd0aCA9IHNldC5sZW5ndGg7IHNl
dEluZGV4IDwgc2V0TGVuZ3RoOyBzZXRJbmRleCsrKSB7CisgICAgICAgIGVsZW1lbnQgPSBqcUxp
dGUoc2V0W3NldEluZGV4XSk7CisgICAgICAgIGlmIChmaXJlRXZlbnQpIHsKKyAgICAgICAgICBl
bGVtZW50LnRyaWdnZXJIYW5kbGVyKCckZGVzdHJveScpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgIGZpcmVFdmVudCA9ICFmaXJlRXZlbnQ7CisgICAgICAgIH0KKyAgICAgICAgZm9yKGNo
aWxkSW5kZXggPSAwLCBjaGlsZExlbmd0aCA9IChjaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW4o
KSkubGVuZ3RoOworICAgICAgICAgICAgY2hpbGRJbmRleCA8IGNoaWxkTGVuZ3RoOworICAgICAg
ICAgICAgY2hpbGRJbmRleCsrKSB7CisgICAgICAgICAgbGlzdC5wdXNoKGpRdWVyeShjaGlsZHJl
bltjaGlsZEluZGV4XSkpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBv
cmlnaW5hbEpxRm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgfQorfQorCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIEpRTGl0ZShlbGVt
ZW50KSB7CisgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSlFMaXRlKSB7CisgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgIH0KKyAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEpRTGl0ZSkpIHsKKyAgICBpZiAo
aXNTdHJpbmcoZWxlbWVudCkgJiYgZWxlbWVudC5jaGFyQXQoMCkgIT0gJzwnKSB7CisgICAgICB0
aHJvdyBFcnJvcignc2VsZWN0b3JzIG5vdCBpbXBsZW1lbnRlZCcpOworICAgIH0KKyAgICByZXR1
cm4gbmV3IEpRTGl0ZShlbGVtZW50KTsKKyAgfQorCisgIGlmIChpc1N0cmluZyhlbGVtZW50KSkg
eworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAvLyBS
ZWFkIGFib3V0IHRoZSBOb1Njb3BlIGVsZW1lbnRzIGhlcmU6CisgICAgLy8gaHR0cDovL21zZG4u
bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTMzODk3KFZTLjg1KS5hc3B4CisgICAgZGl2
LmlubmVySFRNTCA9ICc8ZGl2PiYjMTYwOzwvZGl2PicgKyBlbGVtZW50OyAvLyBJRSBpbnNhbml0
eSB0byBtYWtlIE5vU2NvcGUgZWxlbWVudHMgd29yayEKKyAgICBkaXYucmVtb3ZlQ2hpbGQoZGl2
LmZpcnN0Q2hpbGQpOyAvLyByZW1vdmUgdGhlIHN1cGVyZmx1b3VzIGRpdgorICAgIEpRTGl0ZUFk
ZE5vZGVzKHRoaXMsIGRpdi5jaGlsZE5vZGVzKTsKKyAgICB0aGlzLnJlbW92ZSgpOyAvLyBkZXRh
Y2ggdGhlIGVsZW1lbnRzIGZyb20gdGhlIHRlbXBvcmFyeSBET00gZGl2LgorICB9IGVsc2Ugewor
ICAgIEpRTGl0ZUFkZE5vZGVzKHRoaXMsIGVsZW1lbnQpOworICB9Cit9CisKK2Z1bmN0aW9uIEpR
TGl0ZUNsb25lKGVsZW1lbnQpIHsKKyAgcmV0dXJuIGVsZW1lbnQuY2xvbmVOb2RlKHRydWUpOwor
fQorCitmdW5jdGlvbiBKUUxpdGVEZWFsb2MoZWxlbWVudCl7CisgIEpRTGl0ZVJlbW92ZURhdGEo
ZWxlbWVudCk7CisgIGZvciAoIHZhciBpID0gMCwgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkTm9k
ZXMgfHwgW107IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgIEpRTGl0ZURlYWxvYyhj
aGlsZHJlbltpXSk7CisgIH0KK30KKworZnVuY3Rpb24gSlFMaXRlVW5iaW5kKGVsZW1lbnQsIHR5
cGUsIGZuKSB7CisgIHZhciBldmVudHMgPSBKUUxpdGVFeHBhbmRvU3RvcmUoZWxlbWVudCwgJ2V2
ZW50cycpLAorICAgICAgaGFuZGxlID0gSlFMaXRlRXhwYW5kb1N0b3JlKGVsZW1lbnQsICdoYW5k
bGUnKTsKKworICBpZiAoIWhhbmRsZSkgcmV0dXJuOyAvL25vIGxpc3RlbmVycyByZWdpc3RlcmVk
CisKKyAgaWYgKGlzVW5kZWZpbmVkKHR5cGUpKSB7CisgICAgZm9yRWFjaChldmVudHMsIGZ1bmN0
aW9uKGV2ZW50SGFuZGxlciwgdHlwZSkgeworICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckZuKGVs
ZW1lbnQsIHR5cGUsIGV2ZW50SGFuZGxlcik7CisgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdOwor
ICAgIH0pOworICB9IGVsc2UgeworICAgIGlmIChpc1VuZGVmaW5lZChmbikpIHsKKyAgICAgIHJl
bW92ZUV2ZW50TGlzdGVuZXJGbihlbGVtZW50LCB0eXBlLCBldmVudHNbdHlwZV0pOworICAgICAg
ZGVsZXRlIGV2ZW50c1t0eXBlXTsKKyAgICB9IGVsc2UgeworICAgICAgYXJyYXlSZW1vdmUoZXZl
bnRzW3R5cGVdLCBmbik7CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIEpRTGl0ZVJlbW92ZURh
dGEoZWxlbWVudCkgeworICB2YXIgZXhwYW5kb0lkID0gZWxlbWVudFtqcU5hbWVdLAorICAgICAg
ZXhwYW5kb1N0b3JlID0ganFDYWNoZVtleHBhbmRvSWRdOworCisgIGlmIChleHBhbmRvU3RvcmUp
IHsKKyAgICBpZiAoZXhwYW5kb1N0b3JlLmhhbmRsZSkgeworICAgICAgZXhwYW5kb1N0b3JlLmV2
ZW50cy4kZGVzdHJveSAmJiBleHBhbmRvU3RvcmUuaGFuZGxlKHt9LCAnJGRlc3Ryb3knKTsKKyAg
ICAgIEpRTGl0ZVVuYmluZChlbGVtZW50KTsKKyAgICB9CisgICAgZGVsZXRlIGpxQ2FjaGVbZXhw
YW5kb0lkXTsKKyAgICBlbGVtZW50W2pxTmFtZV0gPSB1bmRlZmluZWQ7IC8vIGllIGRvZXMgbm90
IGFsbG93IGRlbGV0aW9uIG9mIGF0dHJpYnV0ZXMgb24gZWxlbWVudHMuCisgIH0KK30KKworZnVu
Y3Rpb24gSlFMaXRlRXhwYW5kb1N0b3JlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHsKKyAgdmFyIGV4
cGFuZG9JZCA9IGVsZW1lbnRbanFOYW1lXSwKKyAgICAgIGV4cGFuZG9TdG9yZSA9IGpxQ2FjaGVb
ZXhwYW5kb0lkIHx8IC0xXTsKKworICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkgeworICAgIGlmICgh
ZXhwYW5kb1N0b3JlKSB7CisgICAgICBlbGVtZW50W2pxTmFtZV0gPSBleHBhbmRvSWQgPSBqcU5l
eHRJZCgpOworICAgICAgZXhwYW5kb1N0b3JlID0ganFDYWNoZVtleHBhbmRvSWRdID0ge307Cisg
ICAgfQorICAgIGV4cGFuZG9TdG9yZVtrZXldID0gdmFsdWU7CisgIH0gZWxzZSB7CisgICAgcmV0
dXJuIGV4cGFuZG9TdG9yZSAmJiBleHBhbmRvU3RvcmVba2V5XTsKKyAgfQorfQorCitmdW5jdGlv
biBKUUxpdGVEYXRhKGVsZW1lbnQsIGtleSwgdmFsdWUpIHsKKyAgdmFyIGRhdGEgPSBKUUxpdGVF
eHBhbmRvU3RvcmUoZWxlbWVudCwgJ2RhdGEnKSwKKyAgICAgIGlzU2V0dGVyID0gaXNEZWZpbmVk
KHZhbHVlKSwKKyAgICAgIGtleURlZmluZWQgPSAhaXNTZXR0ZXIgJiYgaXNEZWZpbmVkKGtleSks
CisgICAgICBpc1NpbXBsZUdldHRlciA9IGtleURlZmluZWQgJiYgIWlzT2JqZWN0KGtleSk7CisK
KyAgaWYgKCFkYXRhICYmICFpc1NpbXBsZUdldHRlcikgeworICAgIEpRTGl0ZUV4cGFuZG9TdG9y
ZShlbGVtZW50LCAnZGF0YScsIGRhdGEgPSB7fSk7CisgIH0KKworICBpZiAoaXNTZXR0ZXIpIHsK
KyAgICBkYXRhW2tleV0gPSB2YWx1ZTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoa2V5RGVmaW5lZCkg
eworICAgICAgaWYgKGlzU2ltcGxlR2V0dGVyKSB7CisgICAgICAgIC8vIGRvbid0IGNyZWF0ZSBk
YXRhIGluIHRoaXMgY2FzZS4KKyAgICAgICAgcmV0dXJuIGRhdGEgJiYgZGF0YVtrZXldOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgZXh0ZW5kKGRhdGEsIGtleSk7CisgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgIHJldHVybiBkYXRhOworICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBKUUxp
dGVIYXNDbGFzcyhlbGVtZW50LCBzZWxlY3RvcikgeworICByZXR1cm4gKCgiICIgKyBlbGVtZW50
LmNsYXNzTmFtZSArICIgIikucmVwbGFjZSgvW1xuXHRdL2csICIgIikuCisgICAgICBpbmRleE9m
KCAiICIgKyBzZWxlY3RvciArICIgIiApID4gLTEpOworfQorCitmdW5jdGlvbiBKUUxpdGVSZW1v
dmVDbGFzcyhlbGVtZW50LCBjc3NDbGFzc2VzKSB7CisgIGlmIChjc3NDbGFzc2VzKSB7CisgICAg
Zm9yRWFjaChjc3NDbGFzc2VzLnNwbGl0KCcgJyksIGZ1bmN0aW9uKGNzc0NsYXNzKSB7CisgICAg
ICBlbGVtZW50LmNsYXNzTmFtZSA9IHRyaW0oCisgICAgICAgICAgKCIgIiArIGVsZW1lbnQuY2xh
c3NOYW1lICsgIiAiKQorICAgICAgICAgIC5yZXBsYWNlKC9bXG5cdF0vZywgIiAiKQorICAgICAg
ICAgIC5yZXBsYWNlKCIgIiArIHRyaW0oY3NzQ2xhc3MpICsgIiAiLCAiICIpCisgICAgICApOwor
ICAgIH0pOworICB9Cit9CisKK2Z1bmN0aW9uIEpRTGl0ZUFkZENsYXNzKGVsZW1lbnQsIGNzc0Ns
YXNzZXMpIHsKKyAgaWYgKGNzc0NsYXNzZXMpIHsKKyAgICBmb3JFYWNoKGNzc0NsYXNzZXMuc3Bs
aXQoJyAnKSwgZnVuY3Rpb24oY3NzQ2xhc3MpIHsKKyAgICAgIGlmICghSlFMaXRlSGFzQ2xhc3Mo
ZWxlbWVudCwgY3NzQ2xhc3MpKSB7CisgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gdHJpbShl
bGVtZW50LmNsYXNzTmFtZSArICcgJyArIHRyaW0oY3NzQ2xhc3MpKTsKKyAgICAgIH0KKyAgICB9
KTsKKyAgfQorfQorCitmdW5jdGlvbiBKUUxpdGVBZGROb2Rlcyhyb290LCBlbGVtZW50cykgewor
ICBpZiAoZWxlbWVudHMpIHsKKyAgICBlbGVtZW50cyA9ICghZWxlbWVudHMubm9kZU5hbWUgJiYg
aXNEZWZpbmVkKGVsZW1lbnRzLmxlbmd0aCkgJiYgIWlzV2luZG93KGVsZW1lbnRzKSkKKyAgICAg
ID8gZWxlbWVudHMKKyAgICAgIDogWyBlbGVtZW50cyBdOworICAgIGZvcih2YXIgaT0wOyBpIDwg
ZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHJvb3QucHVzaChlbGVtZW50c1tpXSk7Cisg
ICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIEpRTGl0ZUNvbnRyb2xsZXIoZWxlbWVudCwgbmFtZSkg
eworICByZXR1cm4gSlFMaXRlSW5oZXJpdGVkRGF0YShlbGVtZW50LCAnJCcgKyAobmFtZSB8fCAn
bmdDb250cm9sbGVyJyApICsgJ0NvbnRyb2xsZXInKTsKK30KKworZnVuY3Rpb24gSlFMaXRlSW5o
ZXJpdGVkRGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSkgeworICBlbGVtZW50ID0ganFMaXRlKGVs
ZW1lbnQpOworCisgIC8vIGlmIGVsZW1lbnQgaXMgdGhlIGRvY3VtZW50IG9iamVjdCB3b3JrIHdp
dGggdGhlIGh0bWwgZWxlbWVudCBpbnN0ZWFkCisgIC8vIHRoaXMgbWFrZXMgJChkb2N1bWVudCku
c2NvcGUoKSBwb3NzaWJsZQorICBpZihlbGVtZW50WzBdLm5vZGVUeXBlID09IDkpIHsKKyAgICBl
bGVtZW50ID0gZWxlbWVudC5maW5kKCdodG1sJyk7CisgIH0KKworICB3aGlsZSAoZWxlbWVudC5s
ZW5ndGgpIHsKKyAgICBpZiAodmFsdWUgPSBlbGVtZW50LmRhdGEobmFtZSkpIHJldHVybiB2YWx1
ZTsKKyAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQoKTsKKyAgfQorfQorCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEZ1bmN0aW9ucyB3aGljaCBhcmUg
ZGVjbGFyZWQgZGlyZWN0bHkuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KK3ZhciBKUUxpdGVQcm90b3R5cGUgPSBKUUxpdGUucHJvdG90eXBlID0geworICByZWFk
eTogZnVuY3Rpb24oZm4pIHsKKyAgICB2YXIgZmlyZWQgPSBmYWxzZTsKKworICAgIGZ1bmN0aW9u
IHRyaWdnZXIoKSB7CisgICAgICBpZiAoZmlyZWQpIHJldHVybjsKKyAgICAgIGZpcmVkID0gdHJ1
ZTsKKyAgICAgIGZuKCk7CisgICAgfQorCisgICAgdGhpcy5iaW5kKCdET01Db250ZW50TG9hZGVk
JywgdHJpZ2dlcik7IC8vIHdvcmtzIGZvciBtb2Rlcm4gYnJvd3NlcnMgYW5kIElFOQorICAgIC8v
IHdlIGNhbiBub3QgdXNlIGpxTGl0ZSBzaW5jZSB3ZSBhcmUgbm90IGRvbmUgbG9hZGluZyBhbmQg
alF1ZXJ5IGNvdWxkIGJlIGxvYWRlZCBsYXRlci4KKyAgICBKUUxpdGUod2luZG93KS5iaW5kKCds
b2FkJywgdHJpZ2dlcik7IC8vIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQgZm9yIG90aGVycwor
ICB9LAorICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CisgICAgdmFyIHZhbHVlID0gW107CisgICAg
Zm9yRWFjaCh0aGlzLCBmdW5jdGlvbihlKXsgdmFsdWUucHVzaCgnJyArIGUpO30pOworICAgIHJl
dHVybiAnWycgKyB2YWx1ZS5qb2luKCcsICcpICsgJ10nOworICB9LAorCisgIGVxOiBmdW5jdGlv
bihpbmRleCkgeworICAgICAgcmV0dXJuIChpbmRleCA+PSAwKSA/IGpxTGl0ZSh0aGlzW2luZGV4
XSkgOiBqcUxpdGUodGhpc1t0aGlzLmxlbmd0aCArIGluZGV4XSk7CisgIH0sCisKKyAgbGVuZ3Ro
OiAwLAorICBwdXNoOiBwdXNoLAorICBzb3J0OiBbXS5zb3J0LAorICBzcGxpY2U6IFtdLnNwbGlj
ZQorfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBG
dW5jdGlvbnMgaXRlcmF0aW5nIGdldHRlci9zZXR0ZXJzLgorLy8gdGhlc2UgZnVuY3Rpb25zIHJl
dHVybiBzZWxmIG9uIHNldHRlciBhbmQKKy8vIHZhbHVlIG9uIGdldC4KKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordmFyIEJPT0xFQU5fQVRUUiA9IHt9OworZm9y
RWFjaCgnbXVsdGlwbGUsc2VsZWN0ZWQsY2hlY2tlZCxkaXNhYmxlZCxyZWFkT25seSxyZXF1aXJl
ZCcuc3BsaXQoJywnKSwgZnVuY3Rpb24odmFsdWUpIHsKKyAgQk9PTEVBTl9BVFRSW2xvd2VyY2Fz
ZSh2YWx1ZSldID0gdmFsdWU7Cit9KTsKK3ZhciBCT09MRUFOX0VMRU1FTlRTID0ge307Citmb3JF
YWNoKCdpbnB1dCxzZWxlY3Qsb3B0aW9uLHRleHRhcmVhLGJ1dHRvbixmb3JtJy5zcGxpdCgnLCcp
LCBmdW5jdGlvbih2YWx1ZSkgeworICBCT09MRUFOX0VMRU1FTlRTW3VwcGVyY2FzZSh2YWx1ZSld
ID0gdHJ1ZTsKK30pOworCitmdW5jdGlvbiBnZXRCb29sZWFuQXR0ck5hbWUoZWxlbWVudCwgbmFt
ZSkgeworICAvLyBjaGVjayBkb20gbGFzdCBzaW5jZSB3ZSB3aWxsIG1vc3QgbGlrZWx5IGZhaWwg
b24gbmFtZQorICB2YXIgYm9vbGVhbkF0dHIgPSBCT09MRUFOX0FUVFJbbmFtZS50b0xvd2VyQ2Fz
ZSgpXTsKKworICAvLyBib29sZWFuQXR0ciBpcyBoZXJlIHR3aWNlIHRvIG1pbmltaXplIERPTSBh
Y2Nlc3MKKyAgcmV0dXJuIGJvb2xlYW5BdHRyICYmIEJPT0xFQU5fRUxFTUVOVFNbZWxlbWVudC5u
b2RlTmFtZV0gJiYgYm9vbGVhbkF0dHI7Cit9CisKK2ZvckVhY2goeworICBkYXRhOiBKUUxpdGVE
YXRhLAorICBpbmhlcml0ZWREYXRhOiBKUUxpdGVJbmhlcml0ZWREYXRhLAorCisgIHNjb3BlOiBm
dW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuIEpRTGl0ZUluaGVyaXRlZERhdGEoZWxlbWVu
dCwgJyRzY29wZScpOworICB9LAorCisgIGNvbnRyb2xsZXI6IEpRTGl0ZUNvbnRyb2xsZXIgLAor
CisgIGluamVjdG9yOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuIEpRTGl0ZUluaGVy
aXRlZERhdGEoZWxlbWVudCwgJyRpbmplY3RvcicpOworICB9LAorCisgIHJlbW92ZUF0dHI6IGZ1
bmN0aW9uKGVsZW1lbnQsbmFtZSkgeworICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUp
OworICB9LAorCisgIGhhc0NsYXNzOiBKUUxpdGVIYXNDbGFzcywKKworICBjc3M6IGZ1bmN0aW9u
KGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7CisgICAgbmFtZSA9IGNhbWVsQ2FzZShuYW1lKTsKKwor
ICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7CisgICAgICBlbGVtZW50LnN0eWxlW25hbWVdID0g
dmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciB2YWw7CisKKyAgICAgIGlmIChtc2llIDw9
IDgpIHsKKyAgICAgICAgLy8gdGhpcyBpcyBzb21lIElFIHNwZWNpZmljIHdlaXJkbmVzcyB0aGF0
IGpRdWVyeSAxLjYuNCBkb2VzIG5vdCBzdXJlIHdoeQorICAgICAgICB2YWwgPSBlbGVtZW50LmN1
cnJlbnRTdHlsZSAmJiBlbGVtZW50LmN1cnJlbnRTdHlsZVtuYW1lXTsKKyAgICAgICAgaWYgKHZh
bCA9PT0gJycpIHZhbCA9ICdhdXRvJzsKKyAgICAgIH0KKworICAgICAgdmFsID0gdmFsIHx8IGVs
ZW1lbnQuc3R5bGVbbmFtZV07CisKKyAgICAgIGlmIChtc2llIDw9IDgpIHsKKyAgICAgICAgLy8g
anF1ZXJ5IHdlaXJkbmVzcyA6LS8KKyAgICAgICAgdmFsID0gKHZhbCA9PT0gJycpID8gdW5kZWZp
bmVkIDogdmFsOworICAgICAgfQorCisgICAgICByZXR1cm4gIHZhbDsKKyAgICB9CisgIH0sCisK
KyAgYXR0cjogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSwgdmFsdWUpeworICAgIHZhciBsb3dlcmNh
c2VkTmFtZSA9IGxvd2VyY2FzZShuYW1lKTsKKyAgICBpZiAoQk9PTEVBTl9BVFRSW2xvd2VyY2Fz
ZWROYW1lXSkgeworICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHsKKyAgICAgICAgaWYgKCEh
dmFsdWUpIHsKKyAgICAgICAgICBlbGVtZW50W25hbWVdID0gdHJ1ZTsKKyAgICAgICAgICBlbGVt
ZW50LnNldEF0dHJpYnV0ZShuYW1lLCBsb3dlcmNhc2VkTmFtZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgZWxlbWVudFtuYW1lXSA9IGZhbHNlOworICAgICAgICAgIGVsZW1lbnQucmVt
b3ZlQXR0cmlidXRlKGxvd2VyY2FzZWROYW1lKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsK
KyAgICAgICAgcmV0dXJuIChlbGVtZW50W25hbWVdIHx8CisgICAgICAgICAgICAgICAgIChlbGVt
ZW50LmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKG5hbWUpfHwgbm9vcCkuc3BlY2lmaWVkKQorICAg
ICAgICAgICAgICAgPyBsb3dlcmNhc2VkTmFtZQorICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7
CisgICAgICB9CisgICAgfSBlbHNlIGlmIChpc0RlZmluZWQodmFsdWUpKSB7CisgICAgICBlbGVt
ZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CisgICAgfSBlbHNlIGlmIChlbGVtZW50Lmdl
dEF0dHJpYnV0ZSkgeworICAgICAgLy8gdGhlIGV4dHJhIGFyZ3VtZW50ICIyIiBpcyB0byBnZXQg
dGhlIHJpZ2h0IHRoaW5nIGZvciBhLmhyZWYgaW4gSUUsIHNlZSBqUXVlcnkgY29kZQorICAgICAg
Ly8gc29tZSBlbGVtZW50cyAoZS5nLiBEb2N1bWVudCkgZG9uJ3QgaGF2ZSBnZXQgYXR0cmlidXRl
LCBzbyByZXR1cm4gdW5kZWZpbmVkCisgICAgICB2YXIgcmV0ID0gZWxlbWVudC5nZXRBdHRyaWJ1
dGUobmFtZSwgMik7CisgICAgICAvLyBub3JtYWxpemUgbm9uLWV4aXN0aW5nIGF0dHJpYnV0ZXMg
dG8gdW5kZWZpbmVkIChhcyBqUXVlcnkpCisgICAgICByZXR1cm4gcmV0ID09PSBudWxsID8gdW5k
ZWZpbmVkIDogcmV0OworICAgIH0KKyAgfSwKKworICBwcm9wOiBmdW5jdGlvbihlbGVtZW50LCBu
YW1lLCB2YWx1ZSkgeworICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7CisgICAgICBlbGVtZW50
W25hbWVdID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBlbGVtZW50W25hbWVd
OworICAgIH0KKyAgfSwKKworICB0ZXh0OiBleHRlbmQoKG1zaWUgPCA5KQorICAgICAgPyBmdW5j
dGlvbihlbGVtZW50LCB2YWx1ZSkgeworICAgICAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9PSAx
IC8qKiBFbGVtZW50ICovKSB7CisgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50LmlubmVyVGV4dDsKKyAgICAgICAgICBlbGVtZW50Lmlu
bmVyVGV4dCA9IHZhbHVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChpc1VuZGVm
aW5lZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5ub2RlVmFsdWU7CisgICAg
ICAgICAgZWxlbWVudC5ub2RlVmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAg
ICAgOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgeworICAgICAgICBpZiAoaXNVbmRlZmluZWQo
dmFsdWUpKSB7CisgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQ7CisgICAgICAg
IH0KKyAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHZhbHVlOworICAgICAgfSwgeyRkdjon
J30pLAorCisgIHZhbDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKKyAgICBpZiAoaXNVbmRl
ZmluZWQodmFsdWUpKSB7CisgICAgICByZXR1cm4gZWxlbWVudC52YWx1ZTsKKyAgICB9CisgICAg
ZWxlbWVudC52YWx1ZSA9IHZhbHVlOworICB9LAorCisgIGh0bWw6IGZ1bmN0aW9uKGVsZW1lbnQs
IHZhbHVlKSB7CisgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkgeworICAgICAgcmV0dXJuIGVs
ZW1lbnQuaW5uZXJIVE1MOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMCwgY2hpbGROb2RlcyA9
IGVsZW1lbnQuY2hpbGROb2RlczsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICAg
IEpRTGl0ZURlYWxvYyhjaGlsZE5vZGVzW2ldKTsKKyAgICB9CisgICAgZWxlbWVudC5pbm5lckhU
TUwgPSB2YWx1ZTsKKyAgfQorfSwgZnVuY3Rpb24oZm4sIG5hbWUpeworICAvKioKKyAgICogUHJv
cGVydGllczogd3JpdGVzIHJldHVybiBzZWxlY3Rpb24sIHJlYWRzIHJldHVybiBmaXJzdCB2YWx1
ZQorICAgKi8KKyAgSlFMaXRlLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKGFyZzEsIGFyZzIp
IHsKKyAgICB2YXIgaSwga2V5OworCisgICAgLy8gSlFMaXRlSGFzQ2xhc3MgaGFzIG9ubHkgdHdv
IGFyZ3VtZW50cywgYnV0IGlzIGEgZ2V0dGVyLW9ubHkgZm4sIHNvIHdlIG5lZWQgdG8gc3BlY2lh
bC1jYXNlIGl0CisgICAgLy8gaW4gYSB3YXkgdGhhdCBzdXJ2aXZlcyBtaW5pZmljYXRpb24uCisg
ICAgaWYgKCgoZm4ubGVuZ3RoID09IDIgJiYgKGZuICE9PSBKUUxpdGVIYXNDbGFzcyAmJiBmbiAh
PT0gSlFMaXRlQ29udHJvbGxlcikpID8gYXJnMSA6IGFyZzIpID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgIGlmIChpc09iamVjdChhcmcxKSkgeworCisgICAgICAgIC8vIHdlIGFyZSBhIHdyaXRlLCBi
dXQgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSB0aGUga2V5L3ZhbHVlcworICAgICAgICBmb3Io
aT0wOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIGlmIChmbiA9PT0gSlFMaXRl
RGF0YSkgeworICAgICAgICAgICAgLy8gZGF0YSgpIHRha2VzIHRoZSB3aG9sZSBvYmplY3QgaW4g
alF1ZXJ5CisgICAgICAgICAgICBmbih0aGlzW2ldLCBhcmcxKTsKKyAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgZm9yIChrZXkgaW4gYXJnMSkgeworICAgICAgICAgICAgICBmbih0aGlz
W2ldLCBrZXksIGFyZzFba2V5XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIC8vIHJldHVybiBzZWxmIGZvciBjaGFpbmluZworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHdlIGFyZSBhIHJlYWQsIHNvIHJlYWQg
dGhlIGZpcnN0IGNoaWxkLgorICAgICAgICBpZiAodGhpcy5sZW5ndGgpCisgICAgICAgICAgcmV0
dXJuIGZuKHRoaXNbMF0sIGFyZzEsIGFyZzIpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAvLyB3ZSBhcmUgYSB3cml0ZSwgc28gYXBwbHkgdG8gYWxsIGNoaWxkcmVuCisgICAgICBmb3Io
aT0wOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgeworICAgICAgICBmbih0aGlzW2ldLCBhcmcxLCBh
cmcyKTsKKyAgICAgIH0KKyAgICAgIC8vIHJldHVybiBzZWxmIGZvciBjaGFpbmluZworICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfQorICAgIHJldHVybiBmbi4kZHY7CisgIH07Cit9KTsKKworZnVu
Y3Rpb24gY3JlYXRlRXZlbnRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cykgeworICB2YXIgZXZlbnRI
YW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50LCB0eXBlKSB7CisgICAgaWYgKCFldmVudC5wcmV2ZW50
RGVmYXVsdCkgeworICAgICAgZXZlbnQucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTsgLy9pZQorICAgICAgfTsKKyAgICB9CisK
KyAgICBpZiAoIWV2ZW50LnN0b3BQcm9wYWdhdGlvbikgeworICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7
IC8vaWUKKyAgICAgIH07CisgICAgfQorCisgICAgaWYgKCFldmVudC50YXJnZXQpIHsKKyAgICAg
IGV2ZW50LnRhcmdldCA9IGV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7CisgICAgfQorCisg
ICAgaWYgKGlzVW5kZWZpbmVkKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpKSB7CisgICAgICB2YXIg
cHJldmVudCA9IGV2ZW50LnByZXZlbnREZWZhdWx0OworICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7
CisgICAgICAgIHByZXZlbnQuY2FsbChldmVudCk7CisgICAgICB9OworICAgICAgZXZlbnQuZGVm
YXVsdFByZXZlbnRlZCA9IGZhbHNlOworICAgIH0KKworICAgIGV2ZW50LmlzRGVmYXVsdFByZXZl
bnRlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7
CisgICAgfTsKKworICAgIGZvckVhY2goZXZlbnRzW3R5cGUgfHwgZXZlbnQudHlwZV0sIGZ1bmN0
aW9uKGZuKSB7CisgICAgICBmbi5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKKyAgICB9KTsKKworICAg
IC8vIFJlbW92ZSBtb25rZXktcGF0Y2hlZCBtZXRob2RzIChJRSksCisgICAgLy8gYXMgdGhleSB3
b3VsZCBjYXVzZSBtZW1vcnkgbGVha3MgaW4gSUU4LgorICAgIGlmIChtc2llIDw9IDgpIHsKKyAg
ICAgIC8vIElFNy84IGRvZXMgbm90IGFsbG93IHRvIGRlbGV0ZSBwcm9wZXJ0eSBvbiBuYXRpdmUg
b2JqZWN0CisgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCA9IG51bGw7CisgICAgICBldmVudC5z
dG9wUHJvcGFnYXRpb24gPSBudWxsOworICAgICAgZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkID0g
bnVsbDsKKyAgICB9IGVsc2UgeworICAgICAgLy8gSXQgc2hvdWxkbid0IGFmZmVjdCBub3JtYWwg
YnJvd3NlcnMgKG5hdGl2ZSBtZXRob2RzIGFyZSBkZWZpbmVkIG9uIHByb3RvdHlwZSkuCisgICAg
ICBkZWxldGUgZXZlbnQucHJldmVudERlZmF1bHQ7CisgICAgICBkZWxldGUgZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uOworICAgICAgZGVsZXRlIGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZDsKKyAgICB9
CisgIH07CisgIGV2ZW50SGFuZGxlci5lbGVtID0gZWxlbWVudDsKKyAgcmV0dXJuIGV2ZW50SGFu
ZGxlcjsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv
LyBGdW5jdGlvbnMgaXRlcmF0aW5nIHRyYXZlcnNhbC4KKy8vIFRoZXNlIGZ1bmN0aW9ucyBjaGFp
biByZXN1bHRzIGludG8gYSBzaW5nbGUKKy8vIHNlbGVjdG9yLgorLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitmb3JFYWNoKHsKKyAgcmVtb3ZlRGF0YTogSlFMaXRl
UmVtb3ZlRGF0YSwKKworICBkZWFsb2M6IEpRTGl0ZURlYWxvYywKKworICBiaW5kOiBmdW5jdGlv
biBiaW5kRm4oZWxlbWVudCwgdHlwZSwgZm4peworICAgIHZhciBldmVudHMgPSBKUUxpdGVFeHBh
bmRvU3RvcmUoZWxlbWVudCwgJ2V2ZW50cycpLAorICAgICAgICBoYW5kbGUgPSBKUUxpdGVFeHBh
bmRvU3RvcmUoZWxlbWVudCwgJ2hhbmRsZScpOworCisgICAgaWYgKCFldmVudHMpIEpRTGl0ZUV4
cGFuZG9TdG9yZShlbGVtZW50LCAnZXZlbnRzJywgZXZlbnRzID0ge30pOworICAgIGlmICghaGFu
ZGxlKSBKUUxpdGVFeHBhbmRvU3RvcmUoZWxlbWVudCwgJ2hhbmRsZScsIGhhbmRsZSA9IGNyZWF0
ZUV2ZW50SGFuZGxlcihlbGVtZW50LCBldmVudHMpKTsKKworICAgIGZvckVhY2godHlwZS5zcGxp
dCgnICcpLCBmdW5jdGlvbih0eXBlKXsKKyAgICAgIHZhciBldmVudEZucyA9IGV2ZW50c1t0eXBl
XTsKKworICAgICAgaWYgKCFldmVudEZucykgeworICAgICAgICBpZiAodHlwZSA9PSAnbW91c2Vl
bnRlcicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpIHsKKyAgICAgICAgICB2YXIgY29udGFpbnMg
PSBkb2N1bWVudC5ib2R5LmNvbnRhaW5zIHx8IGRvY3VtZW50LmJvZHkuY29tcGFyZURvY3VtZW50
UG9zaXRpb24gPworICAgICAgICAgIGZ1bmN0aW9uKCBhLCBiICkgeworICAgICAgICAgICAgdmFy
IGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSwKKyAgICAg
ICAgICAgIGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlOworICAgICAgICAgICAgcmV0dXJuIGEgPT09
IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoCisgICAgICAgICAgICAg
IGFkb3duLmNvbnRhaW5zID8KKyAgICAgICAgICAgICAgYWRvd24uY29udGFpbnMoIGJ1cCApIDoK
KyAgICAgICAgICAgICAgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2CisgICAgICAgICAgICAgICkpOworICAgICAgICAgICAg
fSA6CisgICAgICAgICAgICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgICAgICAgaWYgKCBi
ICkgeworICAgICAgICAgICAgICAgIHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkgeworICAg
ICAgICAgICAgICAgICAgaWYgKCBiID09PSBhICkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IFtdOworCisgICAgICAgICAgLy8gUmVmZXIgdG8galF1
ZXJ5J3MgaW1wbGVtZW50YXRpb24gb2YgbW91c2VlbnRlciAmIG1vdXNlbGVhdmUKKyAgICAgICAg
ICAvLyBSZWFkIGFib3V0IG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmU6CisgICAgICAgICAgLy8g
aHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfbW91c2UuaHRtbCNsaW5rOAorICAg
ICAgICAgIHZhciBldmVudG1hcCA9IHsgbW91c2VsZWF2ZSA6ICJtb3VzZW91dCIsIG1vdXNlZW50
ZXIgOiAibW91c2VvdmVyIn0gICAgICAgICAgCisgICAgICAgICAgYmluZEZuKGVsZW1lbnQsIGV2
ZW50bWFwW3R5cGVdLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIHJldCwgdGFy
Z2V0ID0gdGhpcywgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7CisgICAgICAgICAgICAv
LyBGb3IgbW91c2VudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRz
aWRlIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0
aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdworICAgICAgICAgICAgaWYg
KCAhcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFjb250YWlucyh0YXJnZXQsIHJl
bGF0ZWQpKSApeworICAgICAgICAgICAgICBoYW5kbGUoZXZlbnQsIHR5cGUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgfSk7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBhZGRF
dmVudExpc3RlbmVyRm4oZWxlbWVudCwgdHlwZSwgaGFuZGxlKTsKKyAgICAgICAgICBldmVudHNb
dHlwZV0gPSBbXTsKKyAgICAgICAgfQorICAgICAgICBldmVudEZucyA9IGV2ZW50c1t0eXBlXQor
ICAgICAgfQorICAgICAgZXZlbnRGbnMucHVzaChmbik7CisgICAgfSk7CisgIH0sCisKKyAgdW5i
aW5kOiBKUUxpdGVVbmJpbmQsCisKKyAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKGVsZW1lbnQsIHJl
cGxhY2VOb2RlKSB7CisgICAgdmFyIGluZGV4LCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7
CisgICAgSlFMaXRlRGVhbG9jKGVsZW1lbnQpOworICAgIGZvckVhY2gobmV3IEpRTGl0ZShyZXBs
YWNlTm9kZSksIGZ1bmN0aW9uKG5vZGUpeworICAgICAgaWYgKGluZGV4KSB7CisgICAgICAgIHBh
cmVudC5pbnNlcnRCZWZvcmUobm9kZSwgaW5kZXgubmV4dFNpYmxpbmcpOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChub2RlLCBlbGVtZW50KTsKKyAgICAgIH0K
KyAgICAgIGluZGV4ID0gbm9kZTsKKyAgICB9KTsKKyAgfSwKKworICBjaGlsZHJlbjogZnVuY3Rp
b24oZWxlbWVudCkgeworICAgIHZhciBjaGlsZHJlbiA9IFtdOworICAgIGZvckVhY2goZWxlbWVu
dC5jaGlsZE5vZGVzLCBmdW5jdGlvbihlbGVtZW50KXsKKyAgICAgIGlmIChlbGVtZW50Lm5vZGVU
eXBlID09PSAxKQorICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZW1lbnQpOworICAgIH0pOworICAg
IHJldHVybiBjaGlsZHJlbjsKKyAgfSwKKworICBjb250ZW50czogZnVuY3Rpb24oZWxlbWVudCkg
eworICAgIHJldHVybiBlbGVtZW50LmNoaWxkTm9kZXMgfHwgW107CisgIH0sCisKKyAgYXBwZW5k
OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7CisgICAgZm9yRWFjaChuZXcgSlFMaXRlKG5vZGUp
LCBmdW5jdGlvbihjaGlsZCl7CisgICAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9PT0gMSkKKyAg
ICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7CisgICAgfSk7CisgIH0sCisKKyAgcHJl
cGVuZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkgeworICAgIGlmIChlbGVtZW50Lm5vZGVUeXBl
ID09PSAxKSB7CisgICAgICB2YXIgaW5kZXggPSBlbGVtZW50LmZpcnN0Q2hpbGQ7CisgICAgICBm
b3JFYWNoKG5ldyBKUUxpdGUobm9kZSksIGZ1bmN0aW9uKGNoaWxkKXsKKyAgICAgICAgaWYgKGlu
ZGV4KSB7CisgICAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIGluZGV4KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKKyAg
ICAgICAgICBpbmRleCA9IGNoaWxkOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH0s
CisKKyAgd3JhcDogZnVuY3Rpb24oZWxlbWVudCwgd3JhcE5vZGUpIHsKKyAgICB3cmFwTm9kZSA9
IGpxTGl0ZSh3cmFwTm9kZSlbMF07CisgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9k
ZTsKKyAgICBpZiAocGFyZW50KSB7CisgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKHdyYXBOb2Rl
LCBlbGVtZW50KTsKKyAgICB9CisgICAgd3JhcE5vZGUuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Cisg
IH0sCisKKyAgcmVtb3ZlOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgSlFMaXRlRGVhbG9jKGVs
ZW1lbnQpOworICAgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CisgICAgaWYgKHBh
cmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpOworICB9LAorCisgIGFmdGVyOiBmdW5j
dGlvbihlbGVtZW50LCBuZXdFbGVtZW50KSB7CisgICAgdmFyIGluZGV4ID0gZWxlbWVudCwgcGFy
ZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOworICAgIGZvckVhY2gobmV3IEpRTGl0ZShuZXdFbGVt
ZW50KSwgZnVuY3Rpb24obm9kZSl7CisgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGlu
ZGV4Lm5leHRTaWJsaW5nKTsKKyAgICAgIGluZGV4ID0gbm9kZTsKKyAgICB9KTsKKyAgfSwKKwor
ICBhZGRDbGFzczogSlFMaXRlQWRkQ2xhc3MsCisgIHJlbW92ZUNsYXNzOiBKUUxpdGVSZW1vdmVD
bGFzcywKKworICB0b2dnbGVDbGFzczogZnVuY3Rpb24oZWxlbWVudCwgc2VsZWN0b3IsIGNvbmRp
dGlvbikgeworICAgIGlmIChpc1VuZGVmaW5lZChjb25kaXRpb24pKSB7CisgICAgICBjb25kaXRp
b24gPSAhSlFMaXRlSGFzQ2xhc3MoZWxlbWVudCwgc2VsZWN0b3IpOworICAgIH0KKyAgICAoY29u
ZGl0aW9uID8gSlFMaXRlQWRkQ2xhc3MgOiBKUUxpdGVSZW1vdmVDbGFzcykoZWxlbWVudCwgc2Vs
ZWN0b3IpOworICB9LAorCisgIHBhcmVudDogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHZhciBw
YXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CisgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQu
bm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKKyAgfSwKKworICBuZXh0OiBmdW5jdGlv
bihlbGVtZW50KSB7CisgICAgaWYgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSB7CisgICAg
ICByZXR1cm4gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7CisgICAgfQorCisgICAgLy8gSUU4
IGRvZXNuJ3QgaGF2ZSBuZXh0RWxlbWVudFNpYmxpbmcKKyAgICB2YXIgZWxtID0gZWxlbWVudC5u
ZXh0U2libGluZzsKKyAgICB3aGlsZSAoZWxtICE9IG51bGwgJiYgZWxtLm5vZGVUeXBlICE9PSAx
KSB7CisgICAgICBlbG0gPSBlbG0ubmV4dFNpYmxpbmc7CisgICAgfQorICAgIHJldHVybiBlbG07
CisgIH0sCisKKyAgZmluZDogZnVuY3Rpb24oZWxlbWVudCwgc2VsZWN0b3IpIHsKKyAgICByZXR1
cm4gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShzZWxlY3Rvcik7CisgIH0sCisKKyAgY2xv
bmU6IEpRTGl0ZUNsb25lLAorCisgIHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbihlbGVtZW50LCBl
dmVudE5hbWUpIHsKKyAgICB2YXIgZXZlbnRGbnMgPSAoSlFMaXRlRXhwYW5kb1N0b3JlKGVsZW1l
bnQsICdldmVudHMnKSB8fCB7fSlbZXZlbnROYW1lXTsKKworICAgIGZvckVhY2goZXZlbnRGbnMs
IGZ1bmN0aW9uKGZuKSB7CisgICAgICBmbi5jYWxsKGVsZW1lbnQsIG51bGwpOworICAgIH0pOwor
ICB9Cit9LCBmdW5jdGlvbihmbiwgbmFtZSl7CisgIC8qKgorICAgKiBjaGFpbmluZyBmdW5jdGlv
bnMKKyAgICovCisgIEpRTGl0ZS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbihhcmcxLCBhcmcy
KSB7CisgICAgdmFyIHZhbHVlOworICAgIGZvcih2YXIgaT0wOyBpIDwgdGhpcy5sZW5ndGg7IGkr
KykgeworICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgeworICAgICAgICB2YWx1ZSA9IGZu
KHRoaXNbaV0sIGFyZzEsIGFyZzIpOworICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkg
eworICAgICAgICAgIC8vIGFueSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGEgdmFsdWUgbmVlZHMg
dG8gYmUgd3JhcHBlZAorICAgICAgICAgIHZhbHVlID0ganFMaXRlKHZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgSlFMaXRlQWRkTm9kZXModmFsdWUsIGZuKHRoaXNb
aV0sIGFyZzEsIGFyZzIpKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHZhbHVlID09IHVu
ZGVmaW5lZCA/IHRoaXMgOiB2YWx1ZTsKKyAgfTsKK30pOworCisvKioKKyAqIENvbXB1dGVzIGEg
aGFzaCBvZiBhbiAnb2JqJy4KKyAqIEhhc2ggb2YgYToKKyAqICBzdHJpbmcgaXMgc3RyaW5nCisg
KiAgbnVtYmVyIGlzIG51bWJlciBhcyBzdHJpbmcKKyAqICBvYmplY3QgaXMgZWl0aGVyIHJlc3Vs
dCBvZiBjYWxsaW5nICQkaGFzaEtleSBmdW5jdGlvbiBvbiB0aGUgb2JqZWN0IG9yIHVuaXF1ZWx5
IGdlbmVyYXRlZCBpZCwKKyAqICAgICAgICAgdGhhdCBpcyBhbHNvIGFzc2lnbmVkIHRvIHRoZSAk
JGhhc2hLZXkgcHJvcGVydHkgb2YgdGhlIG9iamVjdC4KKyAqCisgKiBAcGFyYW0gb2JqCisgKiBA
cmV0dXJucyB7c3RyaW5nfSBoYXNoIHN0cmluZyBzdWNoIHRoYXQgdGhlIHNhbWUgaW5wdXQgd2ls
bCBoYXZlIHRoZSBzYW1lIGhhc2ggc3RyaW5nLgorICogICAgICAgICBUaGUgcmVzdWx0aW5nIHN0
cmluZyBrZXkgaXMgaW4gJ3R5cGU6aGFzaEtleScgZm9ybWF0LgorICovCitmdW5jdGlvbiBoYXNo
S2V5KG9iaikgeworICB2YXIgb2JqVHlwZSA9IHR5cGVvZiBvYmosCisgICAgICBrZXk7CisKKyAg
aWYgKG9ialR5cGUgPT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB7CisgICAgaWYgKHR5cGVv
ZiAoa2V5ID0gb2JqLiQkaGFzaEtleSkgPT0gJ2Z1bmN0aW9uJykgeworICAgICAgLy8gbXVzdCBp
bnZva2Ugb24gb2JqZWN0IHRvIGtlZXAgdGhlIHJpZ2h0IHRoaXMKKyAgICAgIGtleSA9IG9iai4k
JGhhc2hLZXkoKTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBr
ZXkgPSBvYmouJCRoYXNoS2V5ID0gbmV4dFVpZCgpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBr
ZXkgPSBvYmo7CisgIH0KKworICByZXR1cm4gb2JqVHlwZSArICc6JyArIGtleTsKK30KKworLyoq
CisgKiBIYXNoTWFwIHdoaWNoIGNhbiB1c2Ugb2JqZWN0cyBhcyBrZXlzCisgKi8KK2Z1bmN0aW9u
IEhhc2hNYXAoYXJyYXkpeworICBmb3JFYWNoKGFycmF5LCB0aGlzLnB1dCwgdGhpcyk7Cit9CitI
YXNoTWFwLnByb3RvdHlwZSA9IHsKKyAgLyoqCisgICAqIFN0b3JlIGtleSB2YWx1ZSBwYWlyCisg
ICAqIEBwYXJhbSBrZXkga2V5IHRvIHN0b3JlIGNhbiBiZSBhbnkgdHlwZQorICAgKiBAcGFyYW0g
dmFsdWUgdmFsdWUgdG8gc3RvcmUgY2FuIGJlIGFueSB0eXBlCisgICAqLworICBwdXQ6IGZ1bmN0
aW9uKGtleSwgdmFsdWUpIHsKKyAgICB0aGlzW2hhc2hLZXkoa2V5KV0gPSB2YWx1ZTsKKyAgfSwK
KworICAvKioKKyAgICogQHBhcmFtIGtleQorICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgZm9yIHRo
ZSBrZXkKKyAgICovCisgIGdldDogZnVuY3Rpb24oa2V5KSB7CisgICAgcmV0dXJuIHRoaXNbaGFz
aEtleShrZXkpXTsKKyAgfSwKKworICAvKioKKyAgICogUmVtb3ZlIHRoZSBrZXkvdmFsdWUgcGFp
cgorICAgKiBAcGFyYW0ga2V5CisgICAqLworICByZW1vdmU6IGZ1bmN0aW9uKGtleSkgeworICAg
IHZhciB2YWx1ZSA9IHRoaXNba2V5ID0gaGFzaEtleShrZXkpXTsKKyAgICBkZWxldGUgdGhpc1tr
ZXldOworICAgIHJldHVybiB2YWx1ZTsKKyAgfQorfTsKKworLyoqCisgKiBBIG1hcCB3aGVyZSBt
dWx0aXBsZSB2YWx1ZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBzYW1lIGtleSBzdWNoIHRoYXQgdGhl
eSBmb3JtIGEgcXVldWUuCisgKiBAcmV0dXJucyB7SGFzaFF1ZXVlTWFwfQorICovCitmdW5jdGlv
biBIYXNoUXVldWVNYXAoKSB7fQorSGFzaFF1ZXVlTWFwLnByb3RvdHlwZSA9IHsKKyAgLyoqCisg
ICAqIFNhbWUgYXMgYXJyYXkgcHVzaCwgYnV0IHVzaW5nIGFuIGFycmF5IGFzIHRoZSB2YWx1ZSBm
b3IgdGhlIGhhc2gKKyAgICovCisgIHB1c2g6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICB2
YXIgYXJyYXkgPSB0aGlzW2tleSA9IGhhc2hLZXkoa2V5KV07CisgICAgaWYgKCFhcnJheSkgewor
ICAgICAgdGhpc1trZXldID0gW3ZhbHVlXTsKKyAgICB9IGVsc2UgeworICAgICAgYXJyYXkucHVz
aCh2YWx1ZSk7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBTYW1lIGFzIGFycmF5IHNoaWZ0
LCBidXQgdXNpbmcgYW4gYXJyYXkgYXMgdGhlIHZhbHVlIGZvciB0aGUgaGFzaAorICAgKi8KKyAg
c2hpZnQ6IGZ1bmN0aW9uKGtleSkgeworICAgIHZhciBhcnJheSA9IHRoaXNba2V5ID0gaGFzaEtl
eShrZXkpXTsKKyAgICBpZiAoYXJyYXkpIHsKKyAgICAgIGlmIChhcnJheS5sZW5ndGggPT0gMSkg
eworICAgICAgICBkZWxldGUgdGhpc1trZXldOworICAgICAgICByZXR1cm4gYXJyYXlbMF07Cisg
ICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYXJyYXkuc2hpZnQoKTsKKyAgICAgIH0KKyAg
ICB9CisgIH0sCisKKyAgLyoqCisgICAqIHJldHVybiB0aGUgZmlyc3QgaXRlbSB3aXRob3V0IGRl
bGV0aW5nIGl0CisgICAqLworICBwZWVrOiBmdW5jdGlvbihrZXkpIHsKKyAgICB2YXIgYXJyYXkg
PSB0aGlzW2hhc2hLZXkoa2V5KV07CisgICAgaWYgKGFycmF5KSB7CisgICAgcmV0dXJuIGFycmF5
WzBdOworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1l
IGFuZ3VsYXIuaW5qZWN0b3IKKyAqIEBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICog
Q3JlYXRlcyBhbiBpbmplY3RvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciByZXRyaWV2
aW5nIHNlcnZpY2VzIGFzIHdlbGwgYXMgZm9yCisgKiBkZXBlbmRlbmN5IGluamVjdGlvbiAoc2Vl
IHtAbGluayBndWlkZS9kaSBkZXBlbmRlbmN5IGluamVjdGlvbn0pLgorICoKKworICogQHBhcmFt
IHtBcnJheS48c3RyaW5nfEZ1bmN0aW9uPn0gbW9kdWxlcyBBIGxpc3Qgb2YgbW9kdWxlIGZ1bmN0
aW9ucyBvciB0aGVpciBhbGlhc2VzLiBTZWUKKyAqICAgICAgICB7QGxpbmsgYW5ndWxhci5tb2R1
bGV9LiBUaGUgYG5nYCBtb2R1bGUgbXVzdCBiZSBleHBsaWNpdGx5IGFkZGVkLgorICogQHJldHVy
bnMge2Z1bmN0aW9uKCl9IEluamVjdG9yIGZ1bmN0aW9uLiBTZWUge0BsaW5rIEFVVE8uJGluamVj
dG9yICRpbmplY3Rvcn0uCisgKgorICogQGV4YW1wbGUKKyAqIFR5cGljYWwgdXNhZ2UKKyAqIDxw
cmU+CisgKiAgIC8vIGNyZWF0ZSBhbiBpbmplY3RvcgorICogICB2YXIgJGluamVjdG9yID0gYW5n
dWxhci5pbmplY3RvcihbJ25nJ10pOworICoKKyAqICAgLy8gdXNlIHRoZSBpbmplY3RvciB0byBr
aWNrIG9mZiB5b3VyIGFwcGxpY2F0aW9uCisgKiAgIC8vIHVzZSB0aGUgdHlwZSBpbmZlcmVuY2Ug
dG8gYXV0byBpbmplY3QgYXJndW1lbnRzLCBvciB1c2UgaW1wbGljaXQgaW5qZWN0aW9uCisgKiAg
ICRpbmplY3Rvci5pbnZva2UoZnVuY3Rpb24oJHJvb3RTY29wZSwgJGNvbXBpbGUsICRkb2N1bWVu
dCl7CisgKiAgICAgJGNvbXBpbGUoJGRvY3VtZW50KSgkcm9vdFNjb3BlKTsKKyAqICAgICAkcm9v
dFNjb3BlLiRkaWdlc3QoKTsKKyAqICAgfSk7CisgKiA8L3ByZT4KKyAqLworCisKKy8qKgorICog
QG5nZG9jIG92ZXJ2aWV3CisgKiBAbmFtZSBBVVRPCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBJ
bXBsaWNpdCBtb2R1bGUgd2hpY2ggZ2V0cyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGVhY2gge0Bs
aW5rIEFVVE8uJGluamVjdG9yICRpbmplY3Rvcn0uCisgKi8KKwordmFyIEZOX0FSR1MgPSAvXmZ1
bmN0aW9uXHMqW15cKF0qXChccyooW15cKV0qKVwpL207Cit2YXIgRk5fQVJHX1NQTElUID0gLywv
OwordmFyIEZOX0FSRyA9IC9eXHMqKF8/KShcUys/KVwxXHMqJC87Cit2YXIgU1RSSVBfQ09NTUVO
VFMgPSAvKChcL1wvLiokKXwoXC9cKltcc1xTXSo/XCpcLykpL21nOworZnVuY3Rpb24gYW5ub3Rh
dGUoZm4pIHsKKyAgdmFyICRpbmplY3QsCisgICAgICBmblRleHQsCisgICAgICBhcmdEZWNsLAor
ICAgICAgbGFzdDsKKworICBpZiAodHlwZW9mIGZuID09ICdmdW5jdGlvbicpIHsKKyAgICBpZiAo
ISgkaW5qZWN0ID0gZm4uJGluamVjdCkpIHsKKyAgICAgICRpbmplY3QgPSBbXTsKKyAgICAgIGZu
VGV4dCA9IGZuLnRvU3RyaW5nKCkucmVwbGFjZShTVFJJUF9DT01NRU5UUywgJycpOworICAgICAg
YXJnRGVjbCA9IGZuVGV4dC5tYXRjaChGTl9BUkdTKTsKKyAgICAgIGZvckVhY2goYXJnRGVjbFsx
XS5zcGxpdChGTl9BUkdfU1BMSVQpLCBmdW5jdGlvbihhcmcpeworICAgICAgICBhcmcucmVwbGFj
ZShGTl9BUkcsIGZ1bmN0aW9uKGFsbCwgdW5kZXJzY29yZSwgbmFtZSl7CisgICAgICAgICAgJGlu
amVjdC5wdXNoKG5hbWUpOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgICAgZm4uJGluamVj
dCA9ICRpbmplY3Q7CisgICAgfQorICB9IGVsc2UgaWYgKGlzQXJyYXkoZm4pKSB7CisgICAgbGFz
dCA9IGZuLmxlbmd0aCAtIDE7CisgICAgYXNzZXJ0QXJnRm4oZm5bbGFzdF0sICdmbicpOworICAg
ICRpbmplY3QgPSBmbi5zbGljZSgwLCBsYXN0KTsKKyAgfSBlbHNlIHsKKyAgICBhc3NlcnRBcmdG
bihmbiwgJ2ZuJywgdHJ1ZSk7CisgIH0KKyAgcmV0dXJuICRpbmplY3Q7Cit9CisKKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKioKKyAqIEBuZ2RvYyBvYmplY3QK
KyAqIEBuYW1lIEFVVE8uJGluamVjdG9yCisgKiBAZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRp
b24KKyAqCisgKiBgJGluamVjdG9yYCBpcyB1c2VkIHRvIHJldHJpZXZlIG9iamVjdCBpbnN0YW5j
ZXMgYXMgZGVmaW5lZCBieQorICoge0BsaW5rIEFVVE8uJHByb3ZpZGUgcHJvdmlkZXJ9LCBpbnN0
YW50aWF0ZSB0eXBlcywgaW52b2tlIG1ldGhvZHMsCisgKiBhbmQgbG9hZCBtb2R1bGVzLgorICoK
KyAqIFRoZSBmb2xsb3dpbmcgYWx3YXlzIGhvbGRzIHRydWU6CisgKgorICogPHByZT4KKyAqICAg
dmFyICRpbmplY3RvciA9IGFuZ3VsYXIuaW5qZWN0b3IoKTsKKyAqICAgZXhwZWN0KCRpbmplY3Rv
ci5nZXQoJyRpbmplY3RvcicpKS50b0JlKCRpbmplY3Rvcik7CisgKiAgIGV4cGVjdCgkaW5qZWN0
b3IuaW52b2tlKGZ1bmN0aW9uKCRpbmplY3Rvcil7CisgKiAgICAgcmV0dXJuICRpbmplY3RvcjsK
KyAqICAgfSkudG9CZSgkaW5qZWN0b3IpOworICogPC9wcmU+CisgKgorICogIyBJbmplY3Rpb24g
RnVuY3Rpb24gQW5ub3RhdGlvbgorICoKKyAqIEphdmFTY3JpcHQgZG9lcyBub3QgaGF2ZSBhbm5v
dGF0aW9ucywgYW5kIGFubm90YXRpb25zIGFyZSBuZWVkZWQgZm9yIGRlcGVuZGVuY3kgaW5qZWN0
aW9uLiBUaGUKKyAqIGZvbGxvd2luZyBhcmUgYWxsIHZhbGlkIHdheXMgb2YgYW5ub3RhdGluZyBm
dW5jdGlvbiB3aXRoIGluamVjdGlvbiBhcmd1bWVudHMgYW5kIGFyZSBlcXVpdmFsZW50LgorICoK
KyAqIDxwcmU+CisgKiAgIC8vIGluZmVycmVkIChvbmx5IHdvcmtzIGlmIGNvZGUgbm90IG1pbmlm
aWVkL29iZnVzY2F0ZWQpCisgKiAgICRpbmplY3Rvci5pbnZva2UoZnVuY3Rpb24oc2VydmljZUEp
e30pOworICoKKyAqICAgLy8gYW5ub3RhdGVkCisgKiAgIGZ1bmN0aW9uIGV4cGxpY2l0KHNlcnZp
Y2VBKSB7fTsKKyAqICAgZXhwbGljaXQuJGluamVjdCA9IFsnc2VydmljZUEnXTsKKyAqICAgJGlu
amVjdG9yLmludm9rZShleHBsaWNpdCk7CisgKgorICogICAvLyBpbmxpbmUKKyAqICAgJGluamVj
dG9yLmludm9rZShbJ3NlcnZpY2VBJywgZnVuY3Rpb24oc2VydmljZUEpe31dKTsKKyAqIDwvcHJl
PgorICoKKyAqICMjIEluZmVyZW5jZQorICoKKyAqIEluIEphdmFTY3JpcHQgY2FsbGluZyBgdG9T
dHJpbmcoKWAgb24gYSBmdW5jdGlvbiByZXR1cm5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBU
aGUgZGVmaW5pdGlvbiBjYW4gdGhlbiBiZQorICogcGFyc2VkIGFuZCB0aGUgZnVuY3Rpb24gYXJn
dW1lbnRzIGNhbiBiZSBleHRyYWN0ZWQuICpOT1RFOiogVGhpcyBkb2VzIG5vdCB3b3JrIHdpdGgg
bWluaWZpY2F0aW9uLCBhbmQgb2JmdXNjYXRpb24KKyAqIHRvb2xzIHNpbmNlIHRoZXNlIHRvb2xz
IGNoYW5nZSB0aGUgYXJndW1lbnQgbmFtZXMuCisgKgorICogIyMgYCRpbmplY3RgIEFubm90YXRp
b24KKyAqIEJ5IGFkZGluZyBhIGAkaW5qZWN0YCBwcm9wZXJ0eSBvbnRvIGEgZnVuY3Rpb24gdGhl
IGluamVjdGlvbiBwYXJhbWV0ZXJzIGNhbiBiZSBzcGVjaWZpZWQuCisgKgorICogIyMgSW5saW5l
CisgKiBBcyBhbiBhcnJheSBvZiBpbmplY3Rpb24gbmFtZXMsIHdoZXJlIHRoZSBsYXN0IGl0ZW0g
aW4gdGhlIGFycmF5IGlzIHRoZSBmdW5jdGlvbiB0byBjYWxsLgorICovCisKKy8qKgorICogQG5n
ZG9jIG1ldGhvZAorICogQG5hbWUgQVVUTy4kaW5qZWN0b3IjZ2V0CisgKiBAbWV0aG9kT2YgQVVU
Ty4kaW5qZWN0b3IKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFJldHVybiBhbiBpbnN0YW5jZSBv
ZiB0aGUgc2VydmljZS4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0
aGUgaW5zdGFuY2UgdG8gcmV0cmlldmUuCisgKiBAcmV0dXJuIHsqfSBUaGUgaW5zdGFuY2UuCisg
Ki8KKworLyoqCisgKiBAbmdkb2MgbWV0aG9kCisgKiBAbmFtZSBBVVRPLiRpbmplY3RvciNpbnZv
a2UKKyAqIEBtZXRob2RPZiBBVVRPLiRpbmplY3RvcgorICoKKyAqIEBkZXNjcmlwdGlvbgorICog
SW52b2tlIHRoZSBtZXRob2QgYW5kIHN1cHBseSB0aGUgbWV0aG9kIGFyZ3VtZW50cyBmcm9tIHRo
ZSBgJGluamVjdG9yYC4KKyAqCisgKiBAcGFyYW0geyFmdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9u
IHRvIGludm9rZS4gVGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBjb21lIGZvcm0gdGhlIGZ1bmN0aW9u
IGFubm90YXRpb24uCisgKiBAcGFyYW0ge09iamVjdD19IHNlbGYgVGhlIGB0aGlzYCBmb3IgdGhl
IGludm9rZWQgbWV0aG9kLgorICogQHBhcmFtIHtPYmplY3Q9fSBsb2NhbHMgT3B0aW9uYWwgb2Jq
ZWN0LiBJZiBwcmVzZXQgdGhlbiBhbnkgYXJndW1lbnQgbmFtZXMgYXJlIHJlYWQgZnJvbSB0aGlz
IG9iamVjdCBmaXJzdCwgYmVmb3JlCisgKiAgIHRoZSBgJGluamVjdG9yYCBpcyBjb25zdWx0ZWQu
CisgKiBAcmV0dXJucyB7Kn0gdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBpbnZva2VkIGBmbmAg
ZnVuY3Rpb24uCisgKi8KKworLyoqCisgKiBAbmdkb2MgbWV0aG9kCisgKiBAbmFtZSBBVVRPLiRp
bmplY3RvciNpbnN0YW50aWF0ZQorICogQG1ldGhvZE9mIEFVVE8uJGluamVjdG9yCisgKiBAZGVz
Y3JpcHRpb24KKyAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBKUyB0eXBlLiBUaGUgbWV0aG9k
IHRha2VzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gaW52b2tlcyB0aGUgbmV3IG9wZXJhdG9yIGFu
ZCBzdXBwbGllcworICogYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbnN0cnVjdG9yIGZ1
bmN0aW9uIGFzIHNwZWNpZmllZCBieSB0aGUgY29uc3RydWN0b3IgYW5ub3RhdGlvbi4KKyAqCisg
KiBAcGFyYW0ge2Z1bmN0aW9ufSBUeXBlIEFubm90YXRlZCBjb25zdHJ1Y3RvciBmdW5jdGlvbi4K
KyAqIEBwYXJhbSB7T2JqZWN0PX0gbG9jYWxzIE9wdGlvbmFsIG9iamVjdC4gSWYgcHJlc2V0IHRo
ZW4gYW55IGFyZ3VtZW50IG5hbWVzIGFyZSByZWFkIGZyb20gdGhpcyBvYmplY3QgZmlyc3QsIGJl
Zm9yZQorICogICB0aGUgYCRpbmplY3RvcmAgaXMgY29uc3VsdGVkLgorICogQHJldHVybnMge09i
amVjdH0gbmV3IGluc3RhbmNlIG9mIGBUeXBlYC4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBtZXRo
b2QKKyAqIEBuYW1lIEFVVE8uJGluamVjdG9yI2Fubm90YXRlCisgKiBAbWV0aG9kT2YgQVVUTy4k
aW5qZWN0b3IKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFJldHVybnMgYW4gYXJyYXkgb2Ygc2Vy
dmljZSBuYW1lcyB3aGljaCB0aGUgZnVuY3Rpb24gaXMgcmVxdWVzdGluZyBmb3IgaW5qZWN0aW9u
LiBUaGlzIEFQSSBpcyB1c2VkIGJ5IHRoZSBpbmplY3RvcgorICogdG8gZGV0ZXJtaW5lIHdoaWNo
IHNlcnZpY2VzIG5lZWQgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgZnVuY3Rpb24gd2hlbiB0aGUg
ZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhlcmUgYXJlIHRocmVlCisgKiB3YXlzIGluIHdoaWNoIHRo
ZSBmdW5jdGlvbiBjYW4gYmUgYW5ub3RhdGVkIHdpdGggdGhlIG5lZWRlZCBkZXBlbmRlbmNpZXMu
CisgKgorICogIyBBcmd1bWVudCBuYW1lcworICoKKyAqIFRoZSBzaW1wbGVzdCBmb3JtIGlzIHRv
IGV4dHJhY3QgdGhlIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0
aW9uLiBUaGlzIGlzIGRvbmUgYnkgY29udmVydGluZworICogdGhlIGZ1bmN0aW9uIGludG8gYSBz
dHJpbmcgdXNpbmcgYHRvU3RyaW5nKClgIG1ldGhvZCBhbmQgZXh0cmFjdGluZyB0aGUgYXJndW1l
bnQgbmFtZXMuCisgKiA8cHJlPgorICogICAvLyBHaXZlbgorICogICBmdW5jdGlvbiBNeUNvbnRy
b2xsZXIoJHNjb3BlLCAkcm91dGUpIHsKKyAqICAgICAvLyAuLi4KKyAqICAgfQorICoKKyAqICAg
Ly8gVGhlbgorICogICBleHBlY3QoaW5qZWN0b3IuYW5ub3RhdGUoTXlDb250cm9sbGVyKSkudG9F
cXVhbChbJyRzY29wZScsICckcm91dGUnXSk7CisgKiA8L3ByZT4KKyAqCisgKiBUaGlzIG1ldGhv
ZCBkb2VzIG5vdCB3b3JrIHdpdGggY29kZSBtaW5maWNhdGlvbiAvIG9iZnVzY2F0aW9uLiBGb3Ig
dGhpcyByZWFzb24gdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9uIHN0cmF0ZWdpZXMKKyAqIGFyZSBz
dXBwb3J0ZWQuCisgKgorICogIyBUaGUgYCRpbmplY3RgIHByb3BlcnR5CisgKgorICogSWYgYSBm
dW5jdGlvbiBoYXMgYW4gYCRpbmplY3RgIHByb3BlcnR5IGFuZCBpdHMgdmFsdWUgaXMgYW4gYXJy
YXkgb2Ygc3RyaW5ncywgdGhlbiB0aGUgc3RyaW5ncyByZXByZXNlbnQgbmFtZXMgb2YKKyAqIHNl
cnZpY2VzIHRvIGJlIGluamVjdGVkIGludG8gdGhlIGZ1bmN0aW9uLgorICogPHByZT4KKyAqICAg
Ly8gR2l2ZW4KKyAqICAgdmFyIE15Q29udHJvbGxlciA9IGZ1bmN0aW9uKG9iZnVzY2F0ZWRTY29w
ZSwgb2JmdXNjYXRlZFJvdXRlKSB7CisgKiAgICAgLy8gLi4uCisgKiAgIH0KKyAqICAgLy8gRGVm
aW5lIGZ1bmN0aW9uIGRlcGVuZGVuY2llcworICogICBNeUNvbnRyb2xsZXIuJGluamVjdCA9IFsn
JHNjb3BlJywgJyRyb3V0ZSddOworICoKKyAqICAgLy8gVGhlbgorICogICBleHBlY3QoaW5qZWN0
b3IuYW5ub3RhdGUoTXlDb250cm9sbGVyKSkudG9FcXVhbChbJyRzY29wZScsICckcm91dGUnXSk7
CisgKiA8L3ByZT4KKyAqCisgKiAjIFRoZSBhcnJheSBub3RhdGlvbgorICoKKyAqIEl0IGlzIG9m
dGVuIGRlc2lyYWJsZSB0byBpbmxpbmUgSW5qZWN0ZWQgZnVuY3Rpb25zIGFuZCB0aGF0J3Mgd2hl
biBzZXR0aW5nIHRoZSBgJGluamVjdGAgcHJvcGVydHkgaXMgdmVyeQorICogaW5jb252ZW5pZW50
LiBJbiB0aGVzZSBzaXR1YXRpb25zIHVzaW5nIHRoZSBhcnJheSBub3RhdGlvbiB0byBzcGVjaWZ5
IHRoZSBkZXBlbmRlbmNpZXMgaW4gYSB3YXkgdGhhdCBzdXJ2aXZlcworICogbWluaWZpY2F0aW9u
IGlzIGEgYmV0dGVyIGNob2ljZToKKyAqCisgKiA8cHJlPgorICogICAvLyBXZSB3aXNoIHRvIHdy
aXRlIHRoaXMgKG5vdCBtaW5pZmljYXRpb24gLyBvYmZ1c2NhdGlvbiBzYWZlKQorICogICBpbmpl
Y3Rvci5pbnZva2UoZnVuY3Rpb24oJGNvbXBpbGUsICRyb290U2NvcGUpIHsKKyAqICAgICAvLyAu
Li4KKyAqICAgfSk7CisgKgorICogICAvLyBXZSBhcmUgZm9yY2VkIHRvIHdyaXRlIGJyZWFrIGlu
bGluaW5nCisgKiAgIHZhciB0bXBGbiA9IGZ1bmN0aW9uKG9iZnVzY2F0ZWRDb21waWxlLCBvYmZ1
c2NhdGVkUm9vdFNjb3BlKSB7CisgKiAgICAgLy8gLi4uCisgKiAgIH07CisgKiAgIHRtcEZuLiRp
bmplY3QgPSBbJyRjb21waWxlJywgJyRyb290U2NvcGUnXTsKKyAqICAgaW5qZWN0b3IuaW52b2tl
KHRtcEZuKTsKKyAqCisgKiAgIC8vIFRvIGJldHRlciBzdXBwb3J0IGlubGluZSBmdW5jdGlvbiB0
aGUgaW5saW5lIGFubm90YXRpb24gaXMgc3VwcG9ydGVkCisgKiAgIGluamVjdG9yLmludm9rZShb
JyRjb21waWxlJywgJyRyb290U2NvcGUnLCBmdW5jdGlvbihvYmZDb21waWxlLCBvYmZSb290U2Nv
cGUpIHsKKyAqICAgICAvLyAuLi4KKyAqICAgfV0pOworICoKKyAqICAgLy8gVGhlcmVmb3JlCisg
KiAgIGV4cGVjdChpbmplY3Rvci5hbm5vdGF0ZSgKKyAqICAgICAgWyckY29tcGlsZScsICckcm9v
dFNjb3BlJywgZnVuY3Rpb24ob2JmdXNfJGNvbXBpbGUsIG9iZnVzXyRyb290U2NvcGUpIHt9XSkK
KyAqICAgICkudG9FcXVhbChbJyRjb21waWxlJywgJyRyb290U2NvcGUnXSk7CisgKiA8L3ByZT4K
KyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9ufEFycmF5LjxzdHJpbmd8RnVuY3Rpb24+fSBmbiBGdW5j
dGlvbiBmb3Igd2hpY2ggZGVwZW5kZW50IHNlcnZpY2UgbmFtZXMgbmVlZCB0byBiZSByZXRyaWV2
ZWQgYXMgZGVzY3JpYmVkCisgKiAgIGFib3ZlLgorICoKKyAqIEByZXR1cm5zIHtBcnJheS48c3Ry
aW5nPn0gVGhlIG5hbWVzIG9mIHRoZSBzZXJ2aWNlcyB3aGljaCB0aGUgZnVuY3Rpb24gcmVxdWly
ZXMuCisgKi8KKworCisKKworLyoqCisgKiBAbmdkb2Mgb2JqZWN0CisgKiBAbmFtZSBBVVRPLiRw
cm92aWRlCisgKgorICogQGRlc2NyaXB0aW9uCisgKgorICogVXNlIGAkcHJvdmlkZWAgdG8gcmVn
aXN0ZXIgbmV3IHByb3ZpZGVycyB3aXRoIHRoZSBgJGluamVjdG9yYC4gVGhlIHByb3ZpZGVycyBh
cmUgdGhlIGZhY3RvcmllcyBmb3IgdGhlIGluc3RhbmNlLgorICogVGhlIHByb3ZpZGVycyBzaGFy
ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBpbnN0YW5jZSB0aGV5IGNyZWF0ZSB3aXRoIGBQcm92aWRl
cmAgc3VmZml4ZWQgdG8gdGhlbS4KKyAqCisgKiBBIHByb3ZpZGVyIGlzIGFuIG9iamVjdCB3aXRo
IGEgYCRnZXQoKWAgbWV0aG9kLiBUaGUgaW5qZWN0b3IgY2FsbHMgdGhlIGAkZ2V0YCBtZXRob2Qg
dG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mCisgKiBhIHNlcnZpY2UuIFRoZSBQcm92aWRlciBj
YW4gaGF2ZSBhZGRpdGlvbmFsIG1ldGhvZHMgd2hpY2ggd291bGQgYWxsb3cgZm9yIGNvbmZpZ3Vy
YXRpb24gb2YgdGhlIHByb3ZpZGVyLgorICoKKyAqIDxwcmU+CisgKiAgIGZ1bmN0aW9uIEdyZWV0
UHJvdmlkZXIoKSB7CisgKiAgICAgdmFyIHNhbHV0YXRpb24gPSAnSGVsbG8nOworICoKKyAqICAg
ICB0aGlzLnNhbHV0YXRpb24gPSBmdW5jdGlvbih0ZXh0KSB7CisgKiAgICAgICBzYWx1dGF0aW9u
ID0gdGV4dDsKKyAqICAgICB9OworICoKKyAqICAgICB0aGlzLiRnZXQgPSBmdW5jdGlvbigpIHsK
KyAqICAgICAgIHJldHVybiBmdW5jdGlvbiAobmFtZSkgeworICogICAgICAgICByZXR1cm4gc2Fs
dXRhdGlvbiArICcgJyArIG5hbWUgKyAnISc7CisgKiAgICAgICB9OworICogICAgIH07CisgKiAg
IH0KKyAqCisgKiAgIGRlc2NyaWJlKCdHcmVldGVyJywgZnVuY3Rpb24oKXsKKyAqCisgKiAgICAg
YmVmb3JlRWFjaChtb2R1bGUoZnVuY3Rpb24oJHByb3ZpZGUpIHsKKyAqICAgICAgICRwcm92aWRl
LnByb3ZpZGVyKCdncmVldCcsIEdyZWV0UHJvdmlkZXIpOworICogICAgIH0pKTsKKyAqCisgKiAg
ICAgaXQoJ3Nob3VsZCBncmVldCcsIGluamVjdChmdW5jdGlvbihncmVldCkgeworICogICAgICAg
ZXhwZWN0KGdyZWV0KCdhbmd1bGFyJykpLnRvRXF1YWwoJ0hlbGxvIGFuZ3VsYXIhJyk7CisgKiAg
ICAgfSkpOworICoKKyAqICAgICBpdCgnc2hvdWxkIGFsbG93IGNvbmZpZ3VyYXRpb24gb2Ygc2Fs
dXRhdGlvbicsIGZ1bmN0aW9uKCkgeworICogICAgICAgbW9kdWxlKGZ1bmN0aW9uKGdyZWV0UHJv
dmlkZXIpIHsKKyAqICAgICAgICAgZ3JlZXRQcm92aWRlci5zYWx1dGF0aW9uKCdBaG9qJyk7Cisg
KiAgICAgICB9KTsKKyAqICAgICAgIGluamVjdChmdW5jdGlvbihncmVldCkgeworICogICAgICAg
ICBleHBlY3QoZ3JlZXQoJ2FuZ3VsYXInKSkudG9FcXVhbCgnQWhvaiBhbmd1bGFyIScpOworICog
ICAgICAgfSk7CisgKiAgICAgfSk7CisgKiA8L3ByZT4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBt
ZXRob2QKKyAqIEBuYW1lIEFVVE8uJHByb3ZpZGUjcHJvdmlkZXIKKyAqIEBtZXRob2RPZiBBVVRP
LiRwcm92aWRlCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBSZWdpc3RlciBhIHByb3ZpZGVyIGZv
ciBhIHNlcnZpY2UuIFRoZSBwcm92aWRlcnMgY2FuIGJlIHJldHJpZXZlZCBhbmQgY2FuIGhhdmUg
YWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG1ldGhvZHMuCisgKgorICogQHBhcmFtIHtzdHJpbmd9
IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlLiBOT1RFOiB0aGUgcHJvdmlkZXIgd2lsbCBi
ZSBhdmFpbGFibGUgdW5kZXIgYG5hbWUgKyAnUHJvdmlkZXInYCBrZXkuCisgKiBAcGFyYW0geyhP
YmplY3R8ZnVuY3Rpb24oKSl9IHByb3ZpZGVyIElmIHRoZSBwcm92aWRlciBpczoKKyAqCisgKiAg
IC0gYE9iamVjdGA6IHRoZW4gaXQgc2hvdWxkIGhhdmUgYSBgJGdldGAgbWV0aG9kLiBUaGUgYCRn
ZXRgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgdXNpbmcKKyAqICAgICAgICAgICAgICAge0BsaW5r
IEFVVE8uJGluamVjdG9yI2ludm9rZSAkaW5qZWN0b3IuaW52b2tlKCl9IHdoZW4gYW4gaW5zdGFu
Y2UgbmVlZHMgdG8gYmUgY3JlYXRlZC4KKyAqICAgLSBgQ29uc3RydWN0b3JgOiBhIG5ldyBpbnN0
YW5jZSBvZiB0aGUgcHJvdmlkZXIgd2lsbCBiZSBjcmVhdGVkIHVzaW5nCisgKiAgICAgICAgICAg
ICAgIHtAbGluayBBVVRPLiRpbmplY3RvciNpbnN0YW50aWF0ZSAkaW5qZWN0b3IuaW5zdGFudGlh
dGUoKX0sIHRoZW4gdHJlYXRlZCBhcyBgb2JqZWN0YC4KKyAqCisgKiBAcmV0dXJucyB7T2JqZWN0
fSByZWdpc3RlcmVkIHByb3ZpZGVyIGluc3RhbmNlCisgKi8KKworLyoqCisgKiBAbmdkb2MgbWV0
aG9kCisgKiBAbmFtZSBBVVRPLiRwcm92aWRlI2ZhY3RvcnkKKyAqIEBtZXRob2RPZiBBVVRPLiRw
cm92aWRlCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBBIHNob3J0IGhhbmQgZm9yIGNvbmZpZ3Vy
aW5nIHNlcnZpY2VzIGlmIG9ubHkgYCRnZXRgIG1ldGhvZCBpcyByZXF1aXJlZC4KKyAqCisgKiBA
cGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UuCisgKiBAcGFyYW0g
e2Z1bmN0aW9uKCl9ICRnZXRGbiBUaGUgJGdldEZuIGZvciB0aGUgaW5zdGFuY2UgY3JlYXRpb24u
IEludGVybmFsbHkgdGhpcyBpcyBhIHNob3J0IGhhbmQgZm9yCisgKiBgJHByb3ZpZGUucHJvdmlk
ZXIobmFtZSwgeyRnZXQ6ICRnZXRGbn0pYC4KKyAqIEByZXR1cm5zIHtPYmplY3R9IHJlZ2lzdGVy
ZWQgcHJvdmlkZXIgaW5zdGFuY2UKKyAqLworCisKKy8qKgorICogQG5nZG9jIG1ldGhvZAorICog
QG5hbWUgQVVUTy4kcHJvdmlkZSNzZXJ2aWNlCisgKiBAbWV0aG9kT2YgQVVUTy4kcHJvdmlkZQor
ICogQGRlc2NyaXB0aW9uCisgKgorICogQSBzaG9ydCBoYW5kIGZvciByZWdpc3RlcmluZyBzZXJ2
aWNlIG9mIGdpdmVuIGNsYXNzLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1l
IG9mIHRoZSBpbnN0YW5jZS4KKyAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yIEEgY2xh
c3MgKGNvbnN0cnVjdG9yIGZ1bmN0aW9uKSB0aGF0IHdpbGwgYmUgaW5zdGFudGlhdGVkLgorICog
QHJldHVybnMge09iamVjdH0gcmVnaXN0ZXJlZCBwcm92aWRlciBpbnN0YW5jZQorICovCisKKwor
LyoqCisgKiBAbmdkb2MgbWV0aG9kCisgKiBAbmFtZSBBVVRPLiRwcm92aWRlI3ZhbHVlCisgKiBA
bWV0aG9kT2YgQVVUTy4kcHJvdmlkZQorICogQGRlc2NyaXB0aW9uCisgKgorICogQSBzaG9ydCBo
YW5kIGZvciBjb25maWd1cmluZyBzZXJ2aWNlcyBpZiB0aGUgYCRnZXRgIG1ldGhvZCBpcyBhIGNv
bnN0YW50LgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnN0
YW5jZS4KKyAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlLgorICogQHJldHVybnMge09iamVj
dH0gcmVnaXN0ZXJlZCBwcm92aWRlciBpbnN0YW5jZQorICovCisKKworLyoqCisgKiBAbmdkb2Mg
bWV0aG9kCisgKiBAbmFtZSBBVVRPLiRwcm92aWRlI2NvbnN0YW50CisgKiBAbWV0aG9kT2YgQVVU
Ty4kcHJvdmlkZQorICogQGRlc2NyaXB0aW9uCisgKgorICogQSBjb25zdGFudCB2YWx1ZSwgYnV0
IHVubGlrZSB7QGxpbmsgQVVUTy4kcHJvdmlkZSN2YWx1ZSB2YWx1ZX0gaXQgY2FuIGJlIGluamVj
dGVkCisgKiBpbnRvIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gKG90aGVyIG1vZHVsZXMpIGFuZCBp
dCBpcyBub3QgaW50ZXJjZXB0YWJsZSBieQorICoge0BsaW5rIEFVVE8uJHByb3ZpZGUjZGVjb3Jh
dG9yIGRlY29yYXRvcn0uCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2Yg
dGhlIGNvbnN0YW50LgorICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgY29uc3RhbnQgdmFsdWUuCisg
KiBAcmV0dXJucyB7T2JqZWN0fSByZWdpc3RlcmVkIGluc3RhbmNlCisgKi8KKworCisvKioKKyAq
IEBuZ2RvYyBtZXRob2QKKyAqIEBuYW1lIEFVVE8uJHByb3ZpZGUjZGVjb3JhdG9yCisgKiBAbWV0
aG9kT2YgQVVUTy4kcHJvdmlkZQorICogQGRlc2NyaXB0aW9uCisgKgorICogRGVjb3JhdGlvbiBv
ZiBzZXJ2aWNlLCBhbGxvd3MgdGhlIGRlY29yYXRvciB0byBpbnRlcmNlcHQgdGhlIHNlcnZpY2Ug
aW5zdGFuY2UgY3JlYXRpb24uIFRoZQorICogcmV0dXJuZWQgaW5zdGFuY2UgbWF5IGJlIHRoZSBv
cmlnaW5hbCBpbnN0YW5jZSwgb3IgYSBuZXcgaW5zdGFuY2Ugd2hpY2ggZGVsZWdhdGVzIHRvIHRo
ZQorICogb3JpZ2luYWwgaW5zdGFuY2UuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhl
IG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gZGVjb3JhdGUuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9
IGRlY29yYXRvciBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSBzZXJ2aWNl
IG5lZWRzIHRvIGJlCisgKiAgICBpbnN0YW50aWF0ZWQuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQg
dXNpbmcgdGhlIHtAbGluayBBVVRPLiRpbmplY3RvciNpbnZva2UKKyAqICAgIGluamVjdG9yLmlu
dm9rZX0gbWV0aG9kIGFuZCBpcyB0aGVyZWZvcmUgZnVsbHkgaW5qZWN0YWJsZS4gTG9jYWwgaW5q
ZWN0aW9uIGFyZ3VtZW50czoKKyAqCisgKiAgICAqIGAkZGVsZWdhdGVgIC0gVGhlIG9yaWdpbmFs
IHNlcnZpY2UgaW5zdGFuY2UsIHdoaWNoIGNhbiBiZSBtb25rZXkgcGF0Y2hlZCwgY29uZmlndXJl
ZCwKKyAqICAgICAgZGVjb3JhdGVkIG9yIGRlbGVnYXRlZCB0by4KKyAqLworCisKK2Z1bmN0aW9u
IGNyZWF0ZUluamVjdG9yKG1vZHVsZXNUb0xvYWQpIHsKKyAgdmFyIElOU1RBTlRJQVRJTkcgPSB7
fSwKKyAgICAgIHByb3ZpZGVyU3VmZml4ID0gJ1Byb3ZpZGVyJywKKyAgICAgIHBhdGggPSBbXSwK
KyAgICAgIGxvYWRlZE1vZHVsZXMgPSBuZXcgSGFzaE1hcCgpLAorICAgICAgcHJvdmlkZXJDYWNo
ZSA9IHsKKyAgICAgICAgJHByb3ZpZGU6IHsKKyAgICAgICAgICAgIHByb3ZpZGVyOiBzdXBwb3J0
T2JqZWN0KHByb3ZpZGVyKSwKKyAgICAgICAgICAgIGZhY3Rvcnk6IHN1cHBvcnRPYmplY3QoZmFj
dG9yeSksCisgICAgICAgICAgICBzZXJ2aWNlOiBzdXBwb3J0T2JqZWN0KHNlcnZpY2UpLAorICAg
ICAgICAgICAgdmFsdWU6IHN1cHBvcnRPYmplY3QodmFsdWUpLAorICAgICAgICAgICAgY29uc3Rh
bnQ6IHN1cHBvcnRPYmplY3QoY29uc3RhbnQpLAorICAgICAgICAgICAgZGVjb3JhdG9yOiBkZWNv
cmF0b3IKKyAgICAgICAgICB9CisgICAgICB9LAorICAgICAgcHJvdmlkZXJJbmplY3RvciA9IGNy
ZWF0ZUludGVybmFsSW5qZWN0b3IocHJvdmlkZXJDYWNoZSwgZnVuY3Rpb24oKSB7CisgICAgICAg
IHRocm93IEVycm9yKCJVbmtub3duIHByb3ZpZGVyOiAiICsgcGF0aC5qb2luKCcgPC0gJykpOwor
ICAgICAgfSksCisgICAgICBpbnN0YW5jZUNhY2hlID0ge30sCisgICAgICBpbnN0YW5jZUluamVj
dG9yID0gKGluc3RhbmNlQ2FjaGUuJGluamVjdG9yID0KKyAgICAgICAgICBjcmVhdGVJbnRlcm5h
bEluamVjdG9yKGluc3RhbmNlQ2FjaGUsIGZ1bmN0aW9uKHNlcnZpY2VuYW1lKSB7CisgICAgICAg
ICAgICB2YXIgcHJvdmlkZXIgPSBwcm92aWRlckluamVjdG9yLmdldChzZXJ2aWNlbmFtZSArIHBy
b3ZpZGVyU3VmZml4KTsKKyAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZUluamVjdG9yLmludm9r
ZShwcm92aWRlci4kZ2V0LCBwcm92aWRlcik7CisgICAgICAgICAgfSkpOworCisKKyAgZm9yRWFj
aChsb2FkTW9kdWxlcyhtb2R1bGVzVG9Mb2FkKSwgZnVuY3Rpb24oZm4pIHsgaW5zdGFuY2VJbmpl
Y3Rvci5pbnZva2UoZm4gfHwgbm9vcCk7IH0pOworCisgIHJldHVybiBpbnN0YW5jZUluamVjdG9y
OworCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAvLyAkcHJvdmlk
ZXIKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgZnVuY3Rpb24g
c3VwcG9ydE9iamVjdChkZWxlZ2F0ZSkgeworICAgIHJldHVybiBmdW5jdGlvbihrZXksIHZhbHVl
KSB7CisgICAgICBpZiAoaXNPYmplY3Qoa2V5KSkgeworICAgICAgICBmb3JFYWNoKGtleSwgcmV2
ZXJzZVBhcmFtcyhkZWxlZ2F0ZSkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGRl
bGVnYXRlKGtleSwgdmFsdWUpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHBy
b3ZpZGVyKG5hbWUsIHByb3ZpZGVyXykgeworICAgIGlmIChpc0Z1bmN0aW9uKHByb3ZpZGVyXykg
fHwgaXNBcnJheShwcm92aWRlcl8pKSB7CisgICAgICBwcm92aWRlcl8gPSBwcm92aWRlckluamVj
dG9yLmluc3RhbnRpYXRlKHByb3ZpZGVyXyk7CisgICAgfQorICAgIGlmICghcHJvdmlkZXJfLiRn
ZXQpIHsKKyAgICAgIHRocm93IEVycm9yKCdQcm92aWRlciAnICsgbmFtZSArICcgbXVzdCBkZWZp
bmUgJGdldCBmYWN0b3J5IG1ldGhvZC4nKTsKKyAgICB9CisgICAgcmV0dXJuIHByb3ZpZGVyQ2Fj
aGVbbmFtZSArIHByb3ZpZGVyU3VmZml4XSA9IHByb3ZpZGVyXzsKKyAgfQorCisgIGZ1bmN0aW9u
IGZhY3RvcnkobmFtZSwgZmFjdG9yeUZuKSB7IHJldHVybiBwcm92aWRlcihuYW1lLCB7ICRnZXQ6
IGZhY3RvcnlGbiB9KTsgfQorCisgIGZ1bmN0aW9uIHNlcnZpY2UobmFtZSwgY29uc3RydWN0b3Ip
IHsKKyAgICByZXR1cm4gZmFjdG9yeShuYW1lLCBbJyRpbmplY3RvcicsIGZ1bmN0aW9uKCRpbmpl
Y3RvcikgeworICAgICAgcmV0dXJuICRpbmplY3Rvci5pbnN0YW50aWF0ZShjb25zdHJ1Y3Rvcik7
CisgICAgfV0pOworICB9CisKKyAgZnVuY3Rpb24gdmFsdWUobmFtZSwgdmFsdWUpIHsgcmV0dXJu
IGZhY3RvcnkobmFtZSwgdmFsdWVGbih2YWx1ZSkpOyB9CisKKyAgZnVuY3Rpb24gY29uc3RhbnQo
bmFtZSwgdmFsdWUpIHsKKyAgICBwcm92aWRlckNhY2hlW25hbWVdID0gdmFsdWU7CisgICAgaW5z
dGFuY2VDYWNoZVtuYW1lXSA9IHZhbHVlOworICB9CisKKyAgZnVuY3Rpb24gZGVjb3JhdG9yKHNl
cnZpY2VOYW1lLCBkZWNvckZuKSB7CisgICAgdmFyIG9yaWdQcm92aWRlciA9IHByb3ZpZGVySW5q
ZWN0b3IuZ2V0KHNlcnZpY2VOYW1lICsgcHJvdmlkZXJTdWZmaXgpLAorICAgICAgICBvcmlnJGdl
dCA9IG9yaWdQcm92aWRlci4kZ2V0OworCisgICAgb3JpZ1Byb3ZpZGVyLiRnZXQgPSBmdW5jdGlv
bigpIHsKKyAgICAgIHZhciBvcmlnSW5zdGFuY2UgPSBpbnN0YW5jZUluamVjdG9yLmludm9rZShv
cmlnJGdldCwgb3JpZ1Byb3ZpZGVyKTsKKyAgICAgIHJldHVybiBpbnN0YW5jZUluamVjdG9yLmlu
dm9rZShkZWNvckZuLCBudWxsLCB7JGRlbGVnYXRlOiBvcmlnSW5zdGFuY2V9KTsKKyAgICB9Owor
ICB9CisKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgIC8vIE1vZHVs
ZSBMb2FkaW5nCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICBmdW5j
dGlvbiBsb2FkTW9kdWxlcyhtb2R1bGVzVG9Mb2FkKXsKKyAgICB2YXIgcnVuQmxvY2tzID0gW107
CisgICAgZm9yRWFjaChtb2R1bGVzVG9Mb2FkLCBmdW5jdGlvbihtb2R1bGUpIHsKKyAgICAgIGlm
IChsb2FkZWRNb2R1bGVzLmdldChtb2R1bGUpKSByZXR1cm47CisgICAgICBsb2FkZWRNb2R1bGVz
LnB1dChtb2R1bGUsIHRydWUpOworICAgICAgaWYgKGlzU3RyaW5nKG1vZHVsZSkpIHsKKyAgICAg
ICAgdmFyIG1vZHVsZUZuID0gYW5ndWxhck1vZHVsZShtb2R1bGUpOworICAgICAgICBydW5CbG9j
a3MgPSBydW5CbG9ja3MuY29uY2F0KGxvYWRNb2R1bGVzKG1vZHVsZUZuLnJlcXVpcmVzKSkuY29u
Y2F0KG1vZHVsZUZuLl9ydW5CbG9ja3MpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgZm9y
KHZhciBpbnZva2VRdWV1ZSA9IG1vZHVsZUZuLl9pbnZva2VRdWV1ZSwgaSA9IDAsIGlpID0gaW52
b2tlUXVldWUubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgdmFyIGludm9rZUFy
Z3MgPSBpbnZva2VRdWV1ZVtpXSwKKyAgICAgICAgICAgICAgICBwcm92aWRlciA9IGludm9rZUFy
Z3NbMF0gPT0gJyRpbmplY3RvcicKKyAgICAgICAgICAgICAgICAgICAgPyBwcm92aWRlckluamVj
dG9yCisgICAgICAgICAgICAgICAgICAgIDogcHJvdmlkZXJJbmplY3Rvci5nZXQoaW52b2tlQXJn
c1swXSk7CisKKyAgICAgICAgICAgIHByb3ZpZGVyW2ludm9rZUFyZ3NbMV1dLmFwcGx5KHByb3Zp
ZGVyLCBpbnZva2VBcmdzWzJdKTsKKyAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICBpZiAoZS5tZXNzYWdlKSBlLm1lc3NhZ2UgKz0gJyBmcm9tICcgKyBtb2R1bGU7
CisgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0
aW9uKG1vZHVsZSkpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBydW5CbG9ja3MucHVzaChw
cm92aWRlckluamVjdG9yLmludm9rZShtb2R1bGUpKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgIGlmIChlLm1lc3NhZ2UpIGUubWVzc2FnZSArPSAnIGZyb20gJyArIG1vZHVsZTsK
KyAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKGlzQXJyYXko
bW9kdWxlKSkgeworICAgICAgICB0cnkgeworICAgICAgICAgIHJ1bkJsb2Nrcy5wdXNoKHByb3Zp
ZGVySW5qZWN0b3IuaW52b2tlKG1vZHVsZSkpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgaWYgKGUubWVzc2FnZSkgZS5tZXNzYWdlICs9ICcgZnJvbSAnICsgU3RyaW5nKG1vZHVs
ZVttb2R1bGUubGVuZ3RoIC0gMV0pOworICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydEFyZ0ZuKG1vZHVsZSwgJ21vZHVsZScpOworICAg
ICAgfQorICAgIH0pOworICAgIHJldHVybiBydW5CbG9ja3M7CisgIH0KKworICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgLy8gaW50ZXJuYWwgSW5qZWN0b3IKKyAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgZnVuY3Rpb24gY3JlYXRlSW50
ZXJuYWxJbmplY3RvcihjYWNoZSwgZmFjdG9yeSkgeworCisgICAgZnVuY3Rpb24gZ2V0U2Vydmlj
ZShzZXJ2aWNlTmFtZSkgeworICAgICAgaWYgKHR5cGVvZiBzZXJ2aWNlTmFtZSAhPT0gJ3N0cmlu
ZycpIHsKKyAgICAgICAgdGhyb3cgRXJyb3IoJ1NlcnZpY2UgbmFtZSBleHBlY3RlZCcpOworICAg
ICAgfQorICAgICAgaWYgKGNhY2hlLmhhc093blByb3BlcnR5KHNlcnZpY2VOYW1lKSkgeworICAg
ICAgICBpZiAoY2FjaGVbc2VydmljZU5hbWVdID09PSBJTlNUQU5USUFUSU5HKSB7CisgICAgICAg
ICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIGRlcGVuZGVuY3k6ICcgKyBwYXRoLmpvaW4oJyA8LSAn
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNhY2hlW3NlcnZpY2VOYW1lXTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgcGF0aC51bnNoaWZ0KHNlcnZpY2VO
YW1lKTsKKyAgICAgICAgICBjYWNoZVtzZXJ2aWNlTmFtZV0gPSBJTlNUQU5USUFUSU5HOworICAg
ICAgICAgIHJldHVybiBjYWNoZVtzZXJ2aWNlTmFtZV0gPSBmYWN0b3J5KHNlcnZpY2VOYW1lKTsK
KyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICBwYXRoLnNoaWZ0KCk7CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbnZva2UoZm4sIHNlbGYsIGxvY2Fscyl7
CisgICAgICB2YXIgYXJncyA9IFtdLAorICAgICAgICAgICRpbmplY3QgPSBhbm5vdGF0ZShmbiks
CisgICAgICAgICAgbGVuZ3RoLCBpLAorICAgICAgICAgIGtleTsKKworICAgICAgZm9yKGkgPSAw
LCBsZW5ndGggPSAkaW5qZWN0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGtl
eSA9ICRpbmplY3RbaV07CisgICAgICAgIGFyZ3MucHVzaCgKKyAgICAgICAgICBsb2NhbHMgJiYg
bG9jYWxzLmhhc093blByb3BlcnR5KGtleSkKKyAgICAgICAgICA/IGxvY2Fsc1trZXldCisgICAg
ICAgICAgOiBnZXRTZXJ2aWNlKGtleSkKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICAgIGlmICgh
Zm4uJGluamVjdCkgeworICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgd2UgbXVzdCBiZSBhbiBh
cnJheS4KKyAgICAgICAgZm4gPSBmbltsZW5ndGhdOworICAgICAgfQorCisKKyAgICAgIC8vIFBl
cmZvcm1hbmNlIG9wdGltaXphdGlvbjogaHR0cDovL2pzcGVyZi5jb20vYXBwbHktdnMtY2FsbC12
cy1pbnZva2UKKyAgICAgIHN3aXRjaCAoc2VsZiA/IC0xIDogYXJncy5sZW5ndGgpIHsKKyAgICAg
ICAgY2FzZSAgMDogcmV0dXJuIGZuKCk7CisgICAgICAgIGNhc2UgIDE6IHJldHVybiBmbihhcmdz
WzBdKTsKKyAgICAgICAgY2FzZSAgMjogcmV0dXJuIGZuKGFyZ3NbMF0sIGFyZ3NbMV0pOworICAg
ICAgICBjYXNlICAzOiByZXR1cm4gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7CisgICAg
ICAgIGNhc2UgIDQ6IHJldHVybiBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNd
KTsKKyAgICAgICAgY2FzZSAgNTogcmV0dXJuIGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0s
IGFyZ3NbM10sIGFyZ3NbNF0pOworICAgICAgICBjYXNlICA2OiByZXR1cm4gZm4oYXJnc1swXSwg
YXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7CisgICAgICAgIGNh
c2UgIDc6IHJldHVybiBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdz
WzRdLCBhcmdzWzVdLCBhcmdzWzZdKTsKKyAgICAgICAgY2FzZSAgODogcmV0dXJuIGZuKGFyZ3Nb
MF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0s
IGFyZ3NbN10pOworICAgICAgICBjYXNlICA5OiByZXR1cm4gZm4oYXJnc1swXSwgYXJnc1sxXSwg
YXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSwgYXJnc1s2XSwgYXJnc1s3XSwgYXJn
c1s4XSk7CisgICAgICAgIGNhc2UgMTA6IHJldHVybiBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdz
WzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdLCBhcmdzWzddLCBhcmdzWzhd
LCBhcmdzWzldKTsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZuLmFwcGx5KHNlbGYsIGFyZ3Mp
OworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGluc3RhbnRpYXRlKFR5cGUsIGxvY2Fs
cykgeworICAgICAgdmFyIENvbnN0cnVjdG9yID0gZnVuY3Rpb24oKSB7fSwKKyAgICAgICAgICBp
bnN0YW5jZSwgcmV0dXJuZWRWYWx1ZTsKKworICAgICAgLy8gQ2hlY2sgaWYgVHlwZSBpcyBhbm5v
dGF0ZWQgYW5kIHVzZSBqdXN0IHRoZSBnaXZlbiBmdW5jdGlvbiBhdCBuLTEgYXMgcGFyYW1ldGVy
CisgICAgICAvLyBlLmcuIHNvbWVNb2R1bGUuZmFjdG9yeSgnZ3JlZXRlcicsIFsnJHdpbmRvdycs
IGZ1bmN0aW9uKHJlbmFtZWQkd2luZG93KSB7fV0pOworICAgICAgQ29uc3RydWN0b3IucHJvdG90
eXBlID0gKGlzQXJyYXkoVHlwZSkgPyBUeXBlW1R5cGUubGVuZ3RoIC0gMV0gOiBUeXBlKS5wcm90
b3R5cGU7CisgICAgICBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpOworICAgICAgcmV0dXJu
ZWRWYWx1ZSA9IGludm9rZShUeXBlLCBpbnN0YW5jZSwgbG9jYWxzKTsKKworICAgICAgcmV0dXJu
IGlzT2JqZWN0KHJldHVybmVkVmFsdWUpID8gcmV0dXJuZWRWYWx1ZSA6IGluc3RhbmNlOworICAg
IH0KKworICAgIHJldHVybiB7CisgICAgICBpbnZva2U6IGludm9rZSwKKyAgICAgIGluc3RhbnRp
YXRlOiBpbnN0YW50aWF0ZSwKKyAgICAgIGdldDogZ2V0U2VydmljZSwKKyAgICAgIGFubm90YXRl
OiBhbm5vdGF0ZQorICAgIH07CisgIH0KK30KKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAq
IEBuYW1lIG5nLiRhbmNob3JTY3JvbGwKKyAqIEByZXF1aXJlcyAkd2luZG93CisgKiBAcmVxdWly
ZXMgJGxvY2F0aW9uCisgKiBAcmVxdWlyZXMgJHJvb3RTY29wZQorICoKKyAqIEBkZXNjcmlwdGlv
bgorICogV2hlbiBjYWxsZWQsIGl0IGNoZWNrcyBjdXJyZW50IHZhbHVlIG9mIGAkbG9jYXRpb24u
aGFzaCgpYCBhbmQgc2Nyb2xsIHRvIHJlbGF0ZWQgZWxlbWVudCwKKyAqIGFjY29yZGluZyB0byBy
dWxlcyBzcGVjaWZpZWQgaW4KKyAqIHtAbGluayBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVj
L092ZXJ2aWV3Lmh0bWwjdGhlLWluZGljYXRlZC1wYXJ0LW9mLXRoZS1kb2N1bWVudCBIdG1sNSBz
cGVjfS4KKyAqCisgKiBJdCBhbHNvIHdhdGNoZXMgdGhlIGAkbG9jYXRpb24uaGFzaCgpYCBhbmQg
c2Nyb2xsIHdoZW5ldmVyIGl0IGNoYW5nZXMgdG8gbWF0Y2ggYW55IGFuY2hvci4KKyAqIFRoaXMg
Y2FuIGJlIGRpc2FibGVkIGJ5IGNhbGxpbmcgYCRhbmNob3JTY3JvbGxQcm92aWRlci5kaXNhYmxl
QXV0b1Njcm9sbGluZygpYC4KKyAqLworZnVuY3Rpb24gJEFuY2hvclNjcm9sbFByb3ZpZGVyKCkg
eworCisgIHZhciBhdXRvU2Nyb2xsaW5nRW5hYmxlZCA9IHRydWU7CisKKyAgdGhpcy5kaXNhYmxl
QXV0b1Njcm9sbGluZyA9IGZ1bmN0aW9uKCkgeworICAgIGF1dG9TY3JvbGxpbmdFbmFibGVkID0g
ZmFsc2U7CisgIH07CisKKyAgdGhpcy4kZ2V0ID0gWyckd2luZG93JywgJyRsb2NhdGlvbicsICck
cm9vdFNjb3BlJywgZnVuY3Rpb24oJHdpbmRvdywgJGxvY2F0aW9uLCAkcm9vdFNjb3BlKSB7Cisg
ICAgdmFyIGRvY3VtZW50ID0gJHdpbmRvdy5kb2N1bWVudDsKKworICAgIC8vIGhlbHBlciBmdW5j
dGlvbiB0byBnZXQgZmlyc3QgYW5jaG9yIGZyb20gYSBOb2RlTGlzdAorICAgIC8vIGNhbid0IHVz
ZSBmaWx0ZXIuZmlsdGVyLCBhcyBpdCBhY2NlcHRzIG9ubHkgaW5zdGFuY2VzIG9mIEFycmF5Cisg
ICAgLy8gYW5kIElFIGNhbid0IGNvbnZlcnQgTm9kZUxpc3QgdG8gYW4gYXJyYXkgdXNpbmcgW10u
c2xpY2UKKyAgICAvLyBUT0RPKHZvanRhKTogdXNlIGZpbHRlciBpZiB3ZSBjaGFuZ2UgaXQgdG8g
YWNjZXB0IGxpc3RzIGFzIHdlbGwKKyAgICBmdW5jdGlvbiBnZXRGaXJzdEFuY2hvcihsaXN0KSB7
CisgICAgICB2YXIgcmVzdWx0ID0gbnVsbDsKKyAgICAgIGZvckVhY2gobGlzdCwgZnVuY3Rpb24o
ZWxlbWVudCkgeworICAgICAgICBpZiAoIXJlc3VsdCAmJiBsb3dlcmNhc2UoZWxlbWVudC5ub2Rl
TmFtZSkgPT09ICdhJykgcmVzdWx0ID0gZWxlbWVudDsKKyAgICAgIH0pOworICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY3JvbGwoKSB7CisgICAgICB2YXIgaGFz
aCA9ICRsb2NhdGlvbi5oYXNoKCksIGVsbTsKKworICAgICAgLy8gZW1wdHkgaGFzaCwgc2Nyb2xs
IHRvIHRoZSB0b3Agb2YgdGhlIHBhZ2UKKyAgICAgIGlmICghaGFzaCkgJHdpbmRvdy5zY3JvbGxU
bygwLCAwKTsKKworICAgICAgLy8gZWxlbWVudCB3aXRoIGdpdmVuIGlkCisgICAgICBlbHNlIGlm
ICgoZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaCkpKSBlbG0uc2Nyb2xsSW50b1Zp
ZXcoKTsKKworICAgICAgLy8gZmlyc3QgYW5jaG9yIHdpdGggZ2l2ZW4gbmFtZSA6LUQKKyAgICAg
IGVsc2UgaWYgKChlbG0gPSBnZXRGaXJzdEFuY2hvcihkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFt
ZShoYXNoKSkpKSBlbG0uc2Nyb2xsSW50b1ZpZXcoKTsKKworICAgICAgLy8gbm8gZWxlbWVudCBh
bmQgaGFzaCA9PSAndG9wJywgc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIHBhZ2UKKyAgICAgIGVs
c2UgaWYgKGhhc2ggPT09ICd0b3AnKSAkd2luZG93LnNjcm9sbFRvKDAsIDApOworICAgIH0KKwor
ICAgIC8vIGRvZXMgbm90IHNjcm9sbCB3aGVuIHVzZXIgY2xpY2tzIG9uIGFuY2hvciBsaW5rIHRo
YXQgaXMgY3VycmVudGx5IG9uCisgICAgLy8gKG5vIHVybCBjaGFuZ2UsIG5vICRsb2NhdGlvbi5o
YXNoKCkgY2hhbmdlKSwgYnJvd3NlciBuYXRpdmUgZG9lcyBzY3JvbGwKKyAgICBpZiAoYXV0b1Nj
cm9sbGluZ0VuYWJsZWQpIHsKKyAgICAgICRyb290U2NvcGUuJHdhdGNoKGZ1bmN0aW9uIGF1dG9T
Y3JvbGxXYXRjaCgpIHtyZXR1cm4gJGxvY2F0aW9uLmhhc2goKTt9LAorICAgICAgICBmdW5jdGlv
biBhdXRvU2Nyb2xsV2F0Y2hBY3Rpb24oKSB7CisgICAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFz
eW5jKHNjcm9sbCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBzY3JvbGw7Cisg
IH1dOworfQorCisvKioKKyAqICEgVGhpcyBpcyBhIHByaXZhdGUgdW5kb2N1bWVudGVkIHNlcnZp
Y2UgIQorICoKKyAqIEBuYW1lIG5nLiRicm93c2VyCisgKiBAcmVxdWlyZXMgJGxvZworICogQGRl
c2NyaXB0aW9uCisgKiBUaGlzIG9iamVjdCBoYXMgdHdvIGdvYWxzOgorICoKKyAqIC0gaGlkZSBh
bGwgdGhlIGdsb2JhbCBzdGF0ZSBpbiB0aGUgYnJvd3NlciBjYXVzZWQgYnkgdGhlIHdpbmRvdyBv
YmplY3QKKyAqIC0gYWJzdHJhY3QgYXdheSBhbGwgdGhlIGJyb3dzZXIgc3BlY2lmaWMgZmVhdHVy
ZXMgYW5kIGluY29uc2lzdGVuY2llcworICoKKyAqIEZvciB0ZXN0cyB3ZSBwcm92aWRlIHtAbGlu
ayBuZ01vY2suJGJyb3dzZXIgbW9jayBpbXBsZW1lbnRhdGlvbn0gb2YgdGhlIGAkYnJvd3NlcmAK
KyAqIHNlcnZpY2UsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBjb252ZW5pZW50IHRlc3Rpbmcgb2Yg
dGhlIGFwcGxpY2F0aW9uIHdpdGhvdXQgdGhlIGludGVyYWN0aW9uIHdpdGgKKyAqIHRoZSByZWFs
IGJyb3dzZXIgYXBpcy4KKyAqLworLyoqCisgKiBAcGFyYW0ge29iamVjdH0gd2luZG93IFRoZSBn
bG9iYWwgd2luZG93IG9iamVjdC4KKyAqIEBwYXJhbSB7b2JqZWN0fSBkb2N1bWVudCBqUXVlcnkg
d3JhcHBlZCBkb2N1bWVudC4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gWEhSIFhNTEh0dHBSZXF1
ZXN0IGNvbnN0cnVjdG9yLgorICogQHBhcmFtIHtvYmplY3R9ICRsb2cgY29uc29sZS5sb2cgb3Ig
YW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgaW50ZXJmYWNlLgorICogQHBhcmFtIHtvYmplY3R9ICRz
bmlmZmVyICRzbmlmZmVyIHNlcnZpY2UKKyAqLworZnVuY3Rpb24gQnJvd3Nlcih3aW5kb3csIGRv
Y3VtZW50LCAkbG9nLCAkc25pZmZlcikgeworICB2YXIgc2VsZiA9IHRoaXMsCisgICAgICByYXdE
b2N1bWVudCA9IGRvY3VtZW50WzBdLAorICAgICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24s
CisgICAgICBoaXN0b3J5ID0gd2luZG93Lmhpc3RvcnksCisgICAgICBzZXRUaW1lb3V0ID0gd2lu
ZG93LnNldFRpbWVvdXQsCisgICAgICBjbGVhclRpbWVvdXQgPSB3aW5kb3cuY2xlYXJUaW1lb3V0
LAorICAgICAgcGVuZGluZ0RlZmVySWRzID0ge307CisKKyAgc2VsZi5pc01vY2sgPSBmYWxzZTsK
KworICB2YXIgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPSAwOworICB2YXIgb3V0c3RhbmRpbmdS
ZXF1ZXN0Q2FsbGJhY2tzID0gW107CisKKyAgLy8gVE9ETyh2b2p0YSk6IHJlbW92ZSB0aGlzIHRl
bXBvcmFyeSBhcGkKKyAgc2VsZi4kJGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0ID0gY29tcGxl
dGVPdXRzdGFuZGluZ1JlcXVlc3Q7CisgIHNlbGYuJCRpbmNPdXRzdGFuZGluZ1JlcXVlc3RDb3Vu
dCA9IGZ1bmN0aW9uKCkgeyBvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCsrOyB9OworCisgIC8qKgor
ICAgKiBFeGVjdXRlcyB0aGUgYGZuYCBmdW5jdGlvbihzdXBwb3J0cyBjdXJyeWluZykgYW5kIGRl
Y3JlbWVudHMgdGhlIGBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3NgCisgICAqIGNvdW50ZXIu
IElmIHRoZSBjb3VudGVyIHJlYWNoZXMgMCwgYWxsIHRoZSBgb3V0c3RhbmRpbmdSZXF1ZXN0Q2Fs
bGJhY2tzYCBhcmUgZXhlY3V0ZWQuCisgICAqLworICBmdW5jdGlvbiBjb21wbGV0ZU91dHN0YW5k
aW5nUmVxdWVzdChmbikgeworICAgIHRyeSB7CisgICAgICBmbi5hcHBseShudWxsLCBzbGljZUFy
Z3MoYXJndW1lbnRzLCAxKSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIG91dHN0YW5kaW5nUmVx
dWVzdENvdW50LS07CisgICAgICBpZiAob3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPT09IDApIHsK
KyAgICAgICAgd2hpbGUob3V0c3RhbmRpbmdSZXF1ZXN0Q2FsbGJhY2tzLmxlbmd0aCkgeworICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3MucG9w
KCkoKTsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAkbG9nLmVycm9yKGUp
OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIC8qKgor
ICAgKiBAcHJpdmF0ZQorICAgKiBOb3RlOiB0aGlzIG1ldGhvZCBpcyB1c2VkIG9ubHkgYnkgc2Nl
bmFyaW8gcnVubmVyCisgICAqIFRPRE8odm9qdGEpOiBwcmVmaXggdGhpcyBtZXRob2Qgd2l0aCAk
JCA/CisgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2FsbGJhY2sgRnVuY3Rpb24gdGhhdCB3aWxs
IGJlIGNhbGxlZCB3aGVuIG5vIG91dHN0YW5kaW5nIHJlcXVlc3QKKyAgICovCisgIHNlbGYubm90
aWZ5V2hlbk5vT3V0c3RhbmRpbmdSZXF1ZXN0cyA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAg
Ly8gZm9yY2UgYnJvd3NlciB0byBleGVjdXRlIGFsbCBwb2xsRm5zIC0gdGhpcyBpcyBuZWVkZWQg
c28gdGhhdCBjb29raWVzIGFuZCBvdGhlciBwb2xsZXJzIGZpcmUKKyAgICAvLyBhdCBzb21lIGRl
dGVybWluaXN0aWMgdGltZSBpbiByZXNwZWN0IHRvIHRoZSB0ZXN0IHJ1bm5lcidzIGFjdGlvbnMu
IExlYXZpbmcgdGhpbmdzIHVwIHRvIHRoZQorICAgIC8vIHJlZ3VsYXIgcG9sbGVyIHdvdWxkIHJl
c3VsdCBpbiBmbGFreSB0ZXN0cy4KKyAgICBmb3JFYWNoKHBvbGxGbnMsIGZ1bmN0aW9uKHBvbGxG
bil7IHBvbGxGbigpOyB9KTsKKworICAgIGlmIChvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCA9PT0g
MCkgeworICAgICAgY2FsbGJhY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgb3V0c3RhbmRpbmdS
ZXF1ZXN0Q2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgIH0KKyAgfTsKKworICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
ICAvLyBQb2xsIFdhdGNoZXIgQVBJCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgIHZhciBwb2xsRm5zID0gW10sCisgICAg
ICBwb2xsVGltZW91dDsKKworICAvKioKKyAgICogQG5hbWUgbmcuJGJyb3dzZXIjYWRkUG9sbEZu
CisgICAqIEBtZXRob2RPZiBuZy4kYnJvd3NlcgorICAgKgorICAgKiBAcGFyYW0ge2Z1bmN0aW9u
KCl9IGZuIFBvbGwgZnVuY3Rpb24gdG8gYWRkCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAg
KiBBZGRzIGEgZnVuY3Rpb24gdG8gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgcG9sbGVyIHBl
cmlvZGljYWxseSBleGVjdXRlcywKKyAgICogYW5kIHN0YXJ0cyBwb2xsaW5nIGlmIG5vdCBzdGFy
dGVkIHlldC4KKyAgICoKKyAgICogQHJldHVybnMge2Z1bmN0aW9uKCl9IHRoZSBhZGRlZCBmdW5j
dGlvbgorICAgKi8KKyAgc2VsZi5hZGRQb2xsRm4gPSBmdW5jdGlvbihmbikgeworICAgIGlmIChp
c1VuZGVmaW5lZChwb2xsVGltZW91dCkpIHN0YXJ0UG9sbGVyKDEwMCwgc2V0VGltZW91dCk7Cisg
ICAgcG9sbEZucy5wdXNoKGZuKTsKKyAgICByZXR1cm4gZm47CisgIH07CisKKyAgLyoqCisgICAq
IEBwYXJhbSB7bnVtYmVyfSBpbnRlcnZhbCBIb3cgb2Z0ZW4gc2hvdWxkIGJyb3dzZXIgY2FsbCBw
b2xsIGZ1bmN0aW9ucyAobXMpCisgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gc2V0VGltZW91dCBS
ZWZlcmVuY2UgdG8gYSByZWFsIG9yIGZha2UgYHNldFRpbWVvdXRgIGZ1bmN0aW9uLgorICAgKgor
ICAgKiBAZGVzY3JpcHRpb24KKyAgICogQ29uZmlndXJlcyB0aGUgcG9sbGVyIHRvIHJ1biBpbiB0
aGUgc3BlY2lmaWVkIGludGVydmFscywgdXNpbmcgdGhlIHNwZWNpZmllZAorICAgKiBzZXRUaW1l
b3V0IGZuIGFuZCBraWNrcyBpdCBvZmYuCisgICAqLworICBmdW5jdGlvbiBzdGFydFBvbGxlcihp
bnRlcnZhbCwgc2V0VGltZW91dCkgeworICAgIChmdW5jdGlvbiBjaGVjaygpIHsKKyAgICAgIGZv
ckVhY2gocG9sbEZucywgZnVuY3Rpb24ocG9sbEZuKXsgcG9sbEZuKCk7IH0pOworICAgICAgcG9s
bFRpbWVvdXQgPSBzZXRUaW1lb3V0KGNoZWNrLCBpbnRlcnZhbCk7CisgICAgfSkoKTsKKyAgfQor
CisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisgIC8vIFVSTCBBUEkKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICB2YXIgbGFzdEJyb3dzZXJVcmwg
PSBsb2NhdGlvbi5ocmVmLAorICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5maW5kKCdiYXNl
Jyk7CisKKyAgLyoqCisgICAqIEBuYW1lIG5nLiRicm93c2VyI3VybAorICAgKiBAbWV0aG9kT2Yg
bmcuJGJyb3dzZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEdFVFRFUjoKKyAgICog
V2l0aG91dCBhbnkgYXJndW1lbnQsIHRoaXMgbWV0aG9kIGp1c3QgcmV0dXJucyBjdXJyZW50IHZh
bHVlIG9mIGxvY2F0aW9uLmhyZWYuCisgICAqCisgICAqIFNFVFRFUjoKKyAgICogV2l0aCBhdCBs
ZWFzdCBvbmUgYXJndW1lbnQsIHRoaXMgbWV0aG9kIHNldHMgdXJsIHRvIG5ldyB2YWx1ZS4KKyAg
ICogSWYgaHRtbDUgaGlzdG9yeSBhcGkgc3VwcG9ydGVkLCBwdXNoU3RhdGUvcmVwbGFjZVN0YXRl
IGlzIHVzZWQsIG90aGVyd2lzZQorICAgKiBsb2NhdGlvbi5ocmVmL2xvY2F0aW9uLnJlcGxhY2Ug
aXMgdXNlZC4KKyAgICogUmV0dXJucyBpdHMgb3duIGluc3RhbmNlIHRvIGFsbG93IGNoYWluaW5n
CisgICAqCisgICAqIE5PVEU6IHRoaXMgYXBpIGlzIGludGVuZGVkIGZvciB1c2Ugb25seSBieSB0
aGUgJGxvY2F0aW9uIHNlcnZpY2UuIFBsZWFzZSB1c2UgdGhlCisgICAqIHtAbGluayBuZy4kbG9j
YXRpb24gJGxvY2F0aW9uIHNlcnZpY2V9IHRvIGNoYW5nZSB1cmwuCisgICAqCisgICAqIEBwYXJh
bSB7c3RyaW5nfSB1cmwgTmV3IHVybCAod2hlbiB1c2VkIGFzIHNldHRlcikKKyAgICogQHBhcmFt
IHtib29sZWFuPX0gcmVwbGFjZSBTaG91bGQgbmV3IHVybCByZXBsYWNlIGN1cnJlbnQgaGlzdG9y
eSByZWNvcmQgPworICAgKi8KKyAgc2VsZi51cmwgPSBmdW5jdGlvbih1cmwsIHJlcGxhY2UpIHsK
KyAgICAvLyBzZXR0ZXIKKyAgICBpZiAodXJsKSB7CisgICAgICBpZiAobGFzdEJyb3dzZXJVcmwg
PT0gdXJsKSByZXR1cm47CisgICAgICBsYXN0QnJvd3NlclVybCA9IHVybDsKKyAgICAgIGlmICgk
c25pZmZlci5oaXN0b3J5KSB7CisgICAgICAgIGlmIChyZXBsYWNlKSBoaXN0b3J5LnJlcGxhY2VT
dGF0ZShudWxsLCAnJywgdXJsKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgaGlzdG9yeS5w
dXNoU3RhdGUobnVsbCwgJycsIHVybCk7CisgICAgICAgICAgLy8gQ3JhenkgT3BlcmEgQnVnOiBo
dHRwOi8vbXkub3BlcmEuY29tL2NvbW11bml0eS9mb3J1bXMvdG9waWMuZG1sP2lkPTExODU0NjIK
KyAgICAgICAgICBiYXNlRWxlbWVudC5hdHRyKCdocmVmJywgYmFzZUVsZW1lbnQuYXR0cignaHJl
ZicpKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHJlcGxhY2UpIGxv
Y2F0aW9uLnJlcGxhY2UodXJsKTsKKyAgICAgICAgZWxzZSBsb2NhdGlvbi5ocmVmID0gdXJsOwor
ICAgICAgfQorICAgICAgcmV0dXJuIHNlbGY7CisgICAgLy8gZ2V0dGVyCisgICAgfSBlbHNlIHsK
KyAgICAgIC8vIHRoZSByZXBsYWNlbWVudCBpcyBhIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vYnVn
emlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQwNzE3MgorICAgICAgcmV0dXJuIGxv
Y2F0aW9uLmhyZWYucmVwbGFjZSgvJTI3L2csIiciKTsKKyAgICB9CisgIH07CisKKyAgdmFyIHVy
bENoYW5nZUxpc3RlbmVycyA9IFtdLAorICAgICAgdXJsQ2hhbmdlSW5pdCA9IGZhbHNlOworCisg
IGZ1bmN0aW9uIGZpcmVVcmxDaGFuZ2UoKSB7CisgICAgaWYgKGxhc3RCcm93c2VyVXJsID09IHNl
bGYudXJsKCkpIHJldHVybjsKKworICAgIGxhc3RCcm93c2VyVXJsID0gc2VsZi51cmwoKTsKKyAg
ICBmb3JFYWNoKHVybENoYW5nZUxpc3RlbmVycywgZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICAg
IGxpc3RlbmVyKHNlbGYudXJsKCkpOworICAgIH0pOworICB9CisKKyAgLyoqCisgICAqIEBuYW1l
IG5nLiRicm93c2VyI29uVXJsQ2hhbmdlCisgICAqIEBtZXRob2RPZiBuZy4kYnJvd3NlcgorICAg
KiBAVE9ETyh2b2p0YSk6IHJlZmFjdG9yIHRvIHVzZSBub2RlJ3Mgc3ludGF4IGZvciBldmVudHMK
KyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFJlZ2lzdGVyIGNhbGxiYWNrIGZ1bmN0aW9u
IHRoYXQgd2lsbCBiZSBjYWxsZWQsIHdoZW4gdXJsIGNoYW5nZXMuCisgICAqCisgICAqIEl0J3Mg
b25seSBjYWxsZWQgd2hlbiB0aGUgdXJsIGlzIGNoYW5nZWQgYnkgb3V0c2lkZSBvZiBhbmd1bGFy
OgorICAgKiAtIHVzZXIgdHlwZXMgZGlmZmVyZW50IHVybCBpbnRvIGFkZHJlc3MgYmFyCisgICAq
IC0gdXNlciBjbGlja3Mgb24gaGlzdG9yeSAoZm9yd2FyZC9iYWNrKSBidXR0b24KKyAgICogLSB1
c2VyIGNsaWNrcyBvbiBhIGxpbmsKKyAgICoKKyAgICogSXQncyBub3QgY2FsbGVkIHdoZW4gdXJs
IGlzIGNoYW5nZWQgYnkgJGJyb3dzZXIudXJsKCkgbWV0aG9kCisgICAqCisgICAqIFRoZSBsaXN0
ZW5lciBnZXRzIGNhbGxlZCB3aXRoIG5ldyB1cmwgYXMgcGFyYW1ldGVyLgorICAgKgorICAgKiBO
T1RFOiB0aGlzIGFwaSBpcyBpbnRlbmRlZCBmb3IgdXNlIG9ubHkgYnkgdGhlICRsb2NhdGlvbiBz
ZXJ2aWNlLiBQbGVhc2UgdXNlIHRoZQorICAgKiB7QGxpbmsgbmcuJGxvY2F0aW9uICRsb2NhdGlv
biBzZXJ2aWNlfSB0byBtb25pdG9yIHVybCBjaGFuZ2VzIGluIGFuZ3VsYXIgYXBwcy4KKyAgICoK
KyAgICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpfSBsaXN0ZW5lciBMaXN0ZW5lciBmdW5jdGlv
biB0byBiZSBjYWxsZWQgd2hlbiB1cmwgY2hhbmdlcy4KKyAgICogQHJldHVybiB7ZnVuY3Rpb24o
c3RyaW5nKX0gUmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBsaXN0ZW5lciBmbiAtIGhhbmR5IGlmIHRo
ZSBmbiBpcyBhbm9ueW1vdXMuCisgICAqLworICBzZWxmLm9uVXJsQ2hhbmdlID0gZnVuY3Rpb24o
Y2FsbGJhY2spIHsKKyAgICBpZiAoIXVybENoYW5nZUluaXQpIHsKKyAgICAgIC8vIFdlIGxpc3Rl
biBvbiBib3RoIChoYXNoY2hhbmdlL3BvcHN0YXRlKSB3aGVuIGF2YWlsYWJsZSwgYXMgc29tZSBi
cm93c2VycyAoZS5nLiBPcGVyYSkKKyAgICAgIC8vIGRvbid0IGZpcmUgcG9wc3RhdGUgd2hlbiB1
c2VyIGNoYW5nZSB0aGUgYWRkcmVzcyBiYXIgYW5kIGRvbid0IGZpcmUgaGFzaGNoYW5nZSB3aGVu
IHVybAorICAgICAgLy8gY2hhbmdlZCBieSBwdXNoL3JlcGxhY2VTdGF0ZQorCisgICAgICAvLyBo
dG1sNSBoaXN0b3J5IGFwaSAtIHBvcHN0YXRlIGV2ZW50CisgICAgICBpZiAoJHNuaWZmZXIuaGlz
dG9yeSkganFMaXRlKHdpbmRvdykuYmluZCgncG9wc3RhdGUnLCBmaXJlVXJsQ2hhbmdlKTsKKyAg
ICAgIC8vIGhhc2hjaGFuZ2UgZXZlbnQKKyAgICAgIGlmICgkc25pZmZlci5oYXNoY2hhbmdlKSBq
cUxpdGUod2luZG93KS5iaW5kKCdoYXNoY2hhbmdlJywgZmlyZVVybENoYW5nZSk7CisgICAgICAv
LyBwb2xsaW5nCisgICAgICBlbHNlIHNlbGYuYWRkUG9sbEZuKGZpcmVVcmxDaGFuZ2UpOworCisg
ICAgICB1cmxDaGFuZ2VJbml0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICB1cmxDaGFuZ2VMaXN0ZW5l
cnMucHVzaChjYWxsYmFjayk7CisgICAgcmV0dXJuIGNhbGxiYWNrOworICB9OworCisgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisgIC8vIE1pc2MgQVBJCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgLyoqCisgICAqIFJldHVybnMgY3VycmVudCA8
YmFzZSBocmVmPgorICAgKiAoYWx3YXlzIHJlbGF0aXZlIC0gd2l0aG91dCBkb21haW4pCisgICAq
CisgICAqIEByZXR1cm5zIHtzdHJpbmc9fQorICAgKi8KKyAgc2VsZi5iYXNlSHJlZiA9IGZ1bmN0
aW9uKCkgeworICAgIHZhciBocmVmID0gYmFzZUVsZW1lbnQuYXR0cignaHJlZicpOworICAgIHJl
dHVybiBocmVmID8gaHJlZi5yZXBsYWNlKC9eaHR0cHM/XDpcL1wvW15cL10qLywgJycpIDogJyc7
CisgIH07CisKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKyAgLy8gQ29va2llcyBBUEkKKyAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgdmFyIGxhc3RD
b29raWVzID0ge307CisgIHZhciBsYXN0Q29va2llU3RyaW5nID0gJyc7CisgIHZhciBjb29raWVQ
YXRoID0gc2VsZi5iYXNlSHJlZigpOworCisgIC8qKgorICAgKiBAbmFtZSBuZy4kYnJvd3NlciNj
b29raWVzCisgICAqIEBtZXRob2RPZiBuZy4kYnJvd3NlcgorICAgKgorICAgKiBAcGFyYW0ge3N0
cmluZz19IG5hbWUgQ29va2llIG5hbWUKKyAgICogQHBhcmFtIHtzdHJpbmc9fSB2YWx1ZSBDb2tr
aWUgdmFsdWUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFRoZSBjb29raWVzIG1ldGhv
ZCBwcm92aWRlcyBhICdwcml2YXRlJyBsb3cgbGV2ZWwgYWNjZXNzIHRvIGJyb3dzZXIgY29va2ll
cy4KKyAgICogSXQgaXMgbm90IG1lYW50IHRvIGJlIHVzZWQgZGlyZWN0bHksIHVzZSB0aGUgJGNv
b2tpZSBzZXJ2aWNlIGluc3RlYWQuCisgICAqCisgICAqIFRoZSByZXR1cm4gdmFsdWVzIHZhcnkg
ZGVwZW5kaW5nIG9uIHRoZSBhcmd1bWVudHMgdGhhdCB0aGUgbWV0aG9kIHdhcyBjYWxsZWQgd2l0
aCBhcyBmb2xsb3dzOgorICAgKiA8dWw+CisgICAqICAgPGxpPmNvb2tpZXMoKSAtPiBoYXNoIG9m
IGFsbCBjb29raWVzLCB0aGlzIGlzIE5PVCBhIGNvcHkgb2YgdGhlIGludGVybmFsIHN0YXRlLCBz
byBkbyBub3QgbW9kaWZ5IGl0PC9saT4KKyAgICogICA8bGk+Y29va2llcyhuYW1lLCB2YWx1ZSkg
LT4gc2V0IG5hbWUgdG8gdmFsdWUsIGlmIHZhbHVlIGlzIHVuZGVmaW5lZCBkZWxldGUgdGhlIGNv
b2tpZTwvbGk+CisgICAqICAgPGxpPmNvb2tpZXMobmFtZSkgLT4gdGhlIHNhbWUgYXMgKG5hbWUs
IHVuZGVmaW5lZCkgPT0gREVMRVRFUyAobm8gb25lIGNhbGxzIGl0IHJpZ2h0IG5vdyB0aGF0IHdh
eSk8L2xpPgorICAgKiA8L3VsPgorICAgKgorICAgKiBAcmV0dXJucyB7T2JqZWN0fSBIYXNoIG9m
IGFsbCBjb29raWVzIChpZiBjYWxsZWQgd2l0aG91dCBhbnkgcGFyYW1ldGVyKQorICAgKi8KKyAg
c2VsZi5jb29raWVzID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKKyAgICB2YXIgY29va2llTGVu
Z3RoLCBjb29raWVBcnJheSwgY29va2llLCBpLCBpbmRleDsKKworICAgIGlmIChuYW1lKSB7Cisg
ICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeworICAgICAgICByYXdEb2N1bWVudC5jb29r
aWUgPSBlc2NhcGUobmFtZSkgKyAiPTtwYXRoPSIgKyBjb29raWVQYXRoICsgIjtleHBpcmVzPVRo
dSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UIjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChpc1N0cmluZyh2YWx1ZSkpIHsKKyAgICAgICAgICBjb29raWVMZW5ndGggPSAocmF3RG9jdW1l
bnQuY29va2llID0gZXNjYXBlKG5hbWUpICsgJz0nICsgZXNjYXBlKHZhbHVlKSArICc7cGF0aD0n
ICsgY29va2llUGF0aCkubGVuZ3RoICsgMTsKKworICAgICAgICAgIC8vIHBlciBodHRwOi8vd3d3
LmlldGYub3JnL3JmYy9yZmMyMTA5LnR4dCBicm93c2VyIG11c3QgYWxsb3cgYXQgbWluaW11bToK
KyAgICAgICAgICAvLyAtIDMwMCBjb29raWVzCisgICAgICAgICAgLy8gLSAyMCBjb29raWVzIHBl
ciB1bmlxdWUgZG9tYWluCisgICAgICAgICAgLy8gLSA0MDk2IGJ5dGVzIHBlciBjb29raWUKKyAg
ICAgICAgICBpZiAoY29va2llTGVuZ3RoID4gNDA5NikgeworICAgICAgICAgICAgJGxvZy53YXJu
KCJDb29raWUgJyIrIG5hbWUgKyInIHBvc3NpYmx5IG5vdCBzZXQgb3Igb3ZlcmZsb3dlZCBiZWNh
dXNlIGl0IHdhcyB0b28gbGFyZ2UgKCIrCisgICAgICAgICAgICAgIGNvb2tpZUxlbmd0aCArICIg
PiA0MDk2IGJ5dGVzKSEiKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgaWYgKHJhd0RvY3VtZW50LmNvb2tpZSAhPT0gbGFzdENvb2tpZVN0cmlu
ZykgeworICAgICAgICBsYXN0Q29va2llU3RyaW5nID0gcmF3RG9jdW1lbnQuY29va2llOworICAg
ICAgICBjb29raWVBcnJheSA9IGxhc3RDb29raWVTdHJpbmcuc3BsaXQoIjsgIik7CisgICAgICAg
IGxhc3RDb29raWVzID0ge307CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb2tpZUFycmF5
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgY29va2llID0gY29va2llQXJyYXlbaV07CisgICAg
ICAgICAgaW5kZXggPSBjb29raWUuaW5kZXhPZignPScpOworICAgICAgICAgIGlmIChpbmRleCA+
IDApIHsgLy9pZ25vcmUgbmFtZWxlc3MgY29va2llcworICAgICAgICAgICAgdmFyIG5hbWUgPSB1
bmVzY2FwZShjb29raWUuc3Vic3RyaW5nKDAsIGluZGV4KSk7CisgICAgICAgICAgICAvLyB0aGUg
Zmlyc3QgdmFsdWUgdGhhdCBpcyBzZWVuIGZvciBhIGNvb2tpZSBpcyB0aGUgbW9zdAorICAgICAg
ICAgICAgLy8gc3BlY2lmaWMgb25lLiAgdmFsdWVzIGZvciB0aGUgc2FtZSBjb29raWUgbmFtZSB0
aGF0CisgICAgICAgICAgICAvLyBmb2xsb3cgYXJlIGZvciBsZXNzIHNwZWNpZmljIHBhdGhzLgor
ICAgICAgICAgICAgaWYgKGxhc3RDb29raWVzW25hbWVdID09PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgICAgICAgbGFzdENvb2tpZXNbbmFtZV0gPSB1bmVzY2FwZShjb29raWUuc3Vic3RyaW5nKGlu
ZGV4ICsgMSkpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
fQorICAgICAgcmV0dXJuIGxhc3RDb29raWVzOworICAgIH0KKyAgfTsKKworCisgIC8qKgorICAg
KiBAbmFtZSBuZy4kYnJvd3NlciNkZWZlcgorICAgKiBAbWV0aG9kT2YgbmcuJGJyb3dzZXIKKyAg
ICogQHBhcmFtIHtmdW5jdGlvbigpfSBmbiBBIGZ1bmN0aW9uLCB3aG8ncyBleGVjdXRpb24gc2hv
dWxkIGJlIGRlZmVyZWQuCisgICAqIEBwYXJhbSB7bnVtYmVyPX0gW2RlbGF5PTBdIG9mIG1pbGxp
c2Vjb25kcyB0byBkZWZlciB0aGUgZnVuY3Rpb24gZXhlY3V0aW9uLgorICAgKiBAcmV0dXJucyB7
Kn0gRGVmZXJJZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgdGFzayB2aWEgYCRicm93
c2VyLmRlZmVyLmNhbmNlbCgpYC4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEV4ZWN1
dGVzIGEgZm4gYXN5bmNocm9uaW91c2x5IHZpYSBgc2V0VGltZW91dChmbiwgZGVsYXkpYC4KKyAg
ICoKKyAgICogVW5saWtlIHdoZW4gY2FsbGluZyBgc2V0VGltZW91dGAgZGlyZWN0bHksIGluIHRl
c3QgdGhpcyBmdW5jdGlvbiBpcyBtb2NrZWQgYW5kIGluc3RlYWQgb2YgdXNpbmcKKyAgICogYHNl
dFRpbWVvdXRgIGluIHRlc3RzLCB0aGUgZm5zIGFyZSBxdWV1ZWQgaW4gYW4gYXJyYXksIHdoaWNo
IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGZsdXNoZWQKKyAgICogdmlhIGAkYnJvd3Nlci5kZWZl
ci5mbHVzaCgpYC4KKyAgICoKKyAgICovCisgIHNlbGYuZGVmZXIgPSBmdW5jdGlvbihmbiwgZGVs
YXkpIHsKKyAgICB2YXIgdGltZW91dElkOworICAgIG91dHN0YW5kaW5nUmVxdWVzdENvdW50Kys7
CisgICAgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgIGRlbGV0ZSBw
ZW5kaW5nRGVmZXJJZHNbdGltZW91dElkXTsKKyAgICAgIGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1
ZXN0KGZuKTsKKyAgICB9LCBkZWxheSB8fCAwKTsKKyAgICBwZW5kaW5nRGVmZXJJZHNbdGltZW91
dElkXSA9IHRydWU7CisgICAgcmV0dXJuIHRpbWVvdXRJZDsKKyAgfTsKKworCisgIC8qKgorICAg
KiBAbmFtZSBuZy4kYnJvd3NlciNkZWZlci5jYW5jZWwKKyAgICogQG1ldGhvZE9mIG5nLiRicm93
c2VyLmRlZmVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBDYW5jZWxzIGEgZGVmZXJl
ZCB0YXNrIGlkZW50aWZpZWQgd2l0aCBgZGVmZXJJZGAuCisgICAqCisgICAqIEBwYXJhbSB7Kn0g
ZGVmZXJJZCBUb2tlbiByZXR1cm5lZCBieSB0aGUgYCRicm93c2VyLmRlZmVyYCBmdW5jdGlvbi4K
KyAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB0YXNrIGhhc24n
dCBleGVjdXRlZCB5ZXQgYW5kIHdhcyBzdWNjZXNzZnVseSBjYW5jZWxlZC4KKyAgICovCisgIHNl
bGYuZGVmZXIuY2FuY2VsID0gZnVuY3Rpb24oZGVmZXJJZCkgeworICAgIGlmIChwZW5kaW5nRGVm
ZXJJZHNbZGVmZXJJZF0pIHsKKyAgICAgIGRlbGV0ZSBwZW5kaW5nRGVmZXJJZHNbZGVmZXJJZF07
CisgICAgICBjbGVhclRpbWVvdXQoZGVmZXJJZCk7CisgICAgICBjb21wbGV0ZU91dHN0YW5kaW5n
UmVxdWVzdChub29wKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7CisgIH07CisKK30KKworZnVuY3Rpb24gJEJyb3dzZXJQcm92aWRlcigpeworICB0aGlzLiRn
ZXQgPSBbJyR3aW5kb3cnLCAnJGxvZycsICckc25pZmZlcicsICckZG9jdW1lbnQnLAorICAgICAg
ZnVuY3Rpb24oICR3aW5kb3csICAgJGxvZywgICAkc25pZmZlciwgICAkZG9jdW1lbnQpeworICAg
ICAgICByZXR1cm4gbmV3IEJyb3dzZXIoJHdpbmRvdywgJGRvY3VtZW50LCAkbG9nLCAkc25pZmZl
cik7CisgICAgICB9XTsKK30KKworLyoqCisgKiBAbmdkb2Mgb2JqZWN0CisgKiBAbmFtZSBuZy4k
Y2FjaGVGYWN0b3J5CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBGYWN0b3J5IHRoYXQgY29uc3Ry
dWN0cyBjYWNoZSBvYmplY3RzLgorICoKKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVJZCBO
YW1lIG9yIGlkIG9mIHRoZSBuZXdseSBjcmVhdGVkIGNhY2hlLgorICogQHBhcmFtIHtvYmplY3Q9
fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0IHRoYXQgc3BlY2lmaWVzIHRoZSBjYWNoZSBiZWhhdmlv
ci4gUHJvcGVydGllczoKKyAqCisgKiAgIC0gYHtudW1iZXI9fWAgYGNhcGFjaXR5YCDigJQgdHVy
bnMgdGhlIGNhY2hlIGludG8gTFJVIGNhY2hlLgorICoKKyAqIEByZXR1cm5zIHtvYmplY3R9IE5l
d2x5IGNyZWF0ZWQgY2FjaGUgb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBzZXQgb2YgbWV0aG9k
czoKKyAqCisgKiAtIGB7b2JqZWN0fWAgYGluZm8oKWAg4oCUIFJldHVybnMgaWQsIHNpemUsIGFu
ZCBvcHRpb25zIG9mIGNhY2hlLgorICogLSBge3ZvaWR9YCBgcHV0KHtzdHJpbmd9IGtleSwgeyp9
IHZhbHVlKWAg4oCUIFB1dHMgYSBuZXcga2V5LXZhbHVlIHBhaXIgaW50byB0aGUgY2FjaGUuCisg
KiAtIGB7eyp9fWAgYGdldCh7c3RyaW5nfSBrZXkpYCDigJQgUmV0dXJucyBjYWNoZWQgdmFsdWUg
Zm9yIGBrZXlgIG9yIHVuZGVmaW5lZCBmb3IgY2FjaGUgbWlzcy4KKyAqIC0gYHt2b2lkfWAgYHJl
bW92ZSh7c3RyaW5nfSBrZXkpYCDigJQgUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gdGhl
IGNhY2hlLgorICogLSBge3ZvaWR9YCBgcmVtb3ZlQWxsKClgIOKAlCBSZW1vdmVzIGFsbCBjYWNo
ZWQgdmFsdWVzLgorICogLSBge3ZvaWR9YCBgZGVzdHJveSgpYCDigJQgUmVtb3ZlcyByZWZlcmVu
Y2VzIHRvIHRoaXMgY2FjaGUgZnJvbSAkY2FjaGVGYWN0b3J5LgorICoKKyAqLworZnVuY3Rpb24g
JENhY2hlRmFjdG9yeVByb3ZpZGVyKCkgeworCisgIHRoaXMuJGdldCA9IGZ1bmN0aW9uKCkgewor
ICAgIHZhciBjYWNoZXMgPSB7fTsKKworICAgIGZ1bmN0aW9uIGNhY2hlRmFjdG9yeShjYWNoZUlk
LCBvcHRpb25zKSB7CisgICAgICBpZiAoY2FjaGVJZCBpbiBjYWNoZXMpIHsKKyAgICAgICAgdGhy
b3cgRXJyb3IoJ2NhY2hlSWQgJyArIGNhY2hlSWQgKyAnIHRha2VuJyk7CisgICAgICB9CisKKyAg
ICAgIHZhciBzaXplID0gMCwKKyAgICAgICAgICBzdGF0cyA9IGV4dGVuZCh7fSwgb3B0aW9ucywg
e2lkOiBjYWNoZUlkfSksCisgICAgICAgICAgZGF0YSA9IHt9LAorICAgICAgICAgIGNhcGFjaXR5
ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5jYXBhY2l0eSkgfHwgTnVtYmVyLk1BWF9WQUxVRSwKKyAg
ICAgICAgICBscnVIYXNoID0ge30sCisgICAgICAgICAgZnJlc2hFbmQgPSBudWxsLAorICAgICAg
ICAgIHN0YWxlRW5kID0gbnVsbDsKKworICAgICAgcmV0dXJuIGNhY2hlc1tjYWNoZUlkXSA9IHsK
KworICAgICAgICBwdXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICAgICAgICB2YXIgbHJ1
RW50cnkgPSBscnVIYXNoW2tleV0gfHwgKGxydUhhc2hba2V5XSA9IHtrZXk6IGtleX0pOworCisg
ICAgICAgICAgcmVmcmVzaChscnVFbnRyeSk7CisKKyAgICAgICAgICBpZiAoaXNVbmRlZmluZWQo
dmFsdWUpKSByZXR1cm47CisgICAgICAgICAgaWYgKCEoa2V5IGluIGRhdGEpKSBzaXplKys7Cisg
ICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7CisKKyAgICAgICAgICBpZiAoc2l6ZSA+IGNhcGFj
aXR5KSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZShzdGFsZUVuZC5rZXkpOworICAgICAgICAg
IH0KKyAgICAgICAgfSwKKworCisgICAgICAgIGdldDogZnVuY3Rpb24oa2V5KSB7CisgICAgICAg
ICAgdmFyIGxydUVudHJ5ID0gbHJ1SGFzaFtrZXldOworCisgICAgICAgICAgaWYgKCFscnVFbnRy
eSkgcmV0dXJuOworCisgICAgICAgICAgcmVmcmVzaChscnVFbnRyeSk7CisKKyAgICAgICAgICBy
ZXR1cm4gZGF0YVtrZXldOworICAgICAgICB9LAorCisKKyAgICAgICAgcmVtb3ZlOiBmdW5jdGlv
bihrZXkpIHsKKyAgICAgICAgICB2YXIgbHJ1RW50cnkgPSBscnVIYXNoW2tleV07CisKKyAgICAg
ICAgICBpZiAoIWxydUVudHJ5KSByZXR1cm47CisKKyAgICAgICAgICBpZiAobHJ1RW50cnkgPT0g
ZnJlc2hFbmQpIGZyZXNoRW5kID0gbHJ1RW50cnkucDsKKyAgICAgICAgICBpZiAobHJ1RW50cnkg
PT0gc3RhbGVFbmQpIHN0YWxlRW5kID0gbHJ1RW50cnkubjsKKyAgICAgICAgICBsaW5rKGxydUVu
dHJ5Lm4sbHJ1RW50cnkucCk7CisKKyAgICAgICAgICBkZWxldGUgbHJ1SGFzaFtrZXldOworICAg
ICAgICAgIGRlbGV0ZSBkYXRhW2tleV07CisgICAgICAgICAgc2l6ZS0tOworICAgICAgICB9LAor
CisKKyAgICAgICAgcmVtb3ZlQWxsOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBkYXRhID0ge307
CisgICAgICAgICAgc2l6ZSA9IDA7CisgICAgICAgICAgbHJ1SGFzaCA9IHt9OworICAgICAgICAg
IGZyZXNoRW5kID0gc3RhbGVFbmQgPSBudWxsOworICAgICAgICB9LAorCisKKyAgICAgICAgZGVz
dHJveTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgZGF0YSA9IG51bGw7CisgICAgICAgICAgc3Rh
dHMgPSBudWxsOworICAgICAgICAgIGxydUhhc2ggPSBudWxsOworICAgICAgICAgIGRlbGV0ZSBj
YWNoZXNbY2FjaGVJZF07CisgICAgICAgIH0sCisKKworICAgICAgICBpbmZvOiBmdW5jdGlvbigp
IHsKKyAgICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBzdGF0cywge3NpemU6IHNpemV9KTsKKyAg
ICAgICAgfQorICAgICAgfTsKKworCisgICAgICAvKioKKyAgICAgICAqIG1ha2VzIHRoZSBgZW50
cnlgIHRoZSBmcmVzaEVuZCBvZiB0aGUgTFJVIGxpbmtlZCBsaXN0CisgICAgICAgKi8KKyAgICAg
IGZ1bmN0aW9uIHJlZnJlc2goZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5ICE9IGZyZXNoRW5k
KSB7CisgICAgICAgICAgaWYgKCFzdGFsZUVuZCkgeworICAgICAgICAgICAgc3RhbGVFbmQgPSBl
bnRyeTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHN0YWxlRW5kID09IGVudHJ5KSB7CisgICAgICAg
ICAgICBzdGFsZUVuZCA9IGVudHJ5Lm47CisgICAgICAgICAgfQorCisgICAgICAgICAgbGluayhl
bnRyeS5uLCBlbnRyeS5wKTsKKyAgICAgICAgICBsaW5rKGVudHJ5LCBmcmVzaEVuZCk7CisgICAg
ICAgICAgZnJlc2hFbmQgPSBlbnRyeTsKKyAgICAgICAgICBmcmVzaEVuZC5uID0gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgfQorCisKKyAgICAgIC8qKgorICAgICAgICogYmlkaXJlY3Rpb25hbGx5
IGxpbmtzIHR3byBlbnRyaWVzIG9mIHRoZSBMUlUgbGlua2VkIGxpc3QKKyAgICAgICAqLworICAg
ICAgZnVuY3Rpb24gbGluayhuZXh0RW50cnksIHByZXZFbnRyeSkgeworICAgICAgICBpZiAobmV4
dEVudHJ5ICE9IHByZXZFbnRyeSkgeworICAgICAgICAgIGlmIChuZXh0RW50cnkpIG5leHRFbnRy
eS5wID0gcHJldkVudHJ5OyAvL3Agc3RhbmRzIGZvciBwcmV2aW91cywgJ3ByZXYnIGRpZG4ndCBt
aW5pZnkKKyAgICAgICAgICBpZiAocHJldkVudHJ5KSBwcmV2RW50cnkubiA9IG5leHRFbnRyeTsg
Ly9uIHN0YW5kcyBmb3IgbmV4dCwgJ25leHQnIGRpZG4ndCBtaW5pZnkKKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0KKworCisgICAgY2FjaGVGYWN0b3J5LmluZm8gPSBmdW5jdGlvbigpIHsKKyAg
ICAgIHZhciBpbmZvID0ge307CisgICAgICBmb3JFYWNoKGNhY2hlcywgZnVuY3Rpb24oY2FjaGUs
IGNhY2hlSWQpIHsKKyAgICAgICAgaW5mb1tjYWNoZUlkXSA9IGNhY2hlLmluZm8oKTsKKyAgICAg
IH0pOworICAgICAgcmV0dXJuIGluZm87CisgICAgfTsKKworCisgICAgY2FjaGVGYWN0b3J5Lmdl
dCA9IGZ1bmN0aW9uKGNhY2hlSWQpIHsKKyAgICAgIHJldHVybiBjYWNoZXNbY2FjaGVJZF07Cisg
ICAgfTsKKworCisgICAgcmV0dXJuIGNhY2hlRmFjdG9yeTsKKyAgfTsKK30KKworLyoqCisgKiBA
bmdkb2Mgb2JqZWN0CisgKiBAbmFtZSBuZy4kdGVtcGxhdGVDYWNoZQorICoKKyAqIEBkZXNjcmlw
dGlvbgorICogQ2FjaGUgdXNlZCBmb3Igc3RvcmluZyBodG1sIHRlbXBsYXRlcy4KKyAqCisgKiBT
ZWUge0BsaW5rIG5nLiRjYWNoZUZhY3RvcnkgJGNhY2hlRmFjdG9yeX0uCisgKgorICovCitmdW5j
dGlvbiAkVGVtcGxhdGVDYWNoZVByb3ZpZGVyKCkgeworICB0aGlzLiRnZXQgPSBbJyRjYWNoZUZh
Y3RvcnknLCBmdW5jdGlvbigkY2FjaGVGYWN0b3J5KSB7CisgICAgcmV0dXJuICRjYWNoZUZhY3Rv
cnkoJ3RlbXBsYXRlcycpOworICB9XTsKK30KKworLyogISBWQVJJQUJMRS9GVU5DVElPTiBOQU1J
TkcgQ09OVkVOVElPTlMgVEhBVCBBUFBMWSBUTyBUSElTIEZJTEUhCisgKgorICogRE9NLXJlbGF0
ZWQgdmFyaWFibGVzOgorICoKKyAqIC0gIm5vZGUiIC0gRE9NIE5vZGUKKyAqIC0gImVsZW1lbnQi
IC0gRE9NIEVsZW1lbnQgb3IgTm9kZQorICogLSAiJG5vZGUiIG9yICIkZWxlbWVudCIgLSBqcUxp
dGUtd3JhcHBlZCBub2RlIG9yIGVsZW1lbnQKKyAqCisgKgorICogQ29tcGlsZXIgcmVsYXRlZCBz
dHVmZjoKKyAqCisgKiAtICJsaW5rRm4iIC0gbGlua2luZyBmbiBvZiBhIHNpbmdsZSBkaXJlY3Rp
dmUKKyAqIC0gIm5vZGVMaW5rRm4iIC0gZnVuY3Rpb24gdGhhdCBhZ2dyZWdhdGVzIGFsbCBsaW5r
aW5nIGZucyBmb3IgYSBwYXJ0aWN1bGFyIG5vZGUKKyAqIC0gImNoaWxkTGlua0ZuIiAtICBmdW5j
dGlvbiB0aGF0IGFnZ3JlZ2F0ZXMgYWxsIGxpbmtpbmcgZm5zIGZvciBjaGlsZCBub2RlcyBvZiBh
IHBhcnRpY3VsYXIgbm9kZQorICogLSAiY29tcG9zaXRlTGlua0ZuIiAtIGZ1bmN0aW9uIHRoYXQg
YWdncmVnYXRlcyBhbGwgbGlua2luZyBmbnMgZm9yIGEgY29tcGlsYXRpb24gcm9vdCAobm9kZUxp
c3QpCisgKi8KKworCit2YXIgTk9OX0FTU0lHTkFCTEVfTU9ERUxfRVhQUkVTU0lPTiA9ICdOb24t
YXNzaWduYWJsZSBtb2RlbCBleHByZXNzaW9uOiAnOworCisKKy8qKgorICogQG5nZG9jIGZ1bmN0
aW9uCisgKiBAbmFtZSBuZy4kY29tcGlsZQorICogQGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0
aW9uCisgKiBDb21waWxlcyBhIHBpZWNlIG9mIEhUTUwgc3RyaW5nIG9yIERPTSBpbnRvIGEgdGVt
cGxhdGUgYW5kIHByb2R1Y2VzIGEgdGVtcGxhdGUgZnVuY3Rpb24sIHdoaWNoCisgKiBjYW4gdGhl
biBiZSB1c2VkIHRvIGxpbmsge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUgc2NvcGV9IGFuZCB0
aGUgdGVtcGxhdGUgdG9nZXRoZXIuCisgKgorICogVGhlIGNvbXBpbGF0aW9uIGlzIGEgcHJvY2Vz
cyBvZiB3YWxraW5nIHRoZSBET00gdHJlZSBhbmQgdHJ5aW5nIHRvIG1hdGNoIERPTSBlbGVtZW50
cyB0bworICoge0BsaW5rIG5nLiRjb21waWxlUHJvdmlkZXIjZGlyZWN0aXZlIGRpcmVjdGl2ZXN9
LiBGb3IgZWFjaCBtYXRjaCBpdAorICogZXhlY3V0ZXMgY29ycmVzcG9uZGluZyB0ZW1wbGF0ZSBm
dW5jdGlvbiBhbmQgY29sbGVjdHMgdGhlCisgKiBpbnN0YW5jZSBmdW5jdGlvbnMgaW50byBhIHNp
bmdsZSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCBpcyB0aGVuIHJldHVybmVkLgorICoKKyAqIFRo
ZSB0ZW1wbGF0ZSBmdW5jdGlvbiBjYW4gdGhlbiBiZSB1c2VkIG9uY2UgdG8gcHJvZHVjZSB0aGUg
dmlldyBvciBhcyBpdCBpcyB0aGUgY2FzZSB3aXRoCisgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5n
UmVwZWF0IHJlcGVhdGVyfSBtYW55LXRpbWVzLCBpbiB3aGljaAorICogY2FzZSBlYWNoIGNhbGwg
cmVzdWx0cyBpbiBhIHZpZXcgdGhhdCBpcyBhIERPTSBjbG9uZSBvZiB0aGUgb3JpZ2luYWwgdGVt
cGxhdGUuCisgKgorIDxkb2M6ZXhhbXBsZSBtb2R1bGU9ImNvbXBpbGUiPgorICAgPGRvYzpzb3Vy
Y2U+CisgICAgPHNjcmlwdD4KKyAgICAgIC8vIGRlY2xhcmUgYSBuZXcgbW9kdWxlLCBhbmQgaW5q
ZWN0IHRoZSAkY29tcGlsZVByb3ZpZGVyCisgICAgICBhbmd1bGFyLm1vZHVsZSgnY29tcGlsZScs
IFtdLCBmdW5jdGlvbigkY29tcGlsZVByb3ZpZGVyKSB7CisgICAgICAgIC8vIGNvbmZpZ3VyZSBu
ZXcgJ2NvbXBpbGUnIGRpcmVjdGl2ZSBieSBwYXNzaW5nIGEgZGlyZWN0aXZlCisgICAgICAgIC8v
IGZhY3RvcnkgZnVuY3Rpb24uIFRoZSBmYWN0b3J5IGZ1bmN0aW9uIGluamVjdHMgdGhlICckY29t
cGlsZScKKyAgICAgICAgJGNvbXBpbGVQcm92aWRlci5kaXJlY3RpdmUoJ2NvbXBpbGUnLCBmdW5j
dGlvbigkY29tcGlsZSkgeworICAgICAgICAgIC8vIGRpcmVjdGl2ZSBmYWN0b3J5IGNyZWF0ZXMg
YSBsaW5rIGZ1bmN0aW9uCisgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50
LCBhdHRycykgeworICAgICAgICAgICAgc2NvcGUuJHdhdGNoKAorICAgICAgICAgICAgICBmdW5j
dGlvbihzY29wZSkgeworICAgICAgICAgICAgICAgICAvLyB3YXRjaCB0aGUgJ2NvbXBpbGUnIGV4
cHJlc3Npb24gZm9yIGNoYW5nZXMKKyAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuJGV2YWwo
YXR0cnMuY29tcGlsZSk7CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9u
KHZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgJ2NvbXBpbGUnIGV4cHJlc3Np
b24gY2hhbmdlcworICAgICAgICAgICAgICAgIC8vIGFzc2lnbiBpdCBpbnRvIHRoZSBjdXJyZW50
IERPTQorICAgICAgICAgICAgICAgIGVsZW1lbnQuaHRtbCh2YWx1ZSk7CisKKyAgICAgICAgICAg
ICAgICAvLyBjb21waWxlIHRoZSBuZXcgRE9NIGFuZCBsaW5rIGl0IHRvIHRoZSBjdXJyZW50Cisg
ICAgICAgICAgICAgICAgLy8gc2NvcGUuCisgICAgICAgICAgICAgICAgLy8gTk9URTogd2Ugb25s
eSBjb21waWxlIC5jaGlsZE5vZGVzIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAvLyB3ZSBkb24n
dCBnZXQgaW50byBpbmZpbml0ZSBsb29wIGNvbXBpbGluZyBvdXJzZWx2ZXMKKyAgICAgICAgICAg
ICAgICAkY29tcGlsZShlbGVtZW50LmNvbnRlbnRzKCkpKHNjb3BlKTsKKyAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgKTsKKyAgICAgICAgICB9OworICAgICAgICB9KQorICAgICAgfSk7CisK
KyAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7CisgICAgICAgICRzY29wZS5uYW1lID0gJ0Fu
Z3VsYXInOworICAgICAgICAkc2NvcGUuaHRtbCA9ICdIZWxsbyB7e25hbWV9fSc7CisgICAgICB9
CisgICAgPC9zY3JpcHQ+CisgICAgPGRpdiBuZy1jb250cm9sbGVyPSJDdHJsIj4KKyAgICAgIDxp
bnB1dCBuZy1tb2RlbD0ibmFtZSI+IDxicj4KKyAgICAgIDx0ZXh0YXJlYSBuZy1tb2RlbD0iaHRt
bCI+PC90ZXh0YXJlYT4gPGJyPgorICAgICAgPGRpdiBjb21waWxlPSJodG1sIj48L2Rpdj4KKyAg
ICA8L2Rpdj4KKyAgIDwvZG9jOnNvdXJjZT4KKyAgIDxkb2M6c2NlbmFyaW8+CisgICAgIGl0KCdz
aG91bGQgYXV0byBjb21waWxlJywgZnVuY3Rpb24oKSB7CisgICAgICAgZXhwZWN0KGVsZW1lbnQo
J2Rpdltjb21waWxlXScpLnRleHQoKSkudG9CZSgnSGVsbG8gQW5ndWxhcicpOworICAgICAgIGlu
cHV0KCdodG1sJykuZW50ZXIoJ3t7bmFtZX19IScpOworICAgICAgIGV4cGVjdChlbGVtZW50KCdk
aXZbY29tcGlsZV0nKS50ZXh0KCkpLnRvQmUoJ0FuZ3VsYXIhJyk7CisgICAgIH0pOworICAgPC9k
b2M6c2NlbmFyaW8+CisgPC9kb2M6ZXhhbXBsZT4KKworICoKKyAqCisgKiBAcGFyYW0ge3N0cmlu
Z3xET01FbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgb3IgSFRNTCBzdHJpbmcgdG8gY29tcGlsZSBp
bnRvIGEgdGVtcGxhdGUgZnVuY3Rpb24uCisgKiBAcGFyYW0ge2Z1bmN0aW9uKGFuZ3VsYXIuU2Nv
cGVbLCBjbG9uZUF0dGFjaEZuXX0gdHJhbnNjbHVkZSBmdW5jdGlvbiBhdmFpbGFibGUgdG8gZGly
ZWN0aXZlcy4KKyAqIEBwYXJhbSB7bnVtYmVyfSBtYXhQcmlvcml0eSBvbmx5IGFwcGx5IGRpcmVj
dGl2ZXMgbG93ZXIgdGhlbiBnaXZlbiBwcmlvcml0eSAoT25seSBlZmZlY3RzIHRoZQorICogICAg
ICAgICAgICAgICAgIHJvb3QgZWxlbWVudChzKSwgbm90IHRoZWlyIGNoaWxkcmVuKQorICogQHJl
dHVybnMge2Z1bmN0aW9uKHNjb3BlWywgY2xvbmVBdHRhY2hGbl0pfSBhIGxpbmsgZnVuY3Rpb24g
d2hpY2ggaXMgdXNlZCB0byBiaW5kIHRlbXBsYXRlCisgKiAoYSBET00gZWxlbWVudC90cmVlKSB0
byBhIHNjb3BlLiBXaGVyZToKKyAqCisgKiAgKiBgc2NvcGVgIC0gQSB7QGxpbmsgbmcuJHJvb3RT
Y29wZS5TY29wZSBTY29wZX0gdG8gYmluZCB0by4KKyAqICAqIGBjbG9uZUF0dGFjaEZuYCAtIElm
IGBjbG9uZUF0dGFjaEZuYCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgbGluayBmdW5jdGlvbiB3aWxs
IGNsb25lIHRoZQorICogICAgICAgICAgICAgICBgdGVtcGxhdGVgIGFuZCBjYWxsIHRoZSBgY2xv
bmVBdHRhY2hGbmAgZnVuY3Rpb24gYWxsb3dpbmcgdGhlIGNhbGxlciB0byBhdHRhY2ggdGhlCisg
KiAgICAgICAgICAgICAgIGNsb25lZCBlbGVtZW50cyB0byB0aGUgRE9NIGRvY3VtZW50IGF0IHRo
ZSBhcHByb3ByaWF0ZSBwbGFjZS4gVGhlIGBjbG9uZUF0dGFjaEZuYCBpcworICogICAgICAgICAg
ICAgICBjYWxsZWQgYXM6IDxicj4gYGNsb25lQXR0YWNoRm4oY2xvbmVkRWxlbWVudCwgc2NvcGUp
YCB3aGVyZToKKyAqCisgKiAgICAgICogYGNsb25lZEVsZW1lbnRgIC0gaXMgYSBjbG9uZSBvZiB0
aGUgb3JpZ2luYWwgYGVsZW1lbnRgIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4KKyAqICAgICAg
KiBgc2NvcGVgIC0gaXMgdGhlIGN1cnJlbnQgc2NvcGUgd2l0aCB3aGljaCB0aGUgbGlua2luZyBm
dW5jdGlvbiBpcyB3b3JraW5nIHdpdGguCisgKgorICogQ2FsbGluZyB0aGUgbGlua2luZyBmdW5j
dGlvbiByZXR1cm5zIHRoZSBlbGVtZW50IG9mIHRoZSB0ZW1wbGF0ZS4gSXQgaXMgZWl0aGVyIHRo
ZSBvcmlnaW5hbCBlbGVtZW50CisgKiBwYXNzZWQgaW4sIG9yIHRoZSBjbG9uZSBvZiB0aGUgZWxl
bWVudCBpZiB0aGUgYGNsb25lQXR0YWNoRm5gIGlzIHByb3ZpZGVkLgorICoKKyAqIEFmdGVyIGxp
bmtpbmcgdGhlIHZpZXcgaXMgbm90IHVwZGF0ZWQgdW50aWwgYWZ0ZXIgYSBjYWxsIHRvICRkaWdl
c3Qgd2hpY2ggdHlwaWNhbGx5IGlzIGRvbmUgYnkKKyAqIEFuZ3VsYXIgYXV0b21hdGljYWxseS4K
KyAqCisgKiBJZiB5b3UgbmVlZCBhY2Nlc3MgdG8gdGhlIGJvdW5kIHZpZXcsIHRoZXJlIGFyZSB0
d28gd2F5cyB0byBkbyBpdDoKKyAqCisgKiAtIElmIHlvdSBhcmUgbm90IGFza2luZyB0aGUgbGlu
a2luZyBmdW5jdGlvbiB0byBjbG9uZSB0aGUgdGVtcGxhdGUsIGNyZWF0ZSB0aGUgRE9NIGVsZW1l
bnQocykKKyAqICAgYmVmb3JlIHlvdSBzZW5kIHRoZW0gdG8gdGhlIGNvbXBpbGVyIGFuZCBrZWVw
IHRoaXMgcmVmZXJlbmNlIGFyb3VuZC4KKyAqICAgPHByZT4KKyAqICAgICB2YXIgZWxlbWVudCA9
ICRjb21waWxlKCc8cD57e3RvdGFsfX08L3A+Jykoc2NvcGUpOworICogICA8L3ByZT4KKyAqCisg
KiAtIGlmIG9uIHRoZSBvdGhlciBoYW5kLCB5b3UgbmVlZCB0aGUgZWxlbWVudCB0byBiZSBjbG9u
ZWQsIHRoZSB2aWV3IHJlZmVyZW5jZSBmcm9tIHRoZSBvcmlnaW5hbAorICogICBleGFtcGxlIHdv
dWxkIG5vdCBwb2ludCB0byB0aGUgY2xvbmUsIGJ1dCByYXRoZXIgdG8gdGhlIG9yaWdpbmFsIHRl
bXBsYXRlIHRoYXQgd2FzIGNsb25lZC4gSW4KKyAqICAgdGhpcyBjYXNlLCB5b3UgY2FuIGFjY2Vz
cyB0aGUgY2xvbmUgdmlhIHRoZSBjbG9uZUF0dGFjaEZuOgorICogICA8cHJlPgorICogICAgIHZh
ciB0ZW1wbGF0ZUhUTUwgPSBhbmd1bGFyLmVsZW1lbnQoJzxwPnt7dG90YWx9fTwvcD4nKSwKKyAq
ICAgICAgICAgc2NvcGUgPSAuLi4uOworICoKKyAqICAgICB2YXIgY2xvbmVkRWxlbWVudCA9ICRj
b21waWxlKHRlbXBsYXRlSFRNTCkoc2NvcGUsIGZ1bmN0aW9uKGNsb25lZEVsZW1lbnQsIHNjb3Bl
KSB7CisgKiAgICAgICAvL2F0dGFjaCB0aGUgY2xvbmUgdG8gRE9NIGRvY3VtZW50IGF0IHRoZSBy
aWdodCBwbGFjZQorICogICAgIH0pOworICoKKyAqICAgICAvL25vdyB3ZSBoYXZlIHJlZmVyZW5j
ZSB0byB0aGUgY2xvbmVkIERPTSB2aWEgYGNsb25lYAorICogICA8L3ByZT4KKyAqCisgKgorICog
Rm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgY29tcGlsZXIgd29ya3MsIHNlZSB0aGUKKyAqIHtA
bGluayBndWlkZS9jb21waWxlciBBbmd1bGFyIEhUTUwgQ29tcGlsZXJ9IHNlY3Rpb24gb2YgdGhl
IERldmVsb3BlciBHdWlkZS4KKyAqLworCisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBu
YW1lIG5nLiRjb21waWxlUHJvdmlkZXIKKyAqIEBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlv
bgorICovCiskQ29tcGlsZVByb3ZpZGVyLiRpbmplY3QgPSBbJyRwcm92aWRlJ107CitmdW5jdGlv
biAkQ29tcGlsZVByb3ZpZGVyKCRwcm92aWRlKSB7CisgIHZhciBoYXNEaXJlY3RpdmVzID0ge30s
CisgICAgICBTdWZmaXggPSAnRGlyZWN0aXZlJywKKyAgICAgIENPTU1FTlRfRElSRUNUSVZFX1JF
R0VYUCA9IC9eXHMqZGlyZWN0aXZlXDpccyooW1xkXHdcLV9dKylccysoLiopJC8sCisgICAgICBD
TEFTU19ESVJFQ1RJVkVfUkVHRVhQID0gLygoW1xkXHdcLV9dKykoPzpcOihbXjtdKykpPzs/KS8s
CisgICAgICBNVUxUSV9ST09UX1RFTVBMQVRFX0VSUk9SID0gJ1RlbXBsYXRlIG11c3QgaGF2ZSBl
eGFjdGx5IG9uZSByb290IGVsZW1lbnQuIHdhczogJywKKyAgICAgIHVybFNhbml0aXphdGlvbldo
aXRlbGlzdCA9IC9eXHMqKGh0dHBzP3xmdHB8bWFpbHRvfGZpbGUpOi87CisKKworICAvKioKKyAg
ICogQG5nZG9jIGZ1bmN0aW9uCisgICAqIEBuYW1lIG5nLiRjb21waWxlUHJvdmlkZXIjZGlyZWN0
aXZlCisgICAqIEBtZXRob2RPZiBuZy4kY29tcGlsZVByb3ZpZGVyCisgICAqIEBmdW5jdGlvbgor
ICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogUmVnaXN0ZXIgYSBuZXcgZGlyZWN0aXZlcyB3
aXRoIHRoZSBjb21waWxlci4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBv
ZiB0aGUgZGlyZWN0aXZlIGluIGNhbWVsLWNhc2UuIChpZSA8Y29kZT5uZ0JpbmQ8L2NvZGU+IHdo
aWNoIHdpbGwgbWF0Y2ggYXMKKyAgICogICAgICAgICAgICAgICAgPGNvZGU+bmctYmluZDwvY29k
ZT4pLgorICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBkaXJlY3RpdmVGYWN0b3J5IEFuIGluamVjdGFi
bGUgZGlyZWN0aXZlIGZhY3Ryb3kgZnVuY3Rpb24uIFNlZSB7QGxpbmsgZ3VpZGUvZGlyZWN0aXZl
fSBmb3IgbW9yZQorICAgKiAgICAgICAgICAgICAgICBpbmZvLgorICAgKiBAcmV0dXJucyB7bmcu
JGNvbXBpbGVQcm92aWRlcn0gU2VsZiBmb3IgY2hhaW5pbmcuCisgICAqLworICAgdGhpcy5kaXJl
Y3RpdmUgPSBmdW5jdGlvbiByZWdpc3RlckRpcmVjdGl2ZShuYW1lLCBkaXJlY3RpdmVGYWN0b3J5
KSB7CisgICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB7CisgICAgICBhc3NlcnRBcmcoZGlyZWN0aXZl
RmFjdG9yeSwgJ2RpcmVjdGl2ZScpOworICAgICAgaWYgKCFoYXNEaXJlY3RpdmVzLmhhc093blBy
b3BlcnR5KG5hbWUpKSB7CisgICAgICAgIGhhc0RpcmVjdGl2ZXNbbmFtZV0gPSBbXTsKKyAgICAg
ICAgJHByb3ZpZGUuZmFjdG9yeShuYW1lICsgU3VmZml4LCBbJyRpbmplY3RvcicsICckZXhjZXB0
aW9uSGFuZGxlcicsCisgICAgICAgICAgZnVuY3Rpb24oJGluamVjdG9yLCAkZXhjZXB0aW9uSGFu
ZGxlcikgeworICAgICAgICAgICAgdmFyIGRpcmVjdGl2ZXMgPSBbXTsKKyAgICAgICAgICAgIGZv
ckVhY2goaGFzRGlyZWN0aXZlc1tuYW1lXSwgZnVuY3Rpb24oZGlyZWN0aXZlRmFjdG9yeSkgewor
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHZhciBkaXJlY3RpdmUgPSAkaW5q
ZWN0b3IuaW52b2tlKGRpcmVjdGl2ZUZhY3RvcnkpOworICAgICAgICAgICAgICAgIGlmIChpc0Z1
bmN0aW9uKGRpcmVjdGl2ZSkpIHsKKyAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHsgY29t
cGlsZTogdmFsdWVGbihkaXJlY3RpdmUpIH07CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgh
ZGlyZWN0aXZlLmNvbXBpbGUgJiYgZGlyZWN0aXZlLmxpbmspIHsKKyAgICAgICAgICAgICAgICAg
IGRpcmVjdGl2ZS5jb21waWxlID0gdmFsdWVGbihkaXJlY3RpdmUubGluayk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5wcmlvcml0eSA9IGRpcmVjdGl2ZS5w
cmlvcml0eSB8fCAwOworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5uYW1lID0gZGlyZWN0aXZl
Lm5hbWUgfHwgbmFtZTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmUucmVxdWlyZSA9IGRpcmVj
dGl2ZS5yZXF1aXJlIHx8IChkaXJlY3RpdmUuY29udHJvbGxlciAmJiBkaXJlY3RpdmUubmFtZSk7
CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gZGlyZWN0aXZlLnJlc3RyaWN0
IHx8ICdBJzsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLnB1c2goZGlyZWN0aXZlKTsKKyAg
ICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICRleGNlcHRpb25IYW5k
bGVyKGUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJl
dHVybiBkaXJlY3RpdmVzOworICAgICAgICAgIH1dKTsKKyAgICAgIH0KKyAgICAgIGhhc0RpcmVj
dGl2ZXNbbmFtZV0ucHVzaChkaXJlY3RpdmVGYWN0b3J5KTsKKyAgICB9IGVsc2UgeworICAgICAg
Zm9yRWFjaChuYW1lLCByZXZlcnNlUGFyYW1zKHJlZ2lzdGVyRGlyZWN0aXZlKSk7CisgICAgfQor
ICAgIHJldHVybiB0aGlzOworICB9OworCisKKyAgLyoqCisgICAqIEBuZ2RvYyBmdW5jdGlvbgor
ICAgKiBAbmFtZSBuZy4kY29tcGlsZVByb3ZpZGVyI3VybFNhbml0aXphdGlvbldoaXRlbGlzdAor
ICAgKiBAbWV0aG9kT2YgbmcuJGNvbXBpbGVQcm92aWRlcgorICAgKiBAZnVuY3Rpb24KKyAgICoK
KyAgICogQGRlc2NyaXB0aW9uCisgICAqIFJldHJpZXZlcyBvciBvdmVycmlkZXMgdGhlIGRlZmF1
bHQgcmVndWxhciBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCBmb3Igd2hpdGVsaXN0aW5nIG9mIHNh
ZmUKKyAgICogdXJscyBkdXJpbmcgYVtocmVmXSBzYW5pdGl6YXRpb24uCisgICAqCisgICAqIFRo
ZSBzYW5pdGl6YXRpb24gaXMgYSBzZWN1cml0eSBtZWFzdXJlIGFpbWVkIGF0IHByZXZlbnQgWFNT
IGF0dGFja3MgdmlhIGh0bWwgbGlua3MuCisgICAqCisgICAqIEFueSB1cmwgYWJvdXQgdG8gYmUg
YXNzaWduZWQgdG8gYVtocmVmXSB2aWEgZGF0YS1iaW5kaW5nIGlzIGZpcnN0IG5vcm1hbGl6ZWQg
YW5kIHR1cm5lZCBpbnRvIGFuCisgICAqIGFic29sdXRlIHVybC4gQWZ0ZXJ3YXJkcyB0aGUgdXJs
IGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgYHVybFNhbml0aXphdGlvbldoaXRlbGlzdGAgcmVndWxh
cgorICAgKiBleHByZXNzaW9uLiBJZiBhIG1hdGNoIGlzIGZvdW5kIHRoZSBvcmlnaW5hbCB1cmwg
aXMgd3JpdHRlbiBpbnRvIHRoZSBkb20uIE90aGVyd2lzZSB0aGUKKyAgICogYWJzb2x1dGUgdXJs
IGlzIHByZWZpeGVkIHdpdGggYCd1bnNhZmU6J2Agc3RyaW5nIGFuZCBvbmx5IHRoZW4gaXQgaXMg
d3JpdHRlbiBpbnRvIHRoZSBET00uCisgICAqCisgICAqIEBwYXJhbSB7UmVnRXhwPX0gcmVnZXhw
IE5ldyByZWdleHAgdG8gd2hpdGVsaXN0IHVybHMgd2l0aC4KKyAgICogQHJldHVybnMge1JlZ0V4
cHxuZy4kY29tcGlsZVByb3ZpZGVyfSBDdXJyZW50IFJlZ0V4cCBpZiBjYWxsZWQgd2l0aG91dCB2
YWx1ZSBvciBzZWxmIGZvcgorICAgKiAgICBjaGFpbmluZyBvdGhlcndpc2UuCisgICAqLworICB0
aGlzLnVybFNhbml0aXphdGlvbldoaXRlbGlzdCA9IGZ1bmN0aW9uKHJlZ2V4cCkgeworICAgIGlm
IChpc0RlZmluZWQocmVnZXhwKSkgeworICAgICAgdXJsU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0g
cmVnZXhwOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICAgIHJldHVybiB1cmxTYW5pdGl6
YXRpb25XaGl0ZWxpc3Q7CisgIH07CisKKworICB0aGlzLiRnZXQgPSBbCisgICAgICAgICAgICAn
JGluamVjdG9yJywgJyRpbnRlcnBvbGF0ZScsICckZXhjZXB0aW9uSGFuZGxlcicsICckaHR0cCcs
ICckdGVtcGxhdGVDYWNoZScsICckcGFyc2UnLAorICAgICAgICAgICAgJyRjb250cm9sbGVyJywg
JyRyb290U2NvcGUnLCAnJGRvY3VtZW50JywKKyAgICBmdW5jdGlvbigkaW5qZWN0b3IsICAgJGlu
dGVycG9sYXRlLCAgICRleGNlcHRpb25IYW5kbGVyLCAgICRodHRwLCAgICR0ZW1wbGF0ZUNhY2hl
LCAgICRwYXJzZSwKKyAgICAgICAgICAgICAkY29udHJvbGxlciwgICAkcm9vdFNjb3BlLCAgICRk
b2N1bWVudCkgeworCisgICAgdmFyIEF0dHJpYnV0ZXMgPSBmdW5jdGlvbihlbGVtZW50LCBhdHRy
KSB7CisgICAgICB0aGlzLiQkZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICB0aGlzLiRhdHRyID0g
YXR0ciB8fCB7fTsKKyAgICB9OworCisgICAgQXR0cmlidXRlcy5wcm90b3R5cGUgPSB7CisgICAg
ICAkbm9ybWFsaXplOiBkaXJlY3RpdmVOb3JtYWxpemUsCisKKworICAgICAgLyoqCisgICAgICAg
KiBTZXQgYSBub3JtYWxpemVkIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCBpbiBhIHdheSBzdWNo
IHRoYXQgYWxsIGRpcmVjdGl2ZXMKKyAgICAgICAqIGNhbiBzaGFyZSB0aGUgYXR0cmlidXRlLiBU
aGlzIGZ1bmN0aW9uIHByb3Blcmx5IGhhbmRsZXMgYm9vbGVhbiBhdHRyaWJ1dGVzLgorICAgICAg
ICogQHBhcmFtIHtzdHJpbmd9IGtleSBOb3JtYWxpemVkIGtleS4gKGllIG5nQXR0cmlidXRlKQor
ICAgICAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4g
SWYgYG51bGxgIGF0dHJpYnV0ZSB3aWxsIGJlIGRlbGV0ZWQuCisgICAgICAgKiBAcGFyYW0ge2Jv
b2xlYW49fSB3cml0ZUF0dHIgSWYgZmFsc2UsIGRvZXMgbm90IHdyaXRlIHRoZSB2YWx1ZSB0byBE
T00gZWxlbWVudCBhdHRyaWJ1dGUuCisgICAgICAgKiAgICAgRGVmYXVsdHMgdG8gdHJ1ZS4KKyAg
ICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gYXR0ck5hbWUgT3B0aW9uYWwgbm9uZSBub3JtYWxpemVk
IG5hbWUuIERlZmF1bHRzIHRvIGtleS4KKyAgICAgICAqLworICAgICAgJHNldDogZnVuY3Rpb24o
a2V5LCB2YWx1ZSwgd3JpdGVBdHRyLCBhdHRyTmFtZSkgeworICAgICAgICB2YXIgYm9vbGVhbktl
eSA9IGdldEJvb2xlYW5BdHRyTmFtZSh0aGlzLiQkZWxlbWVudFswXSwga2V5KSwKKyAgICAgICAg
ICAgICQkb2JzZXJ2ZXJzID0gdGhpcy4kJG9ic2VydmVycywKKyAgICAgICAgICAgIG5vcm1hbGl6
ZWRWYWw7CisKKyAgICAgICAgaWYgKGJvb2xlYW5LZXkpIHsKKyAgICAgICAgICB0aGlzLiQkZWxl
bWVudC5wcm9wKGtleSwgdmFsdWUpOworICAgICAgICAgIGF0dHJOYW1lID0gYm9vbGVhbktleTsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlOworCisgICAgICAgIC8vIHRy
YW5zbGF0ZSBub3JtYWxpemVkIGtleSB0byBhY3R1YWwga2V5CisgICAgICAgIGlmIChhdHRyTmFt
ZSkgeworICAgICAgICAgIHRoaXMuJGF0dHJba2V5XSA9IGF0dHJOYW1lOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIGF0dHJOYW1lID0gdGhpcy4kYXR0cltrZXldOworICAgICAgICAgIGlm
ICghYXR0ck5hbWUpIHsKKyAgICAgICAgICAgIHRoaXMuJGF0dHJba2V5XSA9IGF0dHJOYW1lID0g
c25ha2VfY2FzZShrZXksICctJyk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKworICAgICAg
ICAvLyBzYW5pdGl6ZSBhW2hyZWZdIHZhbHVlcworICAgICAgICBpZiAobm9kZU5hbWVfKHRoaXMu
JCRlbGVtZW50WzBdKSA9PT0gJ0EnICYmIGtleSA9PT0gJ2hyZWYnKSB7CisgICAgICAgICAgdXJs
U2FuaXRpemF0aW9uTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB2YWx1ZSk7CisKKyAgICAgICAg
ICAvLyBocmVmIHByb3BlcnR5IGFsd2F5cyByZXR1cm5zIG5vcm1hbGl6ZWQgYWJzb2x1dGUgdXJs
LCBzbyB3ZSBjYW4gbWF0Y2ggYWdhaW5zdCB0aGF0CisgICAgICAgICAgbm9ybWFsaXplZFZhbCA9
IHVybFNhbml0aXphdGlvbk5vZGUuaHJlZjsKKyAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWRWYWwu
bWF0Y2godXJsU2FuaXRpemF0aW9uV2hpdGVsaXN0KSkgeworICAgICAgICAgICAgdGhpc1trZXld
ID0gdmFsdWUgPSAndW5zYWZlOicgKyBub3JtYWxpemVkVmFsOworICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisKKyAgICAgICAgaWYgKHdyaXRlQXR0ciAhPT0gZmFsc2UpIHsKKyAgICAgICAgICBp
ZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAg
dGhpcy4kJGVsZW1lbnQucmVtb3ZlQXR0cihhdHRyTmFtZSk7CisgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMuJCRlbGVtZW50LmF0dHIoYXR0ck5hbWUsIHZhbHVlKTsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBmaXJlIG9ic2VydmVycworICAgICAgICAk
JG9ic2VydmVycyAmJiBmb3JFYWNoKCQkb2JzZXJ2ZXJzW2tleV0sIGZ1bmN0aW9uKGZuKSB7Cisg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZuKHZhbHVlKTsKKyAgICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0pOworICAgICAgfSwKKworCisgICAgICAvKioKKyAgICAgICAqIE9ic2VydmUgYW4g
aW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS4KKyAgICAgICAqIFRoZSBvYnNlcnZlciB3aWxsIG5ldmVy
IGJlIGNhbGxlZCwgaWYgZ2l2ZW4gYXR0cmlidXRlIGlzIG5vdCBpbnRlcnBvbGF0ZWQuCisgICAg
ICAgKgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBOb3JtYWxpemVkIGtleS4gKGllIG5n
QXR0cmlidXRlKSAuCisgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCopfSBmbiBGdW5jdGlvbiB0
aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBhdHRyaWJ1dGUgdmFsdWUgY2hhbmdlcy4K
KyAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbigqKX0gdGhlIGBmbmAgRnVuY3Rpb24gcGFzc2Vk
IGluLgorICAgICAgICovCisgICAgICAkb2JzZXJ2ZTogZnVuY3Rpb24oa2V5LCBmbikgeworICAg
ICAgICB2YXIgYXR0cnMgPSB0aGlzLAorICAgICAgICAgICAgJCRvYnNlcnZlcnMgPSAoYXR0cnMu
JCRvYnNlcnZlcnMgfHwgKGF0dHJzLiQkb2JzZXJ2ZXJzID0ge30pKSwKKyAgICAgICAgICAgIGxp
c3RlbmVycyA9ICgkJG9ic2VydmVyc1trZXldIHx8ICgkJG9ic2VydmVyc1trZXldID0gW10pKTsK
KworICAgICAgICBsaXN0ZW5lcnMucHVzaChmbik7CisgICAgICAgICRyb290U2NvcGUuJGV2YWxB
c3luYyhmdW5jdGlvbigpIHsKKyAgICAgICAgICBpZiAoIWxpc3RlbmVycy4kJGludGVyKSB7Cisg
ICAgICAgICAgICAvLyBubyBvbmUgcmVnaXN0ZXJlZCBhdHRyaWJ1dGUgaW50ZXJwb2xhdGlvbiBm
dW5jdGlvbiwgc28gbGV0cyBjYWxsIGl0IG1hbnVhbGx5CisgICAgICAgICAgICBmbihhdHRyc1tr
ZXldKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gZm47CisgICAg
ICB9CisgICAgfTsKKworICAgIHZhciB1cmxTYW5pdGl6YXRpb25Ob2RlID0gJGRvY3VtZW50WzBd
LmNyZWF0ZUVsZW1lbnQoJ2EnKSwKKyAgICAgICAgc3RhcnRTeW1ib2wgPSAkaW50ZXJwb2xhdGUu
c3RhcnRTeW1ib2woKSwKKyAgICAgICAgZW5kU3ltYm9sID0gJGludGVycG9sYXRlLmVuZFN5bWJv
bCgpLAorICAgICAgICBkZW5vcm1hbGl6ZVRlbXBsYXRlID0gKHN0YXJ0U3ltYm9sID09ICd7eycg
fHwgZW5kU3ltYm9sICA9PSAnfX0nKQorICAgICAgICAgICAgPyBpZGVudGl0eQorICAgICAgICAg
ICAgOiBmdW5jdGlvbiBkZW5vcm1hbGl6ZVRlbXBsYXRlKHRlbXBsYXRlKSB7CisgICAgICAgICAg
ICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9ce1x7L2csIHN0YXJ0U3ltYm9sKS5yZXBsYWNl
KC99fS9nLCBlbmRTeW1ib2wpOworICAgICAgICAgICAgfTsKKworCisgICAgcmV0dXJuIGNvbXBp
bGU7CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBmdW5j
dGlvbiBjb21waWxlKCRjb21waWxlTm9kZXMsIHRyYW5zY2x1ZGVGbiwgbWF4UHJpb3JpdHkpIHsK
KyAgICAgIGlmICghKCRjb21waWxlTm9kZXMgaW5zdGFuY2VvZiBqcUxpdGUpKSB7CisgICAgICAg
IC8vIGpxdWVyeSBhbHdheXMgcmV3cmFwcywgd2hlcmVhcyB3ZSBuZWVkIHRvIHByZXNlcnZlIHRo
ZSBvcmlnaW5hbCBzZWxlY3RvciBzbyB0aGF0IHdlIGNhbiBtb2RpZnkgaXQuCisgICAgICAgICRj
b21waWxlTm9kZXMgPSBqcUxpdGUoJGNvbXBpbGVOb2Rlcyk7CisgICAgICB9CisgICAgICAvLyBX
ZSBjYW4gbm90IGNvbXBpbGUgdG9wIGxldmVsIHRleHQgZWxlbWVudHMgc2luY2UgdGV4dCBub2Rl
cyBjYW4gYmUgbWVyZ2VkIGFuZCB3ZSB3aWxsCisgICAgICAvLyBub3QgYmUgYWJsZSB0byBhdHRh
Y2ggc2NvcGUgZGF0YSB0byB0aGVtLCBzbyB3ZSB3aWxsIHdyYXAgdGhlbSBpbiA8c3Bhbj4KKyAg
ICAgIGZvckVhY2goJGNvbXBpbGVOb2RlcywgZnVuY3Rpb24obm9kZSwgaW5kZXgpeworICAgICAg
ICBpZiAobm9kZS5ub2RlVHlwZSA9PSAzIC8qIHRleHQgbm9kZSAqLyAmJiBub2RlLm5vZGVWYWx1
ZS5tYXRjaCgvXFMrLykgLyogbm9uLWVtcHR5ICovICkgeworICAgICAgICAgICRjb21waWxlTm9k
ZXNbaW5kZXhdID0ganFMaXRlKG5vZGUpLndyYXAoJzxzcGFuPjwvc3Bhbj4nKS5wYXJlbnQoKVsw
XTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICB2YXIgY29tcG9zaXRlTGlua0ZuID0gY29t
cGlsZU5vZGVzKCRjb21waWxlTm9kZXMsIHRyYW5zY2x1ZGVGbiwgJGNvbXBpbGVOb2RlcywgbWF4
UHJpb3JpdHkpOworICAgICAgcmV0dXJuIGZ1bmN0aW9uIHB1YmxpY0xpbmtGbihzY29wZSwgY2xv
bmVDb25uZWN0Rm4peworICAgICAgICBhc3NlcnRBcmcoc2NvcGUsICdzY29wZScpOworICAgICAg
ICAvLyBpbXBvcnRhbnQhITogd2UgbXVzdCBjYWxsIG91ciBqcUxpdGUuY2xvbmUoKSBzaW5jZSB0
aGUgalF1ZXJ5IG9uZSBpcyB0cnlpbmcgdG8gYmUgc21hcnQKKyAgICAgICAgLy8gYW5kIHNvbWV0
aW1lcyBjaGFuZ2VzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIERPTS4KKyAgICAgICAgdmFyICRsaW5r
Tm9kZSA9IGNsb25lQ29ubmVjdEZuCisgICAgICAgICAgPyBKUUxpdGVQcm90b3R5cGUuY2xvbmUu
Y2FsbCgkY29tcGlsZU5vZGVzKSAvLyBJTVBPUlRBTlQhISEKKyAgICAgICAgICA6ICRjb21waWxl
Tm9kZXM7CisKKyAgICAgICAgLy8gQXR0YWNoIHNjb3BlIG9ubHkgdG8gbm9uLXRleHQgbm9kZXMu
CisgICAgICAgIGZvcih2YXIgaSA9IDAsIGlpID0gJGxpbmtOb2RlLmxlbmd0aDsgaTxpaTsgaSsr
KSB7CisgICAgICAgICAgdmFyIG5vZGUgPSAkbGlua05vZGVbaV07CisgICAgICAgICAgaWYgKG5v
ZGUubm9kZVR5cGUgPT0gMSAvKiBlbGVtZW50ICovIHx8IG5vZGUubm9kZVR5cGUgPT0gOSAvKiBk
b2N1bWVudCAqLykgeworICAgICAgICAgICAgJGxpbmtOb2RlLmVxKGkpLmRhdGEoJyRzY29wZScs
IHNjb3BlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2FmZUFkZENsYXNzKCRs
aW5rTm9kZSwgJ25nLXNjb3BlJyk7CisgICAgICAgIGlmIChjbG9uZUNvbm5lY3RGbikgY2xvbmVD
b25uZWN0Rm4oJGxpbmtOb2RlLCBzY29wZSk7CisgICAgICAgIGlmIChjb21wb3NpdGVMaW5rRm4p
IGNvbXBvc2l0ZUxpbmtGbihzY29wZSwgJGxpbmtOb2RlLCAkbGlua05vZGUpOworICAgICAgICBy
ZXR1cm4gJGxpbmtOb2RlOworICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB3cm9uZ01v
ZGUobG9jYWxOYW1lLCBtb2RlKSB7CisgICAgICB0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgJyIg
KyBtb2RlICsgIicgZm9yICciICsgbG9jYWxOYW1lICsgIicuIik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gc2FmZUFkZENsYXNzKCRlbGVtZW50LCBjbGFzc05hbWUpIHsKKyAgICAgIHRyeSB7Cisg
ICAgICAgICRlbGVtZW50LmFkZENsYXNzKGNsYXNzTmFtZSk7CisgICAgICB9IGNhdGNoKGUpIHsK
KyAgICAgICAgLy8gaWdub3JlLCBzaW5jZSBpdCBtZWFucyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8g
c2V0IGNsYXNzIG9uCisgICAgICAgIC8vIFNWRyBlbGVtZW50LCB3aGVyZSBjbGFzcyBuYW1lIGlz
IHJlYWQtb25seS4KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21waWxlIGZ1
bmN0aW9uIG1hdGNoZXMgZWFjaCBub2RlIGluIG5vZGVMaXN0IGFnYWluc3QgdGhlIGRpcmVjdGl2
ZXMuIE9uY2UgYWxsIGRpcmVjdGl2ZXMKKyAgICAgKiBmb3IgYSBwYXJ0aWN1bGFyIG5vZGUgYXJl
IGNvbGxlY3RlZCB0aGVpciBjb21waWxlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQuIFRoZSBjb21w
aWxlCisgICAgICogZnVuY3Rpb25zIHJldHVybiB2YWx1ZXMgLSB0aGUgbGlua2luZyBmdW5jdGlv
bnMgLSBhcmUgY29tYmluZWQgaW50byBhIGNvbXBvc2l0ZSBsaW5raW5nCisgICAgICogZnVuY3Rp
b24sIHdoaWNoIGlzIHRoZSBhIGxpbmtpbmcgZnVuY3Rpb24gZm9yIHRoZSBub2RlLgorICAgICAq
CisgICAgICogQHBhcmFtIHtOb2RlTGlzdH0gbm9kZUxpc3QgYW4gYXJyYXkgb2Ygbm9kZXMgb3Ig
Tm9kZUxpc3QgdG8gY29tcGlsZQorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oYW5ndWxhci5TY29w
ZVssIGNsb25lQXR0YWNoRm5dfSB0cmFuc2NsdWRlRm4gQSBsaW5raW5nIGZ1bmN0aW9uLCB3aGVy
ZSB0aGUKKyAgICAgKiAgICAgICAgc2NvcGUgYXJndW1lbnQgaXMgYXV0by1nZW5lcmF0ZWQgdG8g
dGhlIG5ldyBjaGlsZCBvZiB0aGUgdHJhbnNjbHVkZWQgcGFyZW50IHNjb3BlLgorICAgICAqIEBw
YXJhbSB7RE9NRWxlbWVudD19ICRyb290RWxlbWVudCBJZiB0aGUgbm9kZUxpc3QgaXMgdGhlIHJv
b3Qgb2YgdGhlIGNvbXBpbGF0aW9uIHRyZWUgdGhlbiB0aGUKKyAgICAgKiAgICAgICAgcm9vdEVs
ZW1lbnQgbXVzdCBiZSBzZXQgdGhlIGpxTGl0ZSBjb2xsZWN0aW9uIG9mIHRoZSBjb21waWxlIHJv
b3QuIFRoaXMgaXMKKyAgICAgKiAgICAgICAgbmVlZGVkIHNvIHRoYXQgdGhlIGpxTGl0ZSBjb2xs
ZWN0aW9uIGl0ZW1zIGNhbiBiZSByZXBsYWNlZCB3aXRoIHdpZGdldHMuCisgICAgICogQHBhcmFt
IHtudW1iZXI9fSBtYXggZGlyZWN0aXZlIHByaW9yaXR5CisgICAgICogQHJldHVybnMgez9mdW5j
dGlvbn0gQSBjb21wb3NpdGUgbGlua2luZyBmdW5jdGlvbiBvZiBhbGwgb2YgdGhlIG1hdGNoZWQg
ZGlyZWN0aXZlcyBvciBudWxsLgorICAgICAqLworICAgIGZ1bmN0aW9uIGNvbXBpbGVOb2Rlcyhu
b2RlTGlzdCwgdHJhbnNjbHVkZUZuLCAkcm9vdEVsZW1lbnQsIG1heFByaW9yaXR5KSB7CisgICAg
ICB2YXIgbGlua0ZucyA9IFtdLAorICAgICAgICAgIG5vZGVMaW5rRm4sIGNoaWxkTGlua0ZuLCBk
aXJlY3RpdmVzLCBhdHRycywgbGlua0ZuRm91bmQ7CisKKyAgICAgIGZvcih2YXIgaSA9IDA7IGkg
PCBub2RlTGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICBhdHRycyA9IG5ldyBBdHRyaWJ1dGVz
KCk7CisKKyAgICAgICAgLy8gd2UgbXVzdCBhbHdheXMgcmVmZXIgdG8gbm9kZUxpc3RbaV0gc2lu
Y2UgdGhlIG5vZGVzIGNhbiBiZSByZXBsYWNlZCB1bmRlcm5lYXRoIHVzLgorICAgICAgICBkaXJl
Y3RpdmVzID0gY29sbGVjdERpcmVjdGl2ZXMobm9kZUxpc3RbaV0sIFtdLCBhdHRycywgbWF4UHJp
b3JpdHkpOworCisgICAgICAgIG5vZGVMaW5rRm4gPSAoZGlyZWN0aXZlcy5sZW5ndGgpCisgICAg
ICAgICAgICA/IGFwcGx5RGlyZWN0aXZlc1RvTm9kZShkaXJlY3RpdmVzLCBub2RlTGlzdFtpXSwg
YXR0cnMsIHRyYW5zY2x1ZGVGbiwgJHJvb3RFbGVtZW50KQorICAgICAgICAgICAgOiBudWxsOwor
CisgICAgICAgIGNoaWxkTGlua0ZuID0gKG5vZGVMaW5rRm4gJiYgbm9kZUxpbmtGbi50ZXJtaW5h
bCB8fCAhbm9kZUxpc3RbaV0uY2hpbGROb2RlcyB8fCAhbm9kZUxpc3RbaV0uY2hpbGROb2Rlcy5s
ZW5ndGgpCisgICAgICAgICAgICA/IG51bGwKKyAgICAgICAgICAgIDogY29tcGlsZU5vZGVzKG5v
ZGVMaXN0W2ldLmNoaWxkTm9kZXMsCisgICAgICAgICAgICAgICAgIG5vZGVMaW5rRm4gPyBub2Rl
TGlua0ZuLnRyYW5zY2x1ZGUgOiB0cmFuc2NsdWRlRm4pOworCisgICAgICAgIGxpbmtGbnMucHVz
aChub2RlTGlua0ZuKTsKKyAgICAgICAgbGlua0Zucy5wdXNoKGNoaWxkTGlua0ZuKTsKKyAgICAg
ICAgbGlua0ZuRm91bmQgPSAobGlua0ZuRm91bmQgfHwgbm9kZUxpbmtGbiB8fCBjaGlsZExpbmtG
bik7CisgICAgICB9CisKKyAgICAgIC8vIHJldHVybiBhIGxpbmtpbmcgZnVuY3Rpb24gaWYgd2Ug
aGF2ZSBmb3VuZCBhbnl0aGluZywgbnVsbCBvdGhlcndpc2UKKyAgICAgIHJldHVybiBsaW5rRm5G
b3VuZCA/IGNvbXBvc2l0ZUxpbmtGbiA6IG51bGw7CisKKyAgICAgIGZ1bmN0aW9uIGNvbXBvc2l0
ZUxpbmtGbihzY29wZSwgbm9kZUxpc3QsICRyb290RWxlbWVudCwgYm91bmRUcmFuc2NsdWRlRm4p
IHsKKyAgICAgICAgdmFyIG5vZGVMaW5rRm4sIGNoaWxkTGlua0ZuLCBub2RlLCBjaGlsZFNjb3Bl
LCBjaGlsZFRyYW5zY2x1ZGVGbiwgaSwgaWksIG47CisKKyAgICAgICAgLy8gY29weSBub2RlTGlz
dCBzbyB0aGF0IGxpbmtpbmcgZG9lc24ndCBicmVhayBkdWUgdG8gbGl2ZSBsaXN0IHVwZGF0ZXMu
CisgICAgICAgIHZhciBzdGFibGVOb2RlTGlzdCA9IFtdOworICAgICAgICBmb3IgKGkgPSAwLCBp
aSA9IG5vZGVMaXN0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICBzdGFibGVOb2Rl
TGlzdC5wdXNoKG5vZGVMaXN0W2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvcihpID0gMCwg
biA9IDAsIGlpID0gbGlua0Zucy5sZW5ndGg7IGkgPCBpaTsgbisrKSB7CisgICAgICAgICAgbm9k
ZSA9IHN0YWJsZU5vZGVMaXN0W25dOworICAgICAgICAgIG5vZGVMaW5rRm4gPSBsaW5rRm5zW2kr
K107CisgICAgICAgICAgY2hpbGRMaW5rRm4gPSBsaW5rRm5zW2krK107CisKKyAgICAgICAgICBp
ZiAobm9kZUxpbmtGbikgeworICAgICAgICAgICAgaWYgKG5vZGVMaW5rRm4uc2NvcGUpIHsKKyAg
ICAgICAgICAgICAgY2hpbGRTY29wZSA9IHNjb3BlLiRuZXcoaXNPYmplY3Qobm9kZUxpbmtGbi5z
Y29wZSkpOworICAgICAgICAgICAgICBqcUxpdGUobm9kZSkuZGF0YSgnJHNjb3BlJywgY2hpbGRT
Y29wZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBjaGlsZFNjb3BlID0g
c2NvcGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGlsZFRyYW5zY2x1ZGVGbiA9IG5v
ZGVMaW5rRm4udHJhbnNjbHVkZTsKKyAgICAgICAgICAgIGlmIChjaGlsZFRyYW5zY2x1ZGVGbiB8
fCAoIWJvdW5kVHJhbnNjbHVkZUZuICYmIHRyYW5zY2x1ZGVGbikpIHsKKyAgICAgICAgICAgICAg
bm9kZUxpbmtGbihjaGlsZExpbmtGbiwgY2hpbGRTY29wZSwgbm9kZSwgJHJvb3RFbGVtZW50LAor
ICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKHRyYW5zY2x1ZGVGbikgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oY2xvbmVGbikgeworICAgICAgICAgICAgICAgICAgICAg
IHZhciB0cmFuc2NsdWRlU2NvcGUgPSBzY29wZS4kbmV3KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgdHJhbnNjbHVkZVNjb3BlLiQkdHJhbnNjbHVkZWQgPSB0cnVlOworCisgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRyYW5zY2x1ZGVGbih0cmFuc2NsdWRlU2NvcGUsIGNsb25lRm4pLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kKCckZGVzdHJveScsIGJpbmQodHJhbnNjbHVk
ZVNjb3BlLCB0cmFuc2NsdWRlU2NvcGUuJGRlc3Ryb3kpKTsKKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAgIH0pKGNoaWxkVHJhbnNjbHVkZUZuIHx8IHRyYW5zY2x1ZGVG
bikKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
IG5vZGVMaW5rRm4oY2hpbGRMaW5rRm4sIGNoaWxkU2NvcGUsIG5vZGUsIHVuZGVmaW5lZCwgYm91
bmRUcmFuc2NsdWRlRm4pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZiAoY2hp
bGRMaW5rRm4pIHsKKyAgICAgICAgICAgIGNoaWxkTGlua0ZuKHNjb3BlLCBub2RlLmNoaWxkTm9k
ZXMsIHVuZGVmaW5lZCwgYm91bmRUcmFuc2NsdWRlRm4pOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogTG9va3MgZm9yIGRpcmVjdGl2
ZXMgb24gdGhlIGdpdmVuIG5vZGUgYW5kIGFkZHMgdGhlbSB0byB0aGUgZGlyZWN0aXZlIGNvbGxl
Y3Rpb24gd2hpY2ggaXMKKyAgICAgKiBzb3J0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbm9k
ZSBOb2RlIHRvIHNlYXJjaC4KKyAgICAgKiBAcGFyYW0gZGlyZWN0aXZlcyBBbiBhcnJheSB0byB3
aGljaCB0aGUgZGlyZWN0aXZlcyBhcmUgYWRkZWQgdG8uIFRoaXMgYXJyYXkgaXMgc29ydGVkIGJl
Zm9yZQorICAgICAqICAgICAgICB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKyAgICAgKiBAcGFyYW0g
YXR0cnMgVGhlIHNoYXJlZCBhdHRycyBvYmplY3Qgd2hpY2ggaXMgdXNlZCB0byBwb3B1bGF0ZSB0
aGUgbm9ybWFsaXplZCBhdHRyaWJ1dGVzLgorICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4UHJp
b3JpdHkgTWF4IGRpcmVjdGl2ZSBwcmlvcml0eS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjb2xs
ZWN0RGlyZWN0aXZlcyhub2RlLCBkaXJlY3RpdmVzLCBhdHRycywgbWF4UHJpb3JpdHkpIHsKKyAg
ICAgIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGUsCisgICAgICAgICAgYXR0cnNNYXAgPSBh
dHRycy4kYXR0ciwKKyAgICAgICAgICBtYXRjaCwKKyAgICAgICAgICBjbGFzc05hbWU7CisKKyAg
ICAgIHN3aXRjaChub2RlVHlwZSkgeworICAgICAgICBjYXNlIDE6IC8qIEVsZW1lbnQgKi8KKyAg
ICAgICAgICAvLyB1c2UgdGhlIG5vZGUgbmFtZTogPGRpcmVjdGl2ZT4KKyAgICAgICAgICBhZGRE
aXJlY3RpdmUoZGlyZWN0aXZlcywKKyAgICAgICAgICAgICAgZGlyZWN0aXZlTm9ybWFsaXplKG5v
ZGVOYW1lXyhub2RlKS50b0xvd2VyQ2FzZSgpKSwgJ0UnLCBtYXhQcmlvcml0eSk7CisKKyAgICAg
ICAgICAvLyBpdGVyYXRlIG92ZXIgdGhlIGF0dHJpYnV0ZXMKKyAgICAgICAgICBmb3IgKHZhciBh
dHRyLCBuYW1lLCBuTmFtZSwgdmFsdWUsIG5BdHRycyA9IG5vZGUuYXR0cmlidXRlcywKKyAgICAg
ICAgICAgICAgICAgICBqID0gMCwgamogPSBuQXR0cnMgJiYgbkF0dHJzLmxlbmd0aDsgaiA8IGpq
OyBqKyspIHsKKyAgICAgICAgICAgIGF0dHIgPSBuQXR0cnNbal07CisgICAgICAgICAgICBpZiAo
YXR0ci5zcGVjaWZpZWQpIHsKKyAgICAgICAgICAgICAgbmFtZSA9IGF0dHIubmFtZTsKKyAgICAg
ICAgICAgICAgbk5hbWUgPSBkaXJlY3RpdmVOb3JtYWxpemUobmFtZS50b0xvd2VyQ2FzZSgpKTsK
KyAgICAgICAgICAgICAgYXR0cnNNYXBbbk5hbWVdID0gbmFtZTsKKyAgICAgICAgICAgICAgYXR0
cnNbbk5hbWVdID0gdmFsdWUgPSB0cmltKChtc2llICYmIG5hbWUgPT0gJ2hyZWYnKQorICAgICAg
ICAgICAgICAgID8gZGVjb2RlVVJJQ29tcG9uZW50KG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUsIDIp
KQorICAgICAgICAgICAgICAgIDogYXR0ci52YWx1ZSk7CisgICAgICAgICAgICAgIGlmIChnZXRC
b29sZWFuQXR0ck5hbWUobm9kZSwgbk5hbWUpKSB7CisgICAgICAgICAgICAgICAgYXR0cnNbbk5h
bWVdID0gdHJ1ZTsgLy8gcHJlc2VuY2UgbWVhbnMgdHJ1ZQorICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgIGFkZEF0dHJJbnRlcnBvbGF0ZURpcmVjdGl2ZShub2RlLCBkaXJlY3RpdmVzLCB2
YWx1ZSwgbk5hbWUpOworICAgICAgICAgICAgICBhZGREaXJlY3RpdmUoZGlyZWN0aXZlcywgbk5h
bWUsICdBJywgbWF4UHJpb3JpdHkpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAg
ICAgICAgIC8vIHVzZSBjbGFzcyBhcyBkaXJlY3RpdmUKKyAgICAgICAgICBjbGFzc05hbWUgPSBu
b2RlLmNsYXNzTmFtZTsKKyAgICAgICAgICBpZiAoaXNTdHJpbmcoY2xhc3NOYW1lKSAmJiBjbGFz
c05hbWUgIT09ICcnKSB7CisgICAgICAgICAgICB3aGlsZSAobWF0Y2ggPSBDTEFTU19ESVJFQ1RJ
VkVfUkVHRVhQLmV4ZWMoY2xhc3NOYW1lKSkgeworICAgICAgICAgICAgICBuTmFtZSA9IGRpcmVj
dGl2ZU5vcm1hbGl6ZShtYXRjaFsyXSk7CisgICAgICAgICAgICAgIGlmIChhZGREaXJlY3RpdmUo
ZGlyZWN0aXZlcywgbk5hbWUsICdDJywgbWF4UHJpb3JpdHkpKSB7CisgICAgICAgICAgICAgICAg
YXR0cnNbbk5hbWVdID0gdHJpbShtYXRjaFszXSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnN1YnN0cihtYXRjaC5pbmRleCArIG1hdGNoWzBd
Lmxlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIDM6IC8qIFRleHQgTm9kZSAqLworICAgICAgICAgIGFkZFRleHRJbnRlcnBv
bGF0ZURpcmVjdGl2ZShkaXJlY3RpdmVzLCBub2RlLm5vZGVWYWx1ZSk7CisgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgODogLyogQ29tbWVudCAqLworICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBtYXRjaCA9IENPTU1FTlRfRElSRUNUSVZFX1JFR0VYUC5leGVjKG5vZGUubm9kZVZh
bHVlKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICBuTmFtZSA9IGRp
cmVjdGl2ZU5vcm1hbGl6ZShtYXRjaFsxXSk7CisgICAgICAgICAgICAgIGlmIChhZGREaXJlY3Rp
dmUoZGlyZWN0aXZlcywgbk5hbWUsICdNJywgbWF4UHJpb3JpdHkpKSB7CisgICAgICAgICAgICAg
ICAgYXR0cnNbbk5hbWVdID0gdHJpbShtYXRjaFsyXSk7CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAvLyB0dXJucyBv
dXQgdGhhdCB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMgSUU5IHRocm93cyBlcnJvcnMgd2hlbiBv
bmUgYXR0ZW1wdHMgdG8gcmVhZCBjb21tZW50J3Mgbm9kZSB2YWx1ZS4KKyAgICAgICAgICAgIC8v
IEp1c3QgaWdub3JlIGl0IGFuZCBjb250aW51ZS4gKENhbid0IHNlZW0gdG8gcmVwcm9kdWNlIGlu
IHRlc3QgY2FzZS4pCisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisg
ICAgICBkaXJlY3RpdmVzLnNvcnQoYnlQcmlvcml0eSk7CisgICAgICByZXR1cm4gZGlyZWN0aXZl
czsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIE9uY2UgdGhlIGRpcmVjdGl2ZXMgaGF2ZSBi
ZWVuIGNvbGxlY3RlZCwgdGhlaXIgY29tcGlsZSBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkLiBUaGlz
IG1ldGhvZAorICAgICAqIGlzIHJlc3BvbnNpYmxlIGZvciBpbmxpbmluZyBkaXJlY3RpdmUgdGVt
cGxhdGVzIGFzIHdlbGwgYXMgdGVybWluYXRpbmcgdGhlIGFwcGxpY2F0aW9uCisgICAgICogb2Yg
dGhlIGRpcmVjdGl2ZXMgaWYgdGhlIHRlcm1pbmFsIGRpcmVjdGl2ZSBoYXMgYmVlbiByZWFjaGVk
LgorICAgICAqCisgICAgICogQHBhcmFtIHtBcnJheX0gZGlyZWN0aXZlcyBBcnJheSBvZiBjb2xs
ZWN0ZWQgZGlyZWN0aXZlcyB0byBleGVjdXRlIHRoZWlyIGNvbXBpbGUgZnVuY3Rpb24uCisgICAg
ICogICAgICAgIHRoaXMgbmVlZHMgdG8gYmUgcHJlLXNvcnRlZCBieSBwcmlvcml0eSBvcmRlci4K
KyAgICAgKiBAcGFyYW0ge05vZGV9IGNvbXBpbGVOb2RlIFRoZSByYXcgRE9NIG5vZGUgdG8gYXBw
bHkgdGhlIGNvbXBpbGUgZnVuY3Rpb25zIHRvCisgICAgICogQHBhcmFtIHtPYmplY3R9IHRlbXBs
YXRlQXR0cnMgVGhlIHNoYXJlZCBhdHRyaWJ1dGUgZnVuY3Rpb24KKyAgICAgKiBAcGFyYW0ge2Z1
bmN0aW9uKGFuZ3VsYXIuU2NvcGVbLCBjbG9uZUF0dGFjaEZuXX0gdHJhbnNjbHVkZUZuIEEgbGlu
a2luZyBmdW5jdGlvbiwgd2hlcmUgdGhlCisgICAgICogICAgICAgIHNjb3BlIGFyZ3VtZW50IGlz
IGF1dG8tZ2VuZXJhdGVkIHRvIHRoZSBuZXcgY2hpbGQgb2YgdGhlIHRyYW5zY2x1ZGVkIHBhcmVu
dCBzY29wZS4KKyAgICAgKiBAcGFyYW0ge0pRTGl0ZX0ganFDb2xsZWN0aW9uIElmIHdlIGFyZSB3
b3JraW5nIG9uIHRoZSByb290IG9mIHRoZSBjb21waWxlIHRyZWUgdGhlbiB0aGlzCisgICAgICog
ICAgICAgIGFyZ3VtZW50IGhhcyB0aGUgcm9vdCBqcUxpdGUgYXJyYXkgc28gdGhhdCB3ZSBjYW4g
cmVwbGFjZSBub2RlcyBvbiBpdC4KKyAgICAgKiBAcmV0dXJucyBsaW5rRm4KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBhcHBseURpcmVjdGl2ZXNUb05vZGUoZGlyZWN0aXZlcywgY29tcGlsZU5vZGUs
IHRlbXBsYXRlQXR0cnMsIHRyYW5zY2x1ZGVGbiwganFDb2xsZWN0aW9uKSB7CisgICAgICB2YXIg
dGVybWluYWxQcmlvcml0eSA9IC1OdW1iZXIuTUFYX1ZBTFVFLAorICAgICAgICAgIHByZUxpbmtG
bnMgPSBbXSwKKyAgICAgICAgICBwb3N0TGlua0ZucyA9IFtdLAorICAgICAgICAgIG5ld1Njb3Bl
RGlyZWN0aXZlID0gbnVsbCwKKyAgICAgICAgICBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgPSBu
dWxsLAorICAgICAgICAgIHRlbXBsYXRlRGlyZWN0aXZlID0gbnVsbCwKKyAgICAgICAgICAkY29t
cGlsZU5vZGUgPSB0ZW1wbGF0ZUF0dHJzLiQkZWxlbWVudCA9IGpxTGl0ZShjb21waWxlTm9kZSks
CisgICAgICAgICAgZGlyZWN0aXZlLAorICAgICAgICAgIGRpcmVjdGl2ZU5hbWUsCisgICAgICAg
ICAgJHRlbXBsYXRlLAorICAgICAgICAgIHRyYW5zY2x1ZGVEaXJlY3RpdmUsCisgICAgICAgICAg
Y2hpbGRUcmFuc2NsdWRlRm4gPSB0cmFuc2NsdWRlRm4sCisgICAgICAgICAgY29udHJvbGxlckRp
cmVjdGl2ZXMsCisgICAgICAgICAgbGlua0ZuLAorICAgICAgICAgIGRpcmVjdGl2ZVZhbHVlOwor
CisgICAgICAvLyBleGVjdXRlcyBhbGwgZGlyZWN0aXZlcyBvbiB0aGUgY3VycmVudCBlbGVtZW50
CisgICAgICBmb3IodmFyIGkgPSAwLCBpaSA9IGRpcmVjdGl2ZXMubGVuZ3RoOyBpIDwgaWk7IGkr
KykgeworICAgICAgICBkaXJlY3RpdmUgPSBkaXJlY3RpdmVzW2ldOworICAgICAgICAkdGVtcGxh
dGUgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgaWYgKHRlcm1pbmFsUHJpb3JpdHkgPiBkaXJlY3Rp
dmUucHJpb3JpdHkpIHsKKyAgICAgICAgICBicmVhazsgLy8gcHJldmVudCBmdXJ0aGVyIHByb2Nl
c3Npbmcgb2YgZGlyZWN0aXZlcworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpcmVjdGl2ZVZh
bHVlID0gZGlyZWN0aXZlLnNjb3BlKSB7CisgICAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoJ2lz
b2xhdGVkIHNjb3BlJywgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLCBkaXJlY3RpdmUsICRjb21w
aWxlTm9kZSk7CisgICAgICAgICAgaWYgKGlzT2JqZWN0KGRpcmVjdGl2ZVZhbHVlKSkgeworICAg
ICAgICAgICAgc2FmZUFkZENsYXNzKCRjb21waWxlTm9kZSwgJ25nLWlzb2xhdGUtc2NvcGUnKTsK
KyAgICAgICAgICAgIG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTsKKyAgICAg
ICAgICB9CisgICAgICAgICAgc2FmZUFkZENsYXNzKCRjb21waWxlTm9kZSwgJ25nLXNjb3BlJyk7
CisgICAgICAgICAgbmV3U2NvcGVEaXJlY3RpdmUgPSBuZXdTY29wZURpcmVjdGl2ZSB8fCBkaXJl
Y3RpdmU7CisgICAgICAgIH0KKworICAgICAgICBkaXJlY3RpdmVOYW1lID0gZGlyZWN0aXZlLm5h
bWU7CisKKyAgICAgICAgaWYgKGRpcmVjdGl2ZVZhbHVlID0gZGlyZWN0aXZlLmNvbnRyb2xsZXIp
IHsKKyAgICAgICAgICBjb250cm9sbGVyRGlyZWN0aXZlcyA9IGNvbnRyb2xsZXJEaXJlY3RpdmVz
IHx8IHt9OworICAgICAgICAgIGFzc2VydE5vRHVwbGljYXRlKCInIiArIGRpcmVjdGl2ZU5hbWUg
KyAiJyBjb250cm9sbGVyIiwKKyAgICAgICAgICAgICAgY29udHJvbGxlckRpcmVjdGl2ZXNbZGly
ZWN0aXZlTmFtZV0sIGRpcmVjdGl2ZSwgJGNvbXBpbGVOb2RlKTsKKyAgICAgICAgICBjb250cm9s
bGVyRGlyZWN0aXZlc1tkaXJlY3RpdmVOYW1lXSA9IGRpcmVjdGl2ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChkaXJlY3RpdmVWYWx1ZSA9IGRpcmVjdGl2ZS50cmFuc2NsdWRlKSB7CisgICAg
ICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoJ3RyYW5zY2x1c2lvbicsIHRyYW5zY2x1ZGVEaXJlY3Rp
dmUsIGRpcmVjdGl2ZSwgJGNvbXBpbGVOb2RlKTsKKyAgICAgICAgICB0cmFuc2NsdWRlRGlyZWN0
aXZlID0gZGlyZWN0aXZlOworICAgICAgICAgIHRlcm1pbmFsUHJpb3JpdHkgPSBkaXJlY3RpdmUu
cHJpb3JpdHk7CisgICAgICAgICAgaWYgKGRpcmVjdGl2ZVZhbHVlID09ICdlbGVtZW50Jykgewor
ICAgICAgICAgICAgJHRlbXBsYXRlID0ganFMaXRlKGNvbXBpbGVOb2RlKTsKKyAgICAgICAgICAg
ICRjb21waWxlTm9kZSA9IHRlbXBsYXRlQXR0cnMuJCRlbGVtZW50ID0KKyAgICAgICAgICAgICAg
ICBqcUxpdGUoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnICcgKyBkaXJlY3RpdmVOYW1lICsgJzog
JyArIHRlbXBsYXRlQXR0cnNbZGlyZWN0aXZlTmFtZV0gKyAnICcpKTsKKyAgICAgICAgICAgIGNv
bXBpbGVOb2RlID0gJGNvbXBpbGVOb2RlWzBdOworICAgICAgICAgICAgcmVwbGFjZVdpdGgoanFD
b2xsZWN0aW9uLCBqcUxpdGUoJHRlbXBsYXRlWzBdKSwgY29tcGlsZU5vZGUpOworICAgICAgICAg
ICAgY2hpbGRUcmFuc2NsdWRlRm4gPSBjb21waWxlKCR0ZW1wbGF0ZSwgdHJhbnNjbHVkZUZuLCB0
ZXJtaW5hbFByaW9yaXR5KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHRlbXBs
YXRlID0ganFMaXRlKEpRTGl0ZUNsb25lKGNvbXBpbGVOb2RlKSkuY29udGVudHMoKTsKKyAgICAg
ICAgICAgICRjb21waWxlTm9kZS5odG1sKCcnKTsgLy8gY2xlYXIgY29udGVudHMKKyAgICAgICAg
ICAgIGNoaWxkVHJhbnNjbHVkZUZuID0gY29tcGlsZSgkdGVtcGxhdGUsIHRyYW5zY2x1ZGVGbik7
CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKChkaXJlY3RpdmVWYWx1ZSA9
IGRpcmVjdGl2ZS50ZW1wbGF0ZSkpIHsKKyAgICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZSgndGVt
cGxhdGUnLCB0ZW1wbGF0ZURpcmVjdGl2ZSwgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpOworICAg
ICAgICAgIHRlbXBsYXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlOworICAgICAgICAgIGRpcmVjdGl2
ZVZhbHVlID0gZGVub3JtYWxpemVUZW1wbGF0ZShkaXJlY3RpdmVWYWx1ZSk7CisKKyAgICAgICAg
ICBpZiAoZGlyZWN0aXZlLnJlcGxhY2UpIHsKKyAgICAgICAgICAgICR0ZW1wbGF0ZSA9IGpxTGl0
ZSgnPGRpdj4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0oZGlyZWN0
aXZlVmFsdWUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JykuY29u
dGVudHMoKTsKKyAgICAgICAgICAgIGNvbXBpbGVOb2RlID0gJHRlbXBsYXRlWzBdOworCisgICAg
ICAgICAgICBpZiAoJHRlbXBsYXRlLmxlbmd0aCAhPSAxIHx8IGNvbXBpbGVOb2RlLm5vZGVUeXBl
ICE9PSAxKSB7CisgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihNVUxUSV9ST09UX1RFTVBM
QVRFX0VSUk9SICsgZGlyZWN0aXZlVmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXBsYWNlV2l0aChqcUNvbGxlY3Rpb24sICRjb21waWxlTm9kZSwgY29tcGlsZU5vZGUpOwor
CisgICAgICAgICAgICB2YXIgbmV3VGVtcGxhdGVBdHRycyA9IHskYXR0cjoge319OworCisgICAg
ICAgICAgICAvLyBjb21iaW5lIGRpcmVjdGl2ZXMgZnJvbSB0aGUgb3JpZ2luYWwgbm9kZSBhbmQg
ZnJvbSB0aGUgdGVtcGxhdGU6CisgICAgICAgICAgICAvLyAtIHRha2UgdGhlIGFycmF5IG9mIGRp
cmVjdGl2ZXMgZm9yIHRoaXMgZWxlbWVudAorICAgICAgICAgICAgLy8gLSBzcGxpdCBpdCBpbnRv
IHR3byBwYXJ0cywgdGhvc2UgdGhhdCB3ZXJlIGFscmVhZHkgYXBwbGllZCBhbmQgdGhvc2UgdGhh
dCB3ZXJlbid0CisgICAgICAgICAgICAvLyAtIGNvbGxlY3QgZGlyZWN0aXZlcyBmcm9tIHRoZSB0
ZW1wbGF0ZSwgYWRkIHRoZW0gdG8gdGhlIHNlY29uZCBncm91cCBhbmQgc29ydCB0aGVtCisgICAg
ICAgICAgICAvLyAtIGFwcGVuZCB0aGUgc2Vjb25kIGdyb3VwIHdpdGggbmV3IGRpcmVjdGl2ZXMg
dG8gdGhlIGZpcnN0IGdyb3VwCisgICAgICAgICAgICBkaXJlY3RpdmVzID0gZGlyZWN0aXZlcy5j
b25jYXQoCisgICAgICAgICAgICAgICAgY29sbGVjdERpcmVjdGl2ZXMoCisgICAgICAgICAgICAg
ICAgICAgIGNvbXBpbGVOb2RlLAorICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLnNwbGlj
ZShpICsgMSwgZGlyZWN0aXZlcy5sZW5ndGggLSAoaSArIDEpKSwKKyAgICAgICAgICAgICAgICAg
ICAgbmV3VGVtcGxhdGVBdHRycworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICk7Cisg
ICAgICAgICAgICBtZXJnZVRlbXBsYXRlQXR0cmlidXRlcyh0ZW1wbGF0ZUF0dHJzLCBuZXdUZW1w
bGF0ZUF0dHJzKTsKKworICAgICAgICAgICAgaWkgPSBkaXJlY3RpdmVzLmxlbmd0aDsKKyAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGNvbXBpbGVOb2RlLmh0bWwoZGlyZWN0aXZlVmFs
dWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChkaXJlY3RpdmUudGVt
cGxhdGVVcmwpIHsKKyAgICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZSgndGVtcGxhdGUnLCB0ZW1w
bGF0ZURpcmVjdGl2ZSwgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpOworICAgICAgICAgIHRlbXBs
YXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlOworICAgICAgICAgIG5vZGVMaW5rRm4gPSBjb21waWxl
VGVtcGxhdGVVcmwoZGlyZWN0aXZlcy5zcGxpY2UoaSwgZGlyZWN0aXZlcy5sZW5ndGggLSBpKSwK
KyAgICAgICAgICAgICAgbm9kZUxpbmtGbiwgJGNvbXBpbGVOb2RlLCB0ZW1wbGF0ZUF0dHJzLCBq
cUNvbGxlY3Rpb24sIGRpcmVjdGl2ZS5yZXBsYWNlLAorICAgICAgICAgICAgICBjaGlsZFRyYW5z
Y2x1ZGVGbik7CisgICAgICAgICAgaWkgPSBkaXJlY3RpdmVzLmxlbmd0aDsKKyAgICAgICAgfSBl
bHNlIGlmIChkaXJlY3RpdmUuY29tcGlsZSkgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICBsaW5rRm4gPSBkaXJlY3RpdmUuY29tcGlsZSgkY29tcGlsZU5vZGUsIHRlbXBsYXRlQXR0cnMs
IGNoaWxkVHJhbnNjbHVkZUZuKTsKKyAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGxpbmtGbikp
IHsKKyAgICAgICAgICAgICAgYWRkTGlua0ZucyhudWxsLCBsaW5rRm4pOworICAgICAgICAgICAg
fSBlbHNlIGlmIChsaW5rRm4pIHsKKyAgICAgICAgICAgICAgYWRkTGlua0ZucyhsaW5rRm4ucHJl
LCBsaW5rRm4ucG9zdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSwgc3RhcnRpbmdUYWcoJGNvbXBpbGVOb2Rl
KSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpcmVjdGl2ZS50ZXJt
aW5hbCkgeworICAgICAgICAgIG5vZGVMaW5rRm4udGVybWluYWwgPSB0cnVlOworICAgICAgICAg
IHRlcm1pbmFsUHJpb3JpdHkgPSBNYXRoLm1heCh0ZXJtaW5hbFByaW9yaXR5LCBkaXJlY3RpdmUu
cHJpb3JpdHkpOworICAgICAgICB9CisKKyAgICAgIH0KKworICAgICAgbm9kZUxpbmtGbi5zY29w
ZSA9IG5ld1Njb3BlRGlyZWN0aXZlICYmIG5ld1Njb3BlRGlyZWN0aXZlLnNjb3BlOworICAgICAg
bm9kZUxpbmtGbi50cmFuc2NsdWRlID0gdHJhbnNjbHVkZURpcmVjdGl2ZSAmJiBjaGlsZFRyYW5z
Y2x1ZGVGbjsKKworICAgICAgLy8gbWlnaHQgYmUgbm9ybWFsIG9yIGRlbGF5ZWQgbm9kZUxpbmtG
biBkZXBlbmRpbmcgb24gaWYgdGVtcGxhdGVVcmwgaXMgcHJlc2VudAorICAgICAgcmV0dXJuIG5v
ZGVMaW5rRm47CisKKyAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgIGZ1bmN0aW9u
IGFkZExpbmtGbnMocHJlLCBwb3N0KSB7CisgICAgICAgIGlmIChwcmUpIHsKKyAgICAgICAgICBw
cmUucmVxdWlyZSA9IGRpcmVjdGl2ZS5yZXF1aXJlOworICAgICAgICAgIHByZUxpbmtGbnMucHVz
aChwcmUpOworICAgICAgICB9CisgICAgICAgIGlmIChwb3N0KSB7CisgICAgICAgICAgcG9zdC5y
ZXF1aXJlID0gZGlyZWN0aXZlLnJlcXVpcmU7CisgICAgICAgICAgcG9zdExpbmtGbnMucHVzaChw
b3N0KTsKKyAgICAgICAgfQorICAgICAgfQorCisKKyAgICAgIGZ1bmN0aW9uIGdldENvbnRyb2xs
ZXJzKHJlcXVpcmUsICRlbGVtZW50KSB7CisgICAgICAgIHZhciB2YWx1ZSwgcmV0cmlldmFsTWV0
aG9kID0gJ2RhdGEnLCBvcHRpb25hbCA9IGZhbHNlOworICAgICAgICBpZiAoaXNTdHJpbmcocmVx
dWlyZSkpIHsKKyAgICAgICAgICB3aGlsZSgodmFsdWUgPSByZXF1aXJlLmNoYXJBdCgwKSkgPT0g
J14nIHx8IHZhbHVlID09ICc/JykgeworICAgICAgICAgICAgcmVxdWlyZSA9IHJlcXVpcmUuc3Vi
c3RyKDEpOworICAgICAgICAgICAgaWYgKHZhbHVlID09ICdeJykgeworICAgICAgICAgICAgICBy
ZXRyaWV2YWxNZXRob2QgPSAnaW5oZXJpdGVkRGF0YSc7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvcHRpb25hbCA9IG9wdGlvbmFsIHx8IHZhbHVlID09ICc/JzsKKyAgICAgICAgICB9Cisg
ICAgICAgICAgdmFsdWUgPSAkZWxlbWVudFtyZXRyaWV2YWxNZXRob2RdKCckJyArIHJlcXVpcmUg
KyAnQ29udHJvbGxlcicpOworICAgICAgICAgIGlmICghdmFsdWUgJiYgIW9wdGlvbmFsKSB7Cisg
ICAgICAgICAgICB0aHJvdyBFcnJvcigiTm8gY29udHJvbGxlcjogIiArIHJlcXVpcmUpOworICAg
ICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0gZWxzZSBpZiAoaXNB
cnJheShyZXF1aXJlKSkgeworICAgICAgICAgIHZhbHVlID0gW107CisgICAgICAgICAgZm9yRWFj
aChyZXF1aXJlLCBmdW5jdGlvbihyZXF1aXJlKSB7CisgICAgICAgICAgICB2YWx1ZS5wdXNoKGdl
dENvbnRyb2xsZXJzKHJlcXVpcmUsICRlbGVtZW50KSk7CisgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgfQorCisKKyAgICAgIGZ1bmN0aW9uIG5v
ZGVMaW5rRm4oY2hpbGRMaW5rRm4sIHNjb3BlLCBsaW5rTm9kZSwgJHJvb3RFbGVtZW50LCBib3Vu
ZFRyYW5zY2x1ZGVGbikgeworICAgICAgICB2YXIgYXR0cnMsICRlbGVtZW50LCBpLCBpaSwgbGlu
a0ZuLCBjb250cm9sbGVyOworCisgICAgICAgIGlmIChjb21waWxlTm9kZSA9PT0gbGlua05vZGUp
IHsKKyAgICAgICAgICBhdHRycyA9IHRlbXBsYXRlQXR0cnM7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgYXR0cnMgPSBzaGFsbG93Q29weSh0ZW1wbGF0ZUF0dHJzLCBuZXcgQXR0cmlidXRl
cyhqcUxpdGUobGlua05vZGUpLCB0ZW1wbGF0ZUF0dHJzLiRhdHRyKSk7CisgICAgICAgIH0KKyAg
ICAgICAgJGVsZW1lbnQgPSBhdHRycy4kJGVsZW1lbnQ7CisKKyAgICAgICAgaWYgKG5ld0lzb2xh
dGVTY29wZURpcmVjdGl2ZSkgeworICAgICAgICAgIHZhciBMT0NBTF9SRUdFWFAgPSAvXlxzKihb
QD0mXSlccyooXHcqKVxzKiQvOworCisgICAgICAgICAgdmFyIHBhcmVudFNjb3BlID0gc2NvcGUu
JHBhcmVudCB8fCBzY29wZTsKKworICAgICAgICAgIGZvckVhY2gobmV3SXNvbGF0ZVNjb3BlRGly
ZWN0aXZlLnNjb3BlLCBmdW5jdGlvbihkZWZpbml0b24sIHNjb3BlTmFtZSkgeworICAgICAgICAg
ICAgdmFyIG1hdGNoID0gZGVmaW5pdG9uLm1hdGNoKExPQ0FMX1JFR0VYUCkgfHwgW10sCisgICAg
ICAgICAgICAgICAgYXR0ck5hbWUgPSBtYXRjaFsyXXx8IHNjb3BlTmFtZSwKKyAgICAgICAgICAg
ICAgICBtb2RlID0gbWF0Y2hbMV0sIC8vIEAsID0sIG9yICYKKyAgICAgICAgICAgICAgICBsYXN0
VmFsdWUsCisgICAgICAgICAgICAgICAgcGFyZW50R2V0LCBwYXJlbnRTZXQ7CisKKyAgICAgICAg
ICAgIHNjb3BlLiQkaXNvbGF0ZUJpbmRpbmdzW3Njb3BlTmFtZV0gPSBtb2RlICsgYXR0ck5hbWU7
CisKKyAgICAgICAgICAgIHN3aXRjaCAobW9kZSkgeworCisgICAgICAgICAgICAgIGNhc2UgJ0An
OiB7CisgICAgICAgICAgICAgICAgYXR0cnMuJG9ic2VydmUoYXR0ck5hbWUsIGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICAgICAgICAgICAgICBzY29wZVtzY29wZU5hbWVdID0gdmFsdWU7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgYXR0cnMuJCRvYnNlcnZlcnNbYXR0ck5h
bWVdLiQkc2NvcGUgPSBwYXJlbnRTY29wZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgIGNhc2UgJz0nOiB7CisgICAgICAgICAgICAgICAg
cGFyZW50R2V0ID0gJHBhcnNlKGF0dHJzW2F0dHJOYW1lXSk7CisgICAgICAgICAgICAgICAgcGFy
ZW50U2V0ID0gcGFyZW50R2V0LmFzc2lnbiB8fCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICAgIC8vIHJlc2V0IHRoZSBjaGFuZ2UsIG9yIHdlIHdpbGwgdGhyb3cgdGhpcyBleGNlcHRpb24g
b24gZXZlcnkgJGRpZ2VzdAorICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gc2NvcGVbc2Nv
cGVOYW1lXSA9IHBhcmVudEdldChwYXJlbnRTY29wZSk7CisgICAgICAgICAgICAgICAgICB0aHJv
dyBFcnJvcihOT05fQVNTSUdOQUJMRV9NT0RFTF9FWFBSRVNTSU9OICsgYXR0cnNbYXR0ck5hbWVd
ICsKKyAgICAgICAgICAgICAgICAgICAgICAnIChkaXJlY3RpdmU6ICcgKyBuZXdJc29sYXRlU2Nv
cGVEaXJlY3RpdmUubmFtZSArICcpJyk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICBsYXN0VmFsdWUgPSBzY29wZVtzY29wZU5hbWVdID0gcGFyZW50R2V0KHBhcmVudFNjb3Bl
KTsKKyAgICAgICAgICAgICAgICBzY29wZS4kd2F0Y2goZnVuY3Rpb24gcGFyZW50VmFsdWVXYXRj
aCgpIHsKKyAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRWYWx1ZSA9IHBhcmVudEdldChwYXJl
bnRTY29wZSk7CisKKyAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRWYWx1ZSAhPT0gc2NvcGVb
c2NvcGVOYW1lXSkgeworICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgb3V0IG9mIHN5bmMg
YW5kIG5lZWQgdG8gY29weQorICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50VmFsdWUgIT09
IGxhc3RWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcmVudCBjaGFuZ2VkIGFu
ZCBpdCBoYXMgcHJlY2VkZW5jZQorICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHNj
b3BlW3Njb3BlTmFtZV0gPSBwYXJlbnRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcGFyZW50IGNhbiBiZSBhc3NpZ25l
ZCB0aGVuIGRvIHNvCisgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U2V0KHBhcmVudFNjb3Bl
LCBwYXJlbnRWYWx1ZSA9IGxhc3RWYWx1ZSA9IHNjb3BlW3Njb3BlTmFtZV0pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICByZXR1
cm4gcGFyZW50VmFsdWU7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNlICcmJzogeworICAgICAg
ICAgICAgICAgIHBhcmVudEdldCA9ICRwYXJzZShhdHRyc1thdHRyTmFtZV0pOworICAgICAgICAg
ICAgICAgIHNjb3BlW3Njb3BlTmFtZV0gPSBmdW5jdGlvbihsb2NhbHMpIHsKKyAgICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJlbnRHZXQocGFyZW50U2NvcGUsIGxvY2Fscyk7CisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSW52YWxp
ZCBpc29sYXRlIHNjb3BlIGRlZmluaXRpb24gZm9yIGRpcmVjdGl2ZSAnICsKKyAgICAgICAgICAg
ICAgICAgICAgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLm5hbWUgKyAnOiAnICsgZGVmaW5pdG9u
KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGNvbnRyb2xsZXJEaXJlY3RpdmVzKSB7CisgICAgICAgICAgZm9y
RWFjaChjb250cm9sbGVyRGlyZWN0aXZlcywgZnVuY3Rpb24oZGlyZWN0aXZlKSB7CisgICAgICAg
ICAgICB2YXIgbG9jYWxzID0geworICAgICAgICAgICAgICAkc2NvcGU6IHNjb3BlLAorICAgICAg
ICAgICAgICAkZWxlbWVudDogJGVsZW1lbnQsCisgICAgICAgICAgICAgICRhdHRyczogYXR0cnMs
CisgICAgICAgICAgICAgICR0cmFuc2NsdWRlOiBib3VuZFRyYW5zY2x1ZGVGbgorICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgY29udHJvbGxlciA9IGRpcmVjdGl2ZS5jb250cm9sbGVyOwor
ICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIgPT0gJ0AnKSB7CisgICAgICAgICAgICAgIGNvbnRy
b2xsZXIgPSBhdHRyc1tkaXJlY3RpdmUubmFtZV07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICRlbGVtZW50LmRhdGEoCisgICAgICAgICAgICAgICAgJyQnICsgZGlyZWN0aXZlLm5hbWUg
KyAnQ29udHJvbGxlcicsCisgICAgICAgICAgICAgICAgJGNvbnRyb2xsZXIoY29udHJvbGxlciwg
bG9jYWxzKSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQUkVMSU5L
SU5HCisgICAgICAgIGZvcihpID0gMCwgaWkgPSBwcmVMaW5rRm5zLmxlbmd0aDsgaSA8IGlpOyBp
KyspIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgbGlua0ZuID0gcHJlTGlua0Zuc1tp
XTsKKyAgICAgICAgICAgIGxpbmtGbihzY29wZSwgJGVsZW1lbnQsIGF0dHJzLAorICAgICAgICAg
ICAgICAgIGxpbmtGbi5yZXF1aXJlICYmIGdldENvbnRyb2xsZXJzKGxpbmtGbi5yZXF1aXJlLCAk
ZWxlbWVudCkpOworICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICRleGNlcHRp
b25IYW5kbGVyKGUsIHN0YXJ0aW5nVGFnKCRlbGVtZW50KSk7CisgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gUkVDVVJTSU9OCisgICAgICAgIGNoaWxkTGlua0ZuICYmIGNoaWxk
TGlua0ZuKHNjb3BlLCBsaW5rTm9kZS5jaGlsZE5vZGVzLCB1bmRlZmluZWQsIGJvdW5kVHJhbnNj
bHVkZUZuKTsKKworICAgICAgICAvLyBQT1NUTElOS0lORworICAgICAgICBmb3IoaSA9IDAsIGlp
ID0gcG9zdExpbmtGbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICBsaW5rRm4gPSBwb3N0TGlua0Zuc1tpXTsKKyAgICAgICAgICAgIGxpbmtGbihz
Y29wZSwgJGVsZW1lbnQsIGF0dHJzLAorICAgICAgICAgICAgICAgIGxpbmtGbi5yZXF1aXJlICYm
IGdldENvbnRyb2xsZXJzKGxpbmtGbi5yZXF1aXJlLCAkZWxlbWVudCkpOworICAgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUsIHN0YXJ0aW5nVGFn
KCRlbGVtZW50KSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisK
KyAgICAvKioKKyAgICAgKiBsb29rcyB1cCB0aGUgZGlyZWN0aXZlIGFuZCBkZWNvcmF0ZXMgaXQg
d2l0aCBleGNlcHRpb24gaGFuZGxpbmcgYW5kIHByb3BlciBwYXJhbWV0ZXJzLiBXZQorICAgICAq
IGNhbGwgdGhpcyB0aGUgYm91bmREaXJlY3RpdmUuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0
cmluZ30gbmFtZSBuYW1lIG9mIHRoZSBkaXJlY3RpdmUgdG8gbG9vayB1cC4KKyAgICAgKiBAcGFy
YW0ge3N0cmluZ30gbG9jYXRpb24gVGhlIGRpcmVjdGl2ZSBtdXN0IGJlIGZvdW5kIGluIHNwZWNp
ZmljIGZvcm1hdC4KKyAgICAgKiAgIFN0cmluZyBjb250YWluaW5nIGFueSBvZiB0aGVzZXMgY2hh
cmFjdGVyczoKKyAgICAgKgorICAgICAqICAgKiBgRWA6IGVsZW1lbnQgbmFtZQorICAgICAqICAg
KiBgQSc6IGF0dHJpYnV0ZQorICAgICAqICAgKiBgQ2A6IGNsYXNzCisgICAgICogICAqIGBNYDog
Y29tbWVudAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgZGlyZWN0aXZlIHdhcyBhZGRlZC4KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBhZGREaXJlY3RpdmUodERpcmVjdGl2ZXMsIG5hbWUsIGxvY2F0
aW9uLCBtYXhQcmlvcml0eSkgeworICAgICAgdmFyIG1hdGNoID0gZmFsc2U7CisgICAgICBpZiAo
aGFzRGlyZWN0aXZlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgICBmb3IodmFyIGRp
cmVjdGl2ZSwgZGlyZWN0aXZlcyA9ICRpbmplY3Rvci5nZXQobmFtZSArIFN1ZmZpeCksCisgICAg
ICAgICAgICBpID0gMCwgaWkgPSBkaXJlY3RpdmVzLmxlbmd0aDsgaTxpaTsgaSsrKSB7CisgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9IGRpcmVjdGl2ZXNbaV07CisgICAg
ICAgICAgICBpZiAoIChtYXhQcmlvcml0eSA9PT0gdW5kZWZpbmVkIHx8IG1heFByaW9yaXR5ID4g
ZGlyZWN0aXZlLnByaW9yaXR5KSAmJgorICAgICAgICAgICAgICAgICBkaXJlY3RpdmUucmVzdHJp
Y3QuaW5kZXhPZihsb2NhdGlvbikgIT0gLTEpIHsKKyAgICAgICAgICAgICAgdERpcmVjdGl2ZXMu
cHVzaChkaXJlY3RpdmUpOworICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgfSBjYXRjaChlKSB7ICRleGNlcHRpb25IYW5kbGVyKGUpOyB9CisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBtYXRjaDsKKyAgICB9CisKKworICAgIC8qKgor
ICAgICAqIFdoZW4gdGhlIGVsZW1lbnQgaXMgcmVwbGFjZWQgd2l0aCBIVE1MIHRlbXBsYXRlIHRo
ZW4gdGhlIG5ldyBhdHRyaWJ1dGVzCisgICAgICogb24gdGhlIHRlbXBsYXRlIG5lZWQgdG8gYmUg
bWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIGF0dHJpYnV0ZXMgaW4gdGhlIERPTS4KKyAgICAgKiBU
aGUgZGVzaXJlZCBlZmZlY3QgaXMgdG8gaGF2ZSBib3RoIG9mIHRoZSBhdHRyaWJ1dGVzIHByZXNl
bnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge29iamVjdH0gZHN0IGRlc3RpbmF0aW9uIGF0dHJp
YnV0ZXMgKG9yaWdpbmFsIERPTSkKKyAgICAgKiBAcGFyYW0ge29iamVjdH0gc3JjIHNvdXJjZSBh
dHRyaWJ1dGVzIChmcm9tIHRoZSBkaXJlY3RpdmUgdGVtcGxhdGUpCisgICAgICovCisgICAgZnVu
Y3Rpb24gbWVyZ2VUZW1wbGF0ZUF0dHJpYnV0ZXMoZHN0LCBzcmMpIHsKKyAgICAgIHZhciBzcmNB
dHRyID0gc3JjLiRhdHRyLAorICAgICAgICAgIGRzdEF0dHIgPSBkc3QuJGF0dHIsCisgICAgICAg
ICAgJGVsZW1lbnQgPSBkc3QuJCRlbGVtZW50OworCisgICAgICAvLyByZWFwcGx5IHRoZSBvbGQg
YXR0cmlidXRlcyB0byB0aGUgbmV3IGVsZW1lbnQKKyAgICAgIGZvckVhY2goZHN0LCBmdW5jdGlv
bih2YWx1ZSwga2V5KSB7CisgICAgICAgIGlmIChrZXkuY2hhckF0KDApICE9ICckJykgeworICAg
ICAgICAgIGlmIChzcmNba2V5XSkgeworICAgICAgICAgICAgdmFsdWUgKz0gKGtleSA9PT0gJ3N0
eWxlJyA/ICc7JyA6ICcgJykgKyBzcmNba2V5XTsKKyAgICAgICAgICB9CisgICAgICAgICAgZHN0
LiRzZXQoa2V5LCB2YWx1ZSwgdHJ1ZSwgc3JjQXR0cltrZXldKTsKKyAgICAgICAgfQorICAgICAg
fSk7CisKKyAgICAgIC8vIGNvcHkgdGhlIG5ldyBhdHRyaWJ1dGVzIG9uIHRoZSBvbGQgYXR0cnMg
b2JqZWN0CisgICAgICBmb3JFYWNoKHNyYywgZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAg
ICBpZiAoa2V5ID09ICdjbGFzcycpIHsKKyAgICAgICAgICBzYWZlQWRkQ2xhc3MoJGVsZW1lbnQs
IHZhbHVlKTsKKyAgICAgICAgICBkc3RbJ2NsYXNzJ10gPSAoZHN0WydjbGFzcyddID8gZHN0Wydj
bGFzcyddICsgJyAnIDogJycpICsgdmFsdWU7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICdz
dHlsZScpIHsKKyAgICAgICAgICAkZWxlbWVudC5hdHRyKCdzdHlsZScsICRlbGVtZW50LmF0dHIo
J3N0eWxlJykgKyAnOycgKyB2YWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5LmNoYXJBdCgw
KSAhPSAnJCcgJiYgIWRzdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgZHN0W2tl
eV0gPSB2YWx1ZTsKKyAgICAgICAgICBkc3RBdHRyW2tleV0gPSBzcmNBdHRyW2tleV07CisgICAg
ICAgIH0KKyAgICAgIH0pOworICAgIH0KKworCisgICAgZnVuY3Rpb24gY29tcGlsZVRlbXBsYXRl
VXJsKGRpcmVjdGl2ZXMsIGJlZm9yZVRlbXBsYXRlTm9kZUxpbmtGbiwgJGNvbXBpbGVOb2RlLCB0
QXR0cnMsCisgICAgICAgICRyb290RWxlbWVudCwgcmVwbGFjZSwgY2hpbGRUcmFuc2NsdWRlRm4p
IHsKKyAgICAgIHZhciBsaW5rUXVldWUgPSBbXSwKKyAgICAgICAgICBhZnRlclRlbXBsYXRlTm9k
ZUxpbmtGbiwKKyAgICAgICAgICBhZnRlclRlbXBsYXRlQ2hpbGRMaW5rRm4sCisgICAgICAgICAg
YmVmb3JlVGVtcGxhdGVDb21waWxlTm9kZSA9ICRjb21waWxlTm9kZVswXSwKKyAgICAgICAgICBv
cmlnQXN5bmNEaXJlY3RpdmUgPSBkaXJlY3RpdmVzLnNoaWZ0KCksCisgICAgICAgICAgLy8gVGhl
IGZhY3QgdGhhdCB3ZSBoYXZlIHRvIGNvcHkgYW5kIHBhdGNoIHRoZSBkaXJlY3RpdmUgc2VlbXMg
d3JvbmchCisgICAgICAgICAgZGVyaXZlZFN5bmNEaXJlY3RpdmUgPSBleHRlbmQoe30sIG9yaWdB
c3luY0RpcmVjdGl2ZSwgeworICAgICAgICAgICAgY29udHJvbGxlcjogbnVsbCwgdGVtcGxhdGVV
cmw6IG51bGwsIHRyYW5zY2x1ZGU6IG51bGwsIHNjb3BlOiBudWxsCisgICAgICAgICAgfSk7CisK
KyAgICAgICRjb21waWxlTm9kZS5odG1sKCcnKTsKKworICAgICAgJGh0dHAuZ2V0KG9yaWdBc3lu
Y0RpcmVjdGl2ZS50ZW1wbGF0ZVVybCwge2NhY2hlOiAkdGVtcGxhdGVDYWNoZX0pLgorICAgICAg
ICBzdWNjZXNzKGZ1bmN0aW9uKGNvbnRlbnQpIHsKKyAgICAgICAgICB2YXIgY29tcGlsZU5vZGUs
IHRlbXBUZW1wbGF0ZUF0dHJzLCAkdGVtcGxhdGU7CisKKyAgICAgICAgICBjb250ZW50ID0gZGVu
b3JtYWxpemVUZW1wbGF0ZShjb250ZW50KTsKKworICAgICAgICAgIGlmIChyZXBsYWNlKSB7Cisg
ICAgICAgICAgICAkdGVtcGxhdGUgPSBqcUxpdGUoJzxkaXY+JyArIHRyaW0oY29udGVudCkgKyAn
PC9kaXY+JykuY29udGVudHMoKTsKKyAgICAgICAgICAgIGNvbXBpbGVOb2RlID0gJHRlbXBsYXRl
WzBdOworCisgICAgICAgICAgICBpZiAoJHRlbXBsYXRlLmxlbmd0aCAhPSAxIHx8IGNvbXBpbGVO
b2RlLm5vZGVUeXBlICE9PSAxKSB7CisgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihNVUxU
SV9ST09UX1RFTVBMQVRFX0VSUk9SICsgY29udGVudCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHRlbXBUZW1wbGF0ZUF0dHJzID0geyRhdHRyOiB7fX07CisgICAgICAgICAgICByZXBs
YWNlV2l0aCgkcm9vdEVsZW1lbnQsICRjb21waWxlTm9kZSwgY29tcGlsZU5vZGUpOworICAgICAg
ICAgICAgY29sbGVjdERpcmVjdGl2ZXMoY29tcGlsZU5vZGUsIGRpcmVjdGl2ZXMsIHRlbXBUZW1w
bGF0ZUF0dHJzKTsKKyAgICAgICAgICAgIG1lcmdlVGVtcGxhdGVBdHRyaWJ1dGVzKHRBdHRycywg
dGVtcFRlbXBsYXRlQXR0cnMpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb21w
aWxlTm9kZSA9IGJlZm9yZVRlbXBsYXRlQ29tcGlsZU5vZGU7CisgICAgICAgICAgICAkY29tcGls
ZU5vZGUuaHRtbChjb250ZW50KTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkaXJlY3RpdmVz
LnVuc2hpZnQoZGVyaXZlZFN5bmNEaXJlY3RpdmUpOworICAgICAgICAgIGFmdGVyVGVtcGxhdGVO
b2RlTGlua0ZuID0gYXBwbHlEaXJlY3RpdmVzVG9Ob2RlKGRpcmVjdGl2ZXMsIGNvbXBpbGVOb2Rl
LCB0QXR0cnMsIGNoaWxkVHJhbnNjbHVkZUZuKTsKKyAgICAgICAgICBhZnRlclRlbXBsYXRlQ2hp
bGRMaW5rRm4gPSBjb21waWxlTm9kZXMoJGNvbXBpbGVOb2RlWzBdLmNoaWxkTm9kZXMsIGNoaWxk
VHJhbnNjbHVkZUZuKTsKKworCisgICAgICAgICAgd2hpbGUobGlua1F1ZXVlLmxlbmd0aCkgewor
ICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBsaW5rUXVldWUucG9wKCksCisgICAgICAgICAg
ICAgICAgbGlua1Jvb3RFbGVtZW50ID0gbGlua1F1ZXVlLnBvcCgpLAorICAgICAgICAgICAgICAg
IGJlZm9yZVRlbXBsYXRlTGlua05vZGUgPSBsaW5rUXVldWUucG9wKCksCisgICAgICAgICAgICAg
ICAgc2NvcGUgPSBsaW5rUXVldWUucG9wKCksCisgICAgICAgICAgICAgICAgbGlua05vZGUgPSBj
b21waWxlTm9kZTsKKworICAgICAgICAgICAgaWYgKGJlZm9yZVRlbXBsYXRlTGlua05vZGUgIT09
IGJlZm9yZVRlbXBsYXRlQ29tcGlsZU5vZGUpIHsKKyAgICAgICAgICAgICAgLy8gaXQgd2FzIGNs
b25lZCB0aGVyZWZvcmUgd2UgaGF2ZSB0byBjbG9uZSBhcyB3ZWxsLgorICAgICAgICAgICAgICBs
aW5rTm9kZSA9IEpRTGl0ZUNsb25lKGNvbXBpbGVOb2RlKTsKKyAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGgobGlua1Jvb3RFbGVtZW50LCBqcUxpdGUoYmVmb3JlVGVtcGxhdGVMaW5rTm9kZSksIGxp
bmtOb2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYWZ0ZXJUZW1wbGF0ZU5vZGVM
aW5rRm4oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIGJlZm9yZVRlbXBsYXRlTm9kZUxpbmtG
bihhZnRlclRlbXBsYXRlQ2hpbGRMaW5rRm4sIHNjb3BlLCBsaW5rTm9kZSwgJHJvb3RFbGVtZW50
LCBjb250cm9sbGVyKTsKKyAgICAgICAgICAgIH0sIHNjb3BlLCBsaW5rTm9kZSwgJHJvb3RFbGVt
ZW50LCBjb250cm9sbGVyKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbGlua1F1ZXVlID0gbnVs
bDsKKyAgICAgICAgfSkuCisgICAgICAgIGVycm9yKGZ1bmN0aW9uKHJlc3BvbnNlLCBjb2RlLCBo
ZWFkZXJzLCBjb25maWcpIHsKKyAgICAgICAgICB0aHJvdyBFcnJvcignRmFpbGVkIHRvIGxvYWQg
dGVtcGxhdGU6ICcgKyBjb25maWcudXJsKTsKKyAgICAgICAgfSk7CisKKyAgICAgIHJldHVybiBm
dW5jdGlvbiBkZWxheWVkTm9kZUxpbmtGbihpZ25vcmVDaGlsZExpbmtGbiwgc2NvcGUsIG5vZGUs
IHJvb3RFbGVtZW50LCBjb250cm9sbGVyKSB7CisgICAgICAgIGlmIChsaW5rUXVldWUpIHsKKyAg
ICAgICAgICBsaW5rUXVldWUucHVzaChzY29wZSk7CisgICAgICAgICAgbGlua1F1ZXVlLnB1c2go
bm9kZSk7CisgICAgICAgICAgbGlua1F1ZXVlLnB1c2gocm9vdEVsZW1lbnQpOworICAgICAgICAg
IGxpbmtRdWV1ZS5wdXNoKGNvbnRyb2xsZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYmVmb3Jl
VGVtcGxhdGVOb2RlTGlua0ZuKGFmdGVyVGVtcGxhdGVDaGlsZExpbmtGbiwgc2NvcGUsIG5vZGUs
IHJvb3RFbGVtZW50LCBjb250cm9sbGVyKTsKKyAgICAgICAgICB9LCBzY29wZSwgbm9kZSwgcm9v
dEVsZW1lbnQsIGNvbnRyb2xsZXIpOworICAgICAgICB9CisgICAgICB9OworICAgIH0KKworCisg
ICAgLyoqCisgICAgICogU29ydGluZyBmdW5jdGlvbiBmb3IgYm91bmQgZGlyZWN0aXZlcy4KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBieVByaW9yaXR5KGEsIGIpIHsKKyAgICAgIHJldHVybiBiLnBy
aW9yaXR5IC0gYS5wcmlvcml0eTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIGFzc2VydE5vRHVw
bGljYXRlKHdoYXQsIHByZXZpb3VzRGlyZWN0aXZlLCBkaXJlY3RpdmUsIGVsZW1lbnQpIHsKKyAg
ICAgIGlmIChwcmV2aW91c0RpcmVjdGl2ZSkgeworICAgICAgICB0aHJvdyBFcnJvcignTXVsdGlw
bGUgZGlyZWN0aXZlcyBbJyArIHByZXZpb3VzRGlyZWN0aXZlLm5hbWUgKyAnLCAnICsKKyAgICAg
ICAgICBkaXJlY3RpdmUubmFtZSArICddIGFza2luZyBmb3IgJyArIHdoYXQgKyAnIG9uOiAnICsg
IHN0YXJ0aW5nVGFnKGVsZW1lbnQpKTsKKyAgICAgIH0KKyAgICB9CisKKworICAgIGZ1bmN0aW9u
IGFkZFRleHRJbnRlcnBvbGF0ZURpcmVjdGl2ZShkaXJlY3RpdmVzLCB0ZXh0KSB7CisgICAgICB2
YXIgaW50ZXJwb2xhdGVGbiA9ICRpbnRlcnBvbGF0ZSh0ZXh0LCB0cnVlKTsKKyAgICAgIGlmIChp
bnRlcnBvbGF0ZUZuKSB7CisgICAgICAgIGRpcmVjdGl2ZXMucHVzaCh7CisgICAgICAgICAgcHJp
b3JpdHk6IDAsCisgICAgICAgICAgY29tcGlsZTogdmFsdWVGbihmdW5jdGlvbiB0ZXh0SW50ZXJw
b2xhdGVMaW5rRm4oc2NvcGUsIG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBub2Rl
LnBhcmVudCgpLAorICAgICAgICAgICAgICAgIGJpbmRpbmdzID0gcGFyZW50LmRhdGEoJyRiaW5k
aW5nJykgfHwgW107CisgICAgICAgICAgICBiaW5kaW5ncy5wdXNoKGludGVycG9sYXRlRm4pOwor
ICAgICAgICAgICAgc2FmZUFkZENsYXNzKHBhcmVudC5kYXRhKCckYmluZGluZycsIGJpbmRpbmdz
KSwgJ25nLWJpbmRpbmcnKTsKKyAgICAgICAgICAgIHNjb3BlLiR3YXRjaChpbnRlcnBvbGF0ZUZu
LCBmdW5jdGlvbiBpbnRlcnBvbGF0ZUZuV2F0Y2hBY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAg
ICAgbm9kZVswXS5ub2RlVmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
IH0pCisgICAgICAgIH0pOworICAgICAgfQorICAgIH0KKworCisgICAgZnVuY3Rpb24gYWRkQXR0
ckludGVycG9sYXRlRGlyZWN0aXZlKG5vZGUsIGRpcmVjdGl2ZXMsIHZhbHVlLCBuYW1lKSB7Cisg
ICAgICB2YXIgaW50ZXJwb2xhdGVGbiA9ICRpbnRlcnBvbGF0ZSh2YWx1ZSwgdHJ1ZSk7CisKKyAg
ICAgIC8vIG5vIGludGVycG9sYXRpb24gZm91bmQgLT4gaWdub3JlCisgICAgICBpZiAoIWludGVy
cG9sYXRlRm4pIHJldHVybjsKKworCisgICAgICBkaXJlY3RpdmVzLnB1c2goeworICAgICAgICBw
cmlvcml0eTogMTAwLAorICAgICAgICBjb21waWxlOiB2YWx1ZUZuKGZ1bmN0aW9uIGF0dHJJbnRl
cnBvbGF0ZUxpbmtGbihzY29wZSwgZWxlbWVudCwgYXR0cikgeworICAgICAgICAgIHZhciAkJG9i
c2VydmVycyA9IChhdHRyLiQkb2JzZXJ2ZXJzIHx8IChhdHRyLiQkb2JzZXJ2ZXJzID0ge30pKTsK
KworICAgICAgICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7CisgICAgICAgICAgICAvLyB3ZSBu
ZWVkIHRvIGludGVycG9sYXRlIGNsYXNzZXMgYWdhaW4sIGluIHRoZSBjYXNlIHRoZSBlbGVtZW50
IHdhcyByZXBsYWNlZAorICAgICAgICAgICAgLy8gYW5kIHRoZXJlZm9yZSB0aGUgdHdvIGNsYXNz
IGF0dHJzIGdvdCBtZXJnZWQgLSB3ZSB3YW50IHRvIGludGVycG9sYXRlIHRoZSByZXN1bHQKKyAg
ICAgICAgICAgIGludGVycG9sYXRlRm4gPSAkaW50ZXJwb2xhdGUoYXR0cltuYW1lXSwgdHJ1ZSk7
CisgICAgICAgICAgfQorCisgICAgICAgICAgYXR0cltuYW1lXSA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgICAoJCRvYnNlcnZlcnNbbmFtZV0gfHwgKCQkb2JzZXJ2ZXJzW25hbWVdID0gW10pKS4kJGlu
dGVyID0gdHJ1ZTsKKyAgICAgICAgICAoYXR0ci4kJG9ic2VydmVycyAmJiBhdHRyLiQkb2JzZXJ2
ZXJzW25hbWVdLiQkc2NvcGUgfHwgc2NvcGUpLgorICAgICAgICAgICAgJHdhdGNoKGludGVycG9s
YXRlRm4sIGZ1bmN0aW9uIGludGVycG9sYXRlRm5XYXRjaEFjdGlvbih2YWx1ZSkgeworICAgICAg
ICAgICAgICBhdHRyLiRzZXQobmFtZSwgdmFsdWUpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pCisgICAgICB9KTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFRoaXMgaXMgYSBzcGVj
aWFsIGpxTGl0ZS5yZXBsYWNlV2l0aCwgd2hpY2ggY2FuIHJlcGxhY2UgaXRlbXMgd2hpY2gKKyAg
ICAgKiBoYXZlIG5vIHBhcmVudHMsIHByb3ZpZGVkIHRoYXQgdGhlIGNvbnRhaW5pbmcganFMaXRl
IGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge0pxTGl0ZT19
ICRyb290RWxlbWVudCBUaGUgcm9vdCBvZiB0aGUgY29tcGlsZSB0cmVlLiBVc2VkIHNvIHRoYXQg
d2UgY2FuIHJlcGxhY2Ugbm9kZXMKKyAgICAgKiAgICBpbiB0aGUgcm9vdCBvZiB0aGUgdHJlZS4K
KyAgICAgKiBAcGFyYW0ge0pxTGl0ZX0gJGVsZW1lbnQgVGhlIGpxTGl0ZSBlbGVtZW50IHdoaWNo
IHdlIGFyZSBnb2luZyB0byByZXBsYWNlLiBXZSBrZWVwIHRoZSBzaGVsbCwKKyAgICAgKiAgICBi
dXQgcmVwbGFjZSBpdHMgRE9NIG5vZGUgcmVmZXJlbmNlLgorICAgICAqIEBwYXJhbSB7Tm9kZX0g
bmV3Tm9kZSBUaGUgbmV3IERPTSBub2RlLgorICAgICAqLworICAgIGZ1bmN0aW9uIHJlcGxhY2VX
aXRoKCRyb290RWxlbWVudCwgJGVsZW1lbnQsIG5ld05vZGUpIHsKKyAgICAgIHZhciBvbGROb2Rl
ID0gJGVsZW1lbnRbMF0sCisgICAgICAgICAgcGFyZW50ID0gb2xkTm9kZS5wYXJlbnROb2RlLAor
ICAgICAgICAgIGksIGlpOworCisgICAgICBpZiAoJHJvb3RFbGVtZW50KSB7CisgICAgICAgIGZv
cihpID0gMCwgaWkgPSAkcm9vdEVsZW1lbnQubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAg
ICAgIGlmICgkcm9vdEVsZW1lbnRbaV0gPT0gb2xkTm9kZSkgeworICAgICAgICAgICAgJHJvb3RF
bGVtZW50W2ldID0gbmV3Tm9kZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAocGFyZW50KSB7CisgICAgICAgIHBhcmVudC5y
ZXBsYWNlQ2hpbGQobmV3Tm9kZSwgb2xkTm9kZSk7CisgICAgICB9CisKKyAgICAgIG5ld05vZGVb
anFMaXRlLmV4cGFuZG9dID0gb2xkTm9kZVtqcUxpdGUuZXhwYW5kb107CisgICAgICAkZWxlbWVu
dFswXSA9IG5ld05vZGU7CisgICAgfQorICB9XTsKK30KKwordmFyIFBSRUZJWF9SRUdFWFAgPSAv
Xih4W1w6XC1fXXxkYXRhW1w6XC1fXSkvaTsKKy8qKgorICogQ29udmVydHMgYWxsIGFjY2VwdGVk
IGRpcmVjdGl2ZXMgZm9ybWF0IGludG8gcHJvcGVyIGRpcmVjdGl2ZSBuYW1lLgorICogQWxsIG9m
IHRoZXNlIHdpbGwgYmVjb21lICdteURpcmVjdGl2ZSc6CisgKiAgIG15OkRpUmVjdGl2ZQorICog
ICBteS1kaXJlY3RpdmUKKyAqICAgeC1teS1kaXJlY3RpdmUKKyAqICAgZGF0YS1teTpkaXJlY3Rp
dmUKKyAqCisgKiBBbHNvIHRoZXJlIGlzIHNwZWNpYWwgY2FzZSBmb3IgTW96IHByZWZpeCBzdGFy
dGluZyB3aXRoIHVwcGVyIGNhc2UgbGV0dGVyLgorICogQHBhcmFtIG5hbWUgTmFtZSB0byBub3Jt
YWxpemUKKyAqLworZnVuY3Rpb24gZGlyZWN0aXZlTm9ybWFsaXplKG5hbWUpIHsKKyAgcmV0dXJu
IGNhbWVsQ2FzZShuYW1lLnJlcGxhY2UoUFJFRklYX1JFR0VYUCwgJycpKTsKK30KKworLyoqCisg
KiBAbmdkb2Mgb2JqZWN0CisgKiBAbmFtZSBuZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRl
cworICogQGRlc2NyaXB0aW9uCisgKgorICogQSBzaGFyZWQgb2JqZWN0IGJldHdlZW4gZGlyZWN0
aXZlIGNvbXBpbGUgLyBsaW5raW5nIGZ1bmN0aW9ucyB3aGljaCBjb250YWlucyBub3JtYWxpemVk
IERPTSBlbGVtZW50CisgKiBhdHRyaWJ1dGVzLiBUaGUgdGhlIHZhbHVlcyByZWZsZWN0IGN1cnJl
bnQgYmluZGluZyBzdGF0ZSBge3sgfX1gLiBUaGUgbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQKKyAq
IHNpbmNlIGFsbCBvZiB0aGVzZSBhcmUgdHJlYXRlZCBhcyBlcXVpdmFsZW50IGluIEFuZ3VsYXI6
CisgKgorICogICAgICAgICAgPHNwYW4gbmc6YmluZD0iYSIgbmctYmluZD0iYSIgZGF0YS1uZy1i
aW5kPSJhIiB4LW5nLWJpbmQ9ImEiPgorICovCisKKy8qKgorICogQG5nZG9jIHByb3BlcnR5Cisg
KiBAbmFtZSBuZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyMkYXR0cgorICogQHByb3Bl
cnR5T2YgbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMKKyAqIEByZXR1cm5zIHtvYmpl
Y3R9IEEgbWFwIG9mIERPTSBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lcyB0byB0aGUgbm9ybWFsaXpl
ZCBuYW1lLiBUaGlzIGlzCisgKiAgICAgICAgICBuZWVkZWQgdG8gZG8gcmV2ZXJzZSBsb29rdXAg
ZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFtZS4KKyAqLworCisKKy8qKgor
ICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBuZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmli
dXRlcyMkc2V0CisgKiBAbWV0aG9kT2YgbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMK
KyAqIEBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogU2V0IERPTSBlbGVtZW50IGF0
dHJpYnV0ZSB2YWx1ZS4KKyAqCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTm9ybWFsaXpl
ZCBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBtb2RpZnkuIFRoZSBu
YW1lIGlzCisgKiAgICAgICAgICByZXZlcnMgdHJhbnNsYXRlZCB1c2luZyB0aGUge0BsaW5rIG5n
LiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRhdHRyICRhdHRyfQorICogICAgICAgICAg
cHJvcGVydHkgdG8gdGhlIG9yaWdpbmFsIG5hbWUuCisgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUg
VmFsdWUgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgdG8uCisgKi8KKworCisKKy8qKgorICogQ2xvc3Vy
ZSBjb21waWxlciB0eXBlIGluZm9ybWF0aW9uCisgKi8KKworZnVuY3Rpb24gbm9kZXNldExpbmtp
bmdGbigKKyAgLyogYW5ndWxhci5TY29wZSAqLyBzY29wZSwKKyAgLyogTm9kZUxpc3QgKi8gbm9k
ZUxpc3QsCisgIC8qIEVsZW1lbnQgKi8gcm9vdEVsZW1lbnQsCisgIC8qIGZ1bmN0aW9uKEZ1bmN0
aW9uKSAqLyBib3VuZFRyYW5zY2x1ZGVGbgorKXt9CisKK2Z1bmN0aW9uIGRpcmVjdGl2ZUxpbmtp
bmdGbigKKyAgLyogbm9kZXNldExpbmtpbmdGbiAqLyBub2Rlc2V0TGlua2luZ0ZuLAorICAvKiBh
bmd1bGFyLlNjb3BlICovIHNjb3BlLAorICAvKiBOb2RlICovIG5vZGUsCisgIC8qIEVsZW1lbnQg
Ki8gcm9vdEVsZW1lbnQsCisgIC8qIGZ1bmN0aW9uKEZ1bmN0aW9uKSAqLyBib3VuZFRyYW5zY2x1
ZGVGbgorKXt9CisKKy8qKgorICogQG5nZG9jIG9iamVjdAorICogQG5hbWUgbmcuJGNvbnRyb2xs
ZXJQcm92aWRlcgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUge0BsaW5rIG5nLiRjb250cm9sbGVy
ICRjb250cm9sbGVyIHNlcnZpY2V9IGlzIHVzZWQgYnkgQW5ndWxhciB0byBjcmVhdGUgbmV3Cisg
KiBjb250cm9sbGVycy4KKyAqCisgKiBUaGlzIHByb3ZpZGVyIGFsbG93cyBjb250cm9sbGVyIHJl
Z2lzdHJhdGlvbiB2aWEgdGhlCisgKiB7QGxpbmsgbmcuJGNvbnRyb2xsZXJQcm92aWRlciNyZWdp
c3RlciByZWdpc3Rlcn0gbWV0aG9kLgorICovCitmdW5jdGlvbiAkQ29udHJvbGxlclByb3ZpZGVy
KCkgeworICB2YXIgY29udHJvbGxlcnMgPSB7fTsKKworCisgIC8qKgorICAgKiBAbmdkb2MgZnVu
Y3Rpb24KKyAgICogQG5hbWUgbmcuJGNvbnRyb2xsZXJQcm92aWRlciNyZWdpc3RlcgorICAgKiBA
bWV0aG9kT2YgbmcuJGNvbnRyb2xsZXJQcm92aWRlcgorICAgKiBAcGFyYW0ge3N0cmluZ30gbmFt
ZSBDb250cm9sbGVyIG5hbWUKKyAgICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gY29uc3RydWN0
b3IgQ29udHJvbGxlciBjb25zdHJ1Y3RvciBmbiAob3B0aW9uYWxseSBkZWNvcmF0ZWQgd2l0aCBE
SQorICAgKiAgICBhbm5vdGF0aW9ucyBpbiB0aGUgYXJyYXkgbm90YXRpb24pLgorICAgKi8KKyAg
dGhpcy5yZWdpc3RlciA9IGZ1bmN0aW9uKG5hbWUsIGNvbnN0cnVjdG9yKSB7CisgICAgaWYgKGlz
T2JqZWN0KG5hbWUpKSB7CisgICAgICBleHRlbmQoY29udHJvbGxlcnMsIG5hbWUpCisgICAgfSBl
bHNlIHsKKyAgICAgIGNvbnRyb2xsZXJzW25hbWVdID0gY29uc3RydWN0b3I7CisgICAgfQorICB9
OworCisKKyAgdGhpcy4kZ2V0ID0gWyckaW5qZWN0b3InLCAnJHdpbmRvdycsIGZ1bmN0aW9uKCRp
bmplY3RvciwgJHdpbmRvdykgeworCisgICAgLyoqCisgICAgICogQG5nZG9jIGZ1bmN0aW9uCisg
ICAgICogQG5hbWUgbmcuJGNvbnRyb2xsZXIKKyAgICAgKiBAcmVxdWlyZXMgJGluamVjdG9yCisg
ICAgICoKKyAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gY29uc3RydWN0b3IgSWYgY2Fs
bGVkIHdpdGggYSBmdW5jdGlvbiB0aGVuIGl0J3MgY29uc2lkZXJlZCB0byBiZSB0aGUKKyAgICAg
KiAgICBjb250cm9sbGVyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiBPdGhlcndpc2UgaXQncyBjb25z
aWRlcmVkIHRvIGJlIGEgc3RyaW5nIHdoaWNoIGlzIHVzZWQKKyAgICAgKiAgICB0byByZXRyaWV2
ZSB0aGUgY29udHJvbGxlciBjb25zdHJ1Y3RvciB1c2luZyB0aGUgZm9sbG93aW5nIHN0ZXBzOgor
ICAgICAqCisgICAgICogICAgKiBjaGVjayBpZiBhIGNvbnRyb2xsZXIgd2l0aCBnaXZlbiBuYW1l
IGlzIHJlZ2lzdGVyZWQgdmlhIGAkY29udHJvbGxlclByb3ZpZGVyYAorICAgICAqICAgICogY2hl
Y2sgaWYgZXZhbHVhdGluZyB0aGUgc3RyaW5nIG9uIHRoZSBjdXJyZW50IHNjb3BlIHJldHVybnMg
YSBjb25zdHJ1Y3RvcgorICAgICAqICAgICogY2hlY2sgYHdpbmRvd1tjb25zdHJ1Y3Rvcl1gIG9u
IHRoZSBnbG9iYWwgYHdpbmRvd2Agb2JqZWN0CisgICAgICoKKyAgICAgKiBAcGFyYW0ge09iamVj
dH0gbG9jYWxzIEluamVjdGlvbiBsb2NhbHMgZm9yIENvbnRyb2xsZXIuCisgICAgICogQHJldHVy
biB7T2JqZWN0fSBJbnN0YW5jZSBvZiBnaXZlbiBjb250cm9sbGVyLgorICAgICAqCisgICAgICog
QGRlc2NyaXB0aW9uCisgICAgICogYCRjb250cm9sbGVyYCBzZXJ2aWNlIGlzIHJlc3BvbnNpYmxl
IGZvciBpbnN0YW50aWF0aW5nIGNvbnRyb2xsZXJzLgorICAgICAqCisgICAgICogSXQncyBqdXN0
IGEgc2ltcGxlIGNhbGwgdG8ge0BsaW5rIEFVVE8uJGluamVjdG9yICRpbmplY3Rvcn0sIGJ1dCBl
eHRyYWN0ZWQgaW50bworICAgICAqIGEgc2VydmljZSwgc28gdGhhdCBvbmUgY2FuIG92ZXJyaWRl
IHRoaXMgc2VydmljZSB3aXRoIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNjQ5Nzg4
CisgICAgICogQkMgdmVyc2lvbn0uCisgICAgICovCisgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnN0
cnVjdG9yLCBsb2NhbHMpIHsKKyAgICAgIGlmKGlzU3RyaW5nKGNvbnN0cnVjdG9yKSkgeworICAg
ICAgICB2YXIgbmFtZSA9IGNvbnN0cnVjdG9yOworICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnRy
b2xsZXJzLmhhc093blByb3BlcnR5KG5hbWUpCisgICAgICAgICAgICA/IGNvbnRyb2xsZXJzW25h
bWVdCisgICAgICAgICAgICA6IGdldHRlcihsb2NhbHMuJHNjb3BlLCBuYW1lLCB0cnVlKSB8fCBn
ZXR0ZXIoJHdpbmRvdywgbmFtZSwgdHJ1ZSk7CisKKyAgICAgICAgYXNzZXJ0QXJnRm4oY29uc3Ry
dWN0b3IsIG5hbWUsIHRydWUpOworICAgICAgfQorCisgICAgICByZXR1cm4gJGluamVjdG9yLmlu
c3RhbnRpYXRlKGNvbnN0cnVjdG9yLCBsb2NhbHMpOworICAgIH07CisgIH1dOworfQorCisvKioK
KyAqIEBuZ2RvYyBvYmplY3QKKyAqIEBuYW1lIG5nLiRkb2N1bWVudAorICogQHJlcXVpcmVzICR3
aW5kb3cKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEEge0BsaW5rIGFuZ3VsYXIuZWxlbWVudCBq
UXVlcnkgKGxpdGUpfS13cmFwcGVkIHJlZmVyZW5jZSB0byB0aGUgYnJvd3NlcidzIGB3aW5kb3cu
ZG9jdW1lbnRgCisgKiBlbGVtZW50LgorICovCitmdW5jdGlvbiAkRG9jdW1lbnRQcm92aWRlcigp
eworICB0aGlzLiRnZXQgPSBbJyR3aW5kb3cnLCBmdW5jdGlvbih3aW5kb3cpeworICAgIHJldHVy
biBqcUxpdGUod2luZG93LmRvY3VtZW50KTsKKyAgfV07Cit9CisKKy8qKgorICogQG5nZG9jIGZ1
bmN0aW9uCisgKiBAbmFtZSBuZy4kZXhjZXB0aW9uSGFuZGxlcgorICogQHJlcXVpcmVzICRsb2cK
KyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEFueSB1bmNhdWdodCBleGNlcHRpb24gaW4gYW5ndWxh
ciBleHByZXNzaW9ucyBpcyBkZWxlZ2F0ZWQgdG8gdGhpcyBzZXJ2aWNlLgorICogVGhlIGRlZmF1
bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IGRlbGVnYXRlcyB0byBgJGxvZy5lcnJvcmAgd2hpY2gg
bG9ncyBpdCBpbnRvCisgKiB0aGUgYnJvd3NlciBjb25zb2xlLgorICoKKyAqIEluIHVuaXQgdGVz
dHMsIGlmIGBhbmd1bGFyLW1vY2tzLmpzYCBpcyBsb2FkZWQsIHRoaXMgc2VydmljZSBpcyBvdmVy
cmlkZGVuIGJ5CisgKiB7QGxpbmsgbmdNb2NrLiRleGNlcHRpb25IYW5kbGVyIG1vY2sgJGV4Y2Vw
dGlvbkhhbmRsZXJ9IHdoaWNoIGFpZHMgaW4gdGVzdGluZy4KKyAqCisgKiBAcGFyYW0ge0Vycm9y
fSBleGNlcHRpb24gRXhjZXB0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3IuCisgKiBAcGFy
YW0ge3N0cmluZz19IGNhdXNlIG9wdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZXh0
IGluIHdoaWNoCisgKiAgICAgICB0aGUgZXJyb3Igd2FzIHRocm93bi4KKyAqCisgKi8KK2Z1bmN0
aW9uICRFeGNlcHRpb25IYW5kbGVyUHJvdmlkZXIoKSB7CisgIHRoaXMuJGdldCA9IFsnJGxvZycs
IGZ1bmN0aW9uKCRsb2cpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZXhjZXB0aW9uLCBjYXVzZSkg
eworICAgICAgJGxvZy5lcnJvci5hcHBseSgkbG9nLCBhcmd1bWVudHMpOworICAgIH07CisgIH1d
OworfQorCisvKioKKyAqIEBuZ2RvYyBvYmplY3QKKyAqIEBuYW1lIG5nLiRpbnRlcnBvbGF0ZVBy
b3ZpZGVyCisgKiBAZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBVc2VkIGZv
ciBjb25maWd1cmluZyB0aGUgaW50ZXJwb2xhdGlvbiBtYXJrdXAuIERlZmF1bHRzIHRvIGB7e2Ag
YW5kIGB9fWAuCisgKi8KK2Z1bmN0aW9uICRJbnRlcnBvbGF0ZVByb3ZpZGVyKCkgeworICB2YXIg
c3RhcnRTeW1ib2wgPSAne3snOworICB2YXIgZW5kU3ltYm9sID0gJ319JzsKKworICAvKioKKyAg
ICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBuZy4kaW50ZXJwb2xhdGVQcm92aWRlciNzdGFy
dFN5bWJvbAorICAgKiBAbWV0aG9kT2YgbmcuJGludGVycG9sYXRlUHJvdmlkZXIKKyAgICogQGRl
c2NyaXB0aW9uCisgICAqIFN5bWJvbCB0byBkZW5vdGUgc3RhcnQgb2YgZXhwcmVzc2lvbiBpbiB0
aGUgaW50ZXJwb2xhdGVkIHN0cmluZy4gRGVmYXVsdHMgdG8gYHt7YC4KKyAgICoKKyAgICogQHBh
cmFtIHtzdHJpbmc9fSB2YWx1ZSBuZXcgdmFsdWUgdG8gc2V0IHRoZSBzdGFydGluZyBzeW1ib2wg
dG8uCisgICAqIEByZXR1cm5zIHtzdHJpbmd8c2VsZn0gUmV0dXJucyB0aGUgc3ltYm9sIHdoZW4g
dXNlZCBhcyBnZXR0ZXIgYW5kIHNlbGYgaWYgdXNlZCBhcyBzZXR0ZXIuCisgICAqLworICB0aGlz
LnN0YXJ0U3ltYm9sID0gZnVuY3Rpb24odmFsdWUpeworICAgIGlmICh2YWx1ZSkgeworICAgICAg
c3RhcnRTeW1ib2wgPSB2YWx1ZTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0gZWxzZSB7Cisg
ICAgICByZXR1cm4gc3RhcnRTeW1ib2w7CisgICAgfQorICB9OworCisgIC8qKgorICAgKiBAbmdk
b2MgbWV0aG9kCisgICAqIEBuYW1lIG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyI2VuZFN5bWJvbAor
ICAgKiBAbWV0aG9kT2YgbmcuJGludGVycG9sYXRlUHJvdmlkZXIKKyAgICogQGRlc2NyaXB0aW9u
CisgICAqIFN5bWJvbCB0byBkZW5vdGUgdGhlIGVuZCBvZiBleHByZXNzaW9uIGluIHRoZSBpbnRl
cnBvbGF0ZWQgc3RyaW5nLiBEZWZhdWx0cyB0byBgfX1gLgorICAgKgorICAgKiBAcGFyYW0ge3N0
cmluZz19IHZhbHVlIG5ldyB2YWx1ZSB0byBzZXQgdGhlIGVuZGluZyBzeW1ib2wgdG8uCisgICAq
IEByZXR1cm5zIHtzdHJpbmd8c2VsZn0gUmV0dXJucyB0aGUgc3ltYm9sIHdoZW4gdXNlZCBhcyBn
ZXR0ZXIgYW5kIHNlbGYgaWYgdXNlZCBhcyBzZXR0ZXIuCisgICAqLworICB0aGlzLmVuZFN5bWJv
bCA9IGZ1bmN0aW9uKHZhbHVlKXsKKyAgICBpZiAodmFsdWUpIHsKKyAgICAgIGVuZFN5bWJvbCA9
IHZhbHVlOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBl
bmRTeW1ib2w7CisgICAgfQorICB9OworCisKKyAgdGhpcy4kZ2V0ID0gWyckcGFyc2UnLCBmdW5j
dGlvbigkcGFyc2UpIHsKKyAgICB2YXIgc3RhcnRTeW1ib2xMZW5ndGggPSBzdGFydFN5bWJvbC5s
ZW5ndGgsCisgICAgICAgIGVuZFN5bWJvbExlbmd0aCA9IGVuZFN5bWJvbC5sZW5ndGg7CisKKyAg
ICAvKioKKyAgICAgKiBAbmdkb2MgZnVuY3Rpb24KKyAgICAgKiBAbmFtZSBuZy4kaW50ZXJwb2xh
dGUKKyAgICAgKiBAZnVuY3Rpb24KKyAgICAgKgorICAgICAqIEByZXF1aXJlcyAkcGFyc2UKKyAg
ICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqCisgICAgICogQ29tcGlsZXMgYSBzdHJp
bmcgd2l0aCBtYXJrdXAgaW50byBhbiBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLiBUaGlzIHNlcnZp
Y2UgaXMgdXNlZCBieSB0aGUKKyAgICAgKiBIVE1MIHtAbGluayBuZy4kY29tcGlsZSAkY29tcGls
ZX0gc2VydmljZSBmb3IgZGF0YSBiaW5kaW5nLiBTZWUKKyAgICAgKiB7QGxpbmsgbmcuJGludGVy
cG9sYXRlUHJvdmlkZXIgJGludGVycG9sYXRlUHJvdmlkZXJ9IGZvciBjb25maWd1cmluZyB0aGUK
KyAgICAgKiBpbnRlcnBvbGF0aW9uIG1hcmt1cC4KKyAgICAgKgorICAgICAqCisgICAgICAgPHBy
ZT4KKyAgICAgICAgIHZhciAkaW50ZXJwb2xhdGUgPSAuLi47IC8vIGluamVjdGVkCisgICAgICAg
ICB2YXIgZXhwID0gJGludGVycG9sYXRlKCdIZWxsbyB7e25hbWV9fSEnKTsKKyAgICAgICAgIGV4
cGVjdChleHAoe25hbWU6J0FuZ3VsYXInfSkudG9FcXVhbCgnSGVsbG8gQW5ndWxhciEnKTsKKyAg
ICAgICA8L3ByZT4KKyAgICAgKgorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQg
VGhlIHRleHQgd2l0aCBtYXJrdXAgdG8gaW50ZXJwb2xhdGUuCisgICAgICogQHBhcmFtIHtib29s
ZWFuPX0gbXVzdEhhdmVFeHByZXNzaW9uIGlmIHNldCB0byB0cnVlIHRoZW4gdGhlIGludGVycG9s
YXRpb24gc3RyaW5nIG11c3QgaGF2ZQorICAgICAqICAgIGVtYmVkZGVkIGV4cHJlc3Npb24gaW4g
b3JkZXIgdG8gcmV0dXJuIGFuIGludGVycG9sYXRpb24gZnVuY3Rpb24uIFN0cmluZ3Mgd2l0aCBu
bworICAgICAqICAgIGVtYmVkZGVkIGV4cHJlc3Npb24gd2lsbCByZXR1cm4gbnVsbCBmb3IgdGhl
IGludGVycG9sYXRpb24gZnVuY3Rpb24uCisgICAgICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRl
eHQpfSBhbiBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIHdoaWNoIGlzIHVzZWQgdG8gY29tcHV0ZSB0
aGUgaW50ZXJwb2xhdGVkCisgICAgICogICAgc3RyaW5nLiBUaGUgZnVuY3Rpb24gaGFzIHRoZXNl
IHBhcmFtZXRlcnM6CisgICAgICoKKyAgICAgKiAgICAqIGBjb250ZXh0YDogYW4gb2JqZWN0IGFn
YWluc3Qgd2hpY2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJpbmdzIGFyZSBl
dmFsdWF0ZWQKKyAgICAgKiAgICAgIGFnYWluc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiAkaW50ZXJwb2xhdGUodGV4dCwgbXVzdEhhdmVFeHByZXNzaW9uKSB7CisgICAgICB2YXIg
c3RhcnRJbmRleCwKKyAgICAgICAgICBlbmRJbmRleCwKKyAgICAgICAgICBpbmRleCA9IDAsCisg
ICAgICAgICAgcGFydHMgPSBbXSwKKyAgICAgICAgICBsZW5ndGggPSB0ZXh0Lmxlbmd0aCwKKyAg
ICAgICAgICBoYXNJbnRlcnBvbGF0aW9uID0gZmFsc2UsCisgICAgICAgICAgZm4sCisgICAgICAg
ICAgZXhwLAorICAgICAgICAgIGNvbmNhdCA9IFtdOworCisgICAgICB3aGlsZShpbmRleCA8IGxl
bmd0aCkgeworICAgICAgICBpZiAoICgoc3RhcnRJbmRleCA9IHRleHQuaW5kZXhPZihzdGFydFN5
bWJvbCwgaW5kZXgpKSAhPSAtMSkgJiYKKyAgICAgICAgICAgICAoKGVuZEluZGV4ID0gdGV4dC5p
bmRleE9mKGVuZFN5bWJvbCwgc3RhcnRJbmRleCArIHN0YXJ0U3ltYm9sTGVuZ3RoKSkgIT0gLTEp
ICkgeworICAgICAgICAgIChpbmRleCAhPSBzdGFydEluZGV4KSAmJiBwYXJ0cy5wdXNoKHRleHQu
c3Vic3RyaW5nKGluZGV4LCBzdGFydEluZGV4KSk7CisgICAgICAgICAgcGFydHMucHVzaChmbiA9
ICRwYXJzZShleHAgPSB0ZXh0LnN1YnN0cmluZyhzdGFydEluZGV4ICsgc3RhcnRTeW1ib2xMZW5n
dGgsIGVuZEluZGV4KSkpOworICAgICAgICAgIGZuLmV4cCA9IGV4cDsKKyAgICAgICAgICBpbmRl
eCA9IGVuZEluZGV4ICsgZW5kU3ltYm9sTGVuZ3RoOworICAgICAgICAgIGhhc0ludGVycG9sYXRp
b24gPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIHdlIGRpZCBub3QgZmlu
ZCBhbnl0aGluZywgc28gd2UgaGF2ZSB0byBhZGQgdGhlIHJlbWFpbmRlciB0byB0aGUgcGFydHMg
YXJyYXkKKyAgICAgICAgICAoaW5kZXggIT0gbGVuZ3RoKSAmJiBwYXJ0cy5wdXNoKHRleHQuc3Vi
c3RyaW5nKGluZGV4KSk7CisgICAgICAgICAgaW5kZXggPSBsZW5ndGg7CisgICAgICAgIH0KKyAg
ICAgIH0KKworICAgICAgaWYgKCEobGVuZ3RoID0gcGFydHMubGVuZ3RoKSkgeworICAgICAgICAv
LyB3ZSBhZGRlZCwgbm90aGluZywgbXVzdCBoYXZlIGJlZW4gYW4gZW1wdHkgc3RyaW5nLgorICAg
ICAgICBwYXJ0cy5wdXNoKCcnKTsKKyAgICAgICAgbGVuZ3RoID0gMTsKKyAgICAgIH0KKworICAg
ICAgaWYgKCFtdXN0SGF2ZUV4cHJlc3Npb24gIHx8IGhhc0ludGVycG9sYXRpb24pIHsKKyAgICAg
ICAgY29uY2F0Lmxlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgZm4gPSBmdW5jdGlvbihjb250ZXh0
KSB7CisgICAgICAgICAgZm9yKHZhciBpID0gMCwgaWkgPSBsZW5ndGgsIHBhcnQ7IGk8aWk7IGkr
KykgeworICAgICAgICAgICAgaWYgKHR5cGVvZiAocGFydCA9IHBhcnRzW2ldKSA9PSAnZnVuY3Rp
b24nKSB7CisgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0KGNvbnRleHQpOworICAgICAgICAgICAg
ICBpZiAocGFydCA9PSBudWxsIHx8IHBhcnQgPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAg
ICAgcGFydCA9ICcnOworICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJ0ICE9ICdz
dHJpbmcnKSB7CisgICAgICAgICAgICAgICAgcGFydCA9IHRvSnNvbihwYXJ0KTsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uY2F0W2ldID0gcGFydDsKKyAg
ICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGNvbmNhdC5qb2luKCcnKTsKKyAgICAgICAgfTsK
KyAgICAgICAgZm4uZXhwID0gdGV4dDsKKyAgICAgICAgZm4ucGFydHMgPSBwYXJ0czsKKyAgICAg
ICAgcmV0dXJuIGZuOworICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogQG5nZG9j
IG1ldGhvZAorICAgICAqIEBuYW1lIG5nLiRpbnRlcnBvbGF0ZSNzdGFydFN5bWJvbAorICAgICAq
IEBtZXRob2RPZiBuZy4kaW50ZXJwb2xhdGUKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBT
eW1ib2wgdG8gZGVub3RlIHRoZSBzdGFydCBvZiBleHByZXNzaW9uIGluIHRoZSBpbnRlcnBvbGF0
ZWQgc3RyaW5nLiBEZWZhdWx0cyB0byBge3tgLgorICAgICAqCisgICAgICogVXNlIHtAbGluayBu
Zy4kaW50ZXJwb2xhdGVQcm92aWRlciNzdGFydFN5bWJvbCAkaW50ZXJwb2xhdGVQcm92aWRlciNz
dGFydFN5bWJvbH0gdG8gY2hhbmdlCisgICAgICogdGhlIHN5bWJvbC4KKyAgICAgKgorICAgICAq
IEByZXR1cm5zIHtzdHJpbmd9IHN0YXJ0IHN5bWJvbC4KKyAgICAgKi8KKyAgICAkaW50ZXJwb2xh
dGUuc3RhcnRTeW1ib2wgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBzdGFydFN5bWJvbDsK
KyAgICB9CisKKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSBu
Zy4kaW50ZXJwb2xhdGUjZW5kU3ltYm9sCisgICAgICogQG1ldGhvZE9mIG5nLiRpbnRlcnBvbGF0
ZQorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFN5bWJvbCB0byBkZW5vdGUgdGhlIGVuZCBv
ZiBleHByZXNzaW9uIGluIHRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nLiBEZWZhdWx0cyB0byBgfX1g
LgorICAgICAqCisgICAgICogVXNlIHtAbGluayBuZy4kaW50ZXJwb2xhdGVQcm92aWRlciNlbmRT
eW1ib2wgJGludGVycG9sYXRlUHJvdmlkZXIjZW5kU3ltYm9sfSB0byBjaGFuZ2UKKyAgICAgKiB0
aGUgc3ltYm9sLgorICAgICAqCisgICAgICogQHJldHVybnMge3N0cmluZ30gc3RhcnQgc3ltYm9s
LgorICAgICAqLworICAgICRpbnRlcnBvbGF0ZS5lbmRTeW1ib2wgPSBmdW5jdGlvbigpIHsKKyAg
ICAgIHJldHVybiBlbmRTeW1ib2w7CisgICAgfQorCisgICAgcmV0dXJuICRpbnRlcnBvbGF0ZTsK
KyAgfV07Cit9CisKK3ZhciBVUkxfTUFUQ0ggPSAvXihbXjpdKyk6XC9cLyhcdys6ezAsMX1cdypA
KT8oXHs/W1x3XC4tXSpcfT8pKDooWzAtOV0rKSk/KFwvW15cPyNdKik/KFw/KFteI10qKSk/KCMo
LiopKT8kLywKKyAgICBQQVRIX01BVENIID0gL14oW15cPyNdKik/KFw/KFteI10qKSk/KCMoLiop
KT8kLywKKyAgICBIQVNIX01BVENIID0gUEFUSF9NQVRDSCwKKyAgICBERUZBVUxUX1BPUlRTID0g
eydodHRwJzogODAsICdodHRwcyc6IDQ0MywgJ2Z0cCc6IDIxfTsKKworCisvKioKKyAqIEVuY29k
ZSBwYXRoIHVzaW5nIGVuY29kZVVyaVNlZ21lbnQsIGlnbm9yaW5nIGZvcndhcmQgc2xhc2hlcwor
ICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gZW5jb2RlCisgKiBAcmV0dXJucyB7
c3RyaW5nfQorICovCitmdW5jdGlvbiBlbmNvZGVQYXRoKHBhdGgpIHsKKyAgdmFyIHNlZ21lbnRz
ID0gcGF0aC5zcGxpdCgnLycpLAorICAgICAgaSA9IHNlZ21lbnRzLmxlbmd0aDsKKworICB3aGls
ZSAoaS0tKSB7CisgICAgc2VnbWVudHNbaV0gPSBlbmNvZGVVcmlTZWdtZW50KHNlZ21lbnRzW2ld
KTsKKyAgfQorCisgIHJldHVybiBzZWdtZW50cy5qb2luKCcvJyk7Cit9CisKK2Z1bmN0aW9uIHN0
cmlwSGFzaCh1cmwpIHsKKyAgcmV0dXJuIHVybC5zcGxpdCgnIycpWzBdOworfQorCisKK2Z1bmN0
aW9uIG1hdGNoVXJsKHVybCwgb2JqKSB7CisgIHZhciBtYXRjaCA9IFVSTF9NQVRDSC5leGVjKHVy
bCk7CisKKyAgbWF0Y2ggPSB7CisgICAgICBwcm90b2NvbDogbWF0Y2hbMV0sCisgICAgICBob3N0
OiBtYXRjaFszXSwKKyAgICAgIHBvcnQ6IGludChtYXRjaFs1XSkgfHwgREVGQVVMVF9QT1JUU1tt
YXRjaFsxXV0gfHwgbnVsbCwKKyAgICAgIHBhdGg6IG1hdGNoWzZdIHx8ICcvJywKKyAgICAgIHNl
YXJjaDogbWF0Y2hbOF0sCisgICAgICBoYXNoOiBtYXRjaFsxMF0KKyAgICB9OworCisgIGlmIChv
YmopIHsKKyAgICBvYmouJCRwcm90b2NvbCA9IG1hdGNoLnByb3RvY29sOworICAgIG9iai4kJGhv
c3QgPSBtYXRjaC5ob3N0OworICAgIG9iai4kJHBvcnQgPSBtYXRjaC5wb3J0OworICB9CisKKyAg
cmV0dXJuIG1hdGNoOworfQorCisKK2Z1bmN0aW9uIGNvbXBvc2VQcm90b2NvbEhvc3RQb3J0KHBy
b3RvY29sLCBob3N0LCBwb3J0KSB7CisgIHJldHVybiBwcm90b2NvbCArICc6Ly8nICsgaG9zdCAr
IChwb3J0ID09IERFRkFVTFRfUE9SVFNbcHJvdG9jb2xdID8gJycgOiAnOicgKyBwb3J0KTsKK30K
KworCitmdW5jdGlvbiBwYXRoUHJlZml4RnJvbUJhc2UoYmFzZVBhdGgpIHsKKyAgcmV0dXJuIGJh
c2VQYXRoLnN1YnN0cigwLCBiYXNlUGF0aC5sYXN0SW5kZXhPZignLycpKTsKK30KKworCitmdW5j
dGlvbiBjb252ZXJ0VG9IdG1sNVVybCh1cmwsIGJhc2VQYXRoLCBoYXNoUHJlZml4KSB7CisgIHZh
ciBtYXRjaCA9IG1hdGNoVXJsKHVybCk7CisKKyAgLy8gYWxyZWFkeSBodG1sNSB1cmwKKyAgaWYg
KGRlY29kZVVSSUNvbXBvbmVudChtYXRjaC5wYXRoKSAhPSBiYXNlUGF0aCB8fCBpc1VuZGVmaW5l
ZChtYXRjaC5oYXNoKSB8fAorICAgICAgbWF0Y2guaGFzaC5pbmRleE9mKGhhc2hQcmVmaXgpICE9
PSAwKSB7CisgICAgcmV0dXJuIHVybDsKKyAgLy8gY29udmVydCBoYXNoYmFuZyB1cmwgLT4gaHRt
bDUgdXJsCisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGNvbXBvc2VQcm90b2NvbEhvc3RQb3J0KG1h
dGNoLnByb3RvY29sLCBtYXRjaC5ob3N0LCBtYXRjaC5wb3J0KSArCisgICAgICAgICAgIHBhdGhQ
cmVmaXhGcm9tQmFzZShiYXNlUGF0aCkgKyBtYXRjaC5oYXNoLnN1YnN0cihoYXNoUHJlZml4Lmxl
bmd0aCk7CisgIH0KK30KKworCitmdW5jdGlvbiBjb252ZXJ0VG9IYXNoYmFuZ1VybCh1cmwsIGJh
c2VQYXRoLCBoYXNoUHJlZml4KSB7CisgIHZhciBtYXRjaCA9IG1hdGNoVXJsKHVybCk7CisKKyAg
Ly8gYWxyZWFkeSBoYXNoYmFuZyB1cmwKKyAgaWYgKGRlY29kZVVSSUNvbXBvbmVudChtYXRjaC5w
YXRoKSA9PSBiYXNlUGF0aCAmJiAhaXNVbmRlZmluZWQobWF0Y2guaGFzaCkgJiYKKyAgICAgIG1h
dGNoLmhhc2guaW5kZXhPZihoYXNoUHJlZml4KSA9PT0gMCkgeworICAgIHJldHVybiB1cmw7Cisg
IC8vIGNvbnZlcnQgaHRtbDUgdXJsIC0+IGhhc2hiYW5nIHVybAorICB9IGVsc2UgeworICAgIHZh
ciBzZWFyY2ggPSBtYXRjaC5zZWFyY2ggJiYgJz8nICsgbWF0Y2guc2VhcmNoIHx8ICcnLAorICAg
ICAgICBoYXNoID0gbWF0Y2guaGFzaCAmJiAnIycgKyBtYXRjaC5oYXNoIHx8ICcnLAorICAgICAg
ICBwYXRoUHJlZml4ID0gcGF0aFByZWZpeEZyb21CYXNlKGJhc2VQYXRoKSwKKyAgICAgICAgcGF0
aCA9IG1hdGNoLnBhdGguc3Vic3RyKHBhdGhQcmVmaXgubGVuZ3RoKTsKKworICAgIGlmIChtYXRj
aC5wYXRoLmluZGV4T2YocGF0aFByZWZpeCkgIT09IDApIHsKKyAgICAgIHRocm93IEVycm9yKCdJ
bnZhbGlkIHVybCAiJyArIHVybCArICciLCBtaXNzaW5nIHBhdGggcHJlZml4ICInICsgcGF0aFBy
ZWZpeCArICciICEnKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29tcG9zZVByb3RvY29sSG9zdFBv
cnQobWF0Y2gucHJvdG9jb2wsIG1hdGNoLmhvc3QsIG1hdGNoLnBvcnQpICsgYmFzZVBhdGggKwor
ICAgICAgICAgICAnIycgKyBoYXNoUHJlZml4ICsgcGF0aCArIHNlYXJjaCArIGhhc2g7CisgIH0K
K30KKworCisvKioKKyAqIExvY2F0aW9uVXJsIHJlcHJlc2VudHMgYW4gdXJsCisgKiBUaGlzIG9i
amVjdCBpcyBleHBvc2VkIGFzICRsb2NhdGlvbiBzZXJ2aWNlIHdoZW4gSFRNTDUgbW9kZSBpcyBl
bmFibGVkIGFuZCBzdXBwb3J0ZWQKKyAqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7c3Ry
aW5nfSB1cmwgSFRNTDUgdXJsCisgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFByZWZpeAorICovCitm
dW5jdGlvbiBMb2NhdGlvblVybCh1cmwsIHBhdGhQcmVmaXgsIGFwcEJhc2VVcmwpIHsKKyAgcGF0
aFByZWZpeCA9IHBhdGhQcmVmaXggfHwgJyc7CisKKyAgLyoqCisgICAqIFBhcnNlIGdpdmVuIGh0
bWw1IChyZWd1bGFyKSB1cmwgc3RyaW5nIGludG8gcHJvcGVydGllcworICAgKiBAcGFyYW0ge3N0
cmluZ30gbmV3QWJzb2x1dGVVcmwgSFRNTDUgdXJsCisgICAqIEBwcml2YXRlCisgICAqLworICB0
aGlzLiQkcGFyc2UgPSBmdW5jdGlvbihuZXdBYnNvbHV0ZVVybCkgeworICAgIHZhciBtYXRjaCA9
IG1hdGNoVXJsKG5ld0Fic29sdXRlVXJsLCB0aGlzKTsKKworICAgIGlmIChtYXRjaC5wYXRoLmlu
ZGV4T2YocGF0aFByZWZpeCkgIT09IDApIHsKKyAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIHVy
bCAiJyArIG5ld0Fic29sdXRlVXJsICsgJyIsIG1pc3NpbmcgcGF0aCBwcmVmaXggIicgKyBwYXRo
UHJlZml4ICsgJyIgIScpOworICAgIH0KKworICAgIHRoaXMuJCRwYXRoID0gZGVjb2RlVVJJQ29t
cG9uZW50KG1hdGNoLnBhdGguc3Vic3RyKHBhdGhQcmVmaXgubGVuZ3RoKSk7CisgICAgdGhpcy4k
JHNlYXJjaCA9IHBhcnNlS2V5VmFsdWUobWF0Y2guc2VhcmNoKTsKKyAgICB0aGlzLiQkaGFzaCA9
IG1hdGNoLmhhc2ggJiYgZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoLmhhc2gpIHx8ICcnOworCisg
ICAgdGhpcy4kJGNvbXBvc2UoKTsKKyAgfTsKKworICAvKioKKyAgICogQ29tcG9zZSB1cmwgYW5k
IHVwZGF0ZSBgYWJzVXJsYCBwcm9wZXJ0eQorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgdGhpcy4k
JGNvbXBvc2UgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgc2VhcmNoID0gdG9LZXlWYWx1ZSh0aGlz
LiQkc2VhcmNoKSwKKyAgICAgICAgaGFzaCA9IHRoaXMuJCRoYXNoID8gJyMnICsgZW5jb2RlVXJp
U2VnbWVudCh0aGlzLiQkaGFzaCkgOiAnJzsKKworICAgIHRoaXMuJCR1cmwgPSBlbmNvZGVQYXRo
KHRoaXMuJCRwYXRoKSArIChzZWFyY2ggPyAnPycgKyBzZWFyY2ggOiAnJykgKyBoYXNoOworICAg
IHRoaXMuJCRhYnNVcmwgPSBjb21wb3NlUHJvdG9jb2xIb3N0UG9ydCh0aGlzLiQkcHJvdG9jb2ws
IHRoaXMuJCRob3N0LCB0aGlzLiQkcG9ydCkgKworICAgICAgICAgICAgICAgICAgICBwYXRoUHJl
Zml4ICsgdGhpcy4kJHVybDsKKyAgfTsKKworCisgIHRoaXMuJCRyZXdyaXRlQXBwVXJsID0gZnVu
Y3Rpb24oYWJzb2x1dGVMaW5rVXJsKSB7CisgICAgaWYoYWJzb2x1dGVMaW5rVXJsLmluZGV4T2Yo
YXBwQmFzZVVybCkgPT0gMCkgeworICAgICAgcmV0dXJuIGFic29sdXRlTGlua1VybDsKKyAgICB9
CisgIH0KKworCisgIHRoaXMuJCRwYXJzZSh1cmwpOworfQorCisKKy8qKgorICogTG9jYXRpb25I
YXNoYmFuZ1VybCByZXByZXNlbnRzIHVybAorICogVGhpcyBvYmplY3QgaXMgZXhwb3NlZCBhcyAk
bG9jYXRpb24gc2VydmljZSB3aGVuIGh0bWw1IGhpc3RvcnkgYXBpIGlzIGRpc2FibGVkIG9yIG5v
dCBzdXBwb3J0ZWQKKyAqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7c3RyaW5nfSB1cmwg
TGVnYWN5IHVybAorICogQHBhcmFtIHtzdHJpbmd9IGhhc2hQcmVmaXggUHJlZml4IGZvciBoYXNo
IHBhcnQgKGNvbnRhaW5pbmcgcGF0aCBhbmQgc2VhcmNoKQorICovCitmdW5jdGlvbiBMb2NhdGlv
bkhhc2hiYW5nVXJsKHVybCwgaGFzaFByZWZpeCwgYXBwQmFzZVVybCkgeworICB2YXIgYmFzZVBh
dGg7CisKKyAgLyoqCisgICAqIFBhcnNlIGdpdmVuIGhhc2hiYW5nIHVybCBpbnRvIHByb3BlcnRp
ZXMKKyAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBIYXNoYmFuZyB1cmwKKyAgICogQHByaXZhdGUK
KyAgICovCisgIHRoaXMuJCRwYXJzZSA9IGZ1bmN0aW9uKHVybCkgeworICAgIHZhciBtYXRjaCA9
IG1hdGNoVXJsKHVybCwgdGhpcyk7CisKKworICAgIGlmIChtYXRjaC5oYXNoICYmIG1hdGNoLmhh
c2guaW5kZXhPZihoYXNoUHJlZml4KSAhPT0gMCkgeworICAgICAgdGhyb3cgRXJyb3IoJ0ludmFs
aWQgdXJsICInICsgdXJsICsgJyIsIG1pc3NpbmcgaGFzaCBwcmVmaXggIicgKyBoYXNoUHJlZml4
ICsgJyIgIScpOworICAgIH0KKworICAgIGJhc2VQYXRoID0gbWF0Y2gucGF0aCArIChtYXRjaC5z
ZWFyY2ggPyAnPycgKyBtYXRjaC5zZWFyY2ggOiAnJyk7CisgICAgbWF0Y2ggPSBIQVNIX01BVENI
LmV4ZWMoKG1hdGNoLmhhc2ggfHwgJycpLnN1YnN0cihoYXNoUHJlZml4Lmxlbmd0aCkpOworICAg
IGlmIChtYXRjaFsxXSkgeworICAgICAgdGhpcy4kJHBhdGggPSAobWF0Y2hbMV0uY2hhckF0KDAp
ID09ICcvJyA/ICcnIDogJy8nKSArIGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFsxXSk7CisgICAg
fSBlbHNlIHsKKyAgICAgIHRoaXMuJCRwYXRoID0gJyc7CisgICAgfQorCisgICAgdGhpcy4kJHNl
YXJjaCA9IHBhcnNlS2V5VmFsdWUobWF0Y2hbM10pOworICAgIHRoaXMuJCRoYXNoID0gbWF0Y2hb
NV0gJiYgZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzVdKSB8fCAnJzsKKworICAgIHRoaXMuJCRj
b21wb3NlKCk7CisgIH07CisKKyAgLyoqCisgICAqIENvbXBvc2UgaGFzaGJhbmcgdXJsIGFuZCB1
cGRhdGUgYGFic1VybGAgcHJvcGVydHkKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuJCRj
b21wb3NlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlYXJjaCA9IHRvS2V5VmFsdWUodGhpcy4k
JHNlYXJjaCksCisgICAgICAgIGhhc2ggPSB0aGlzLiQkaGFzaCA/ICcjJyArIGVuY29kZVVyaVNl
Z21lbnQodGhpcy4kJGhhc2gpIDogJyc7CisKKyAgICB0aGlzLiQkdXJsID0gZW5jb2RlUGF0aCh0
aGlzLiQkcGF0aCkgKyAoc2VhcmNoID8gJz8nICsgc2VhcmNoIDogJycpICsgaGFzaDsKKyAgICB0
aGlzLiQkYWJzVXJsID0gY29tcG9zZVByb3RvY29sSG9zdFBvcnQodGhpcy4kJHByb3RvY29sLCB0
aGlzLiQkaG9zdCwgdGhpcy4kJHBvcnQpICsKKyAgICAgICAgICAgICAgICAgICAgYmFzZVBhdGgg
KyAodGhpcy4kJHVybCA/ICcjJyArIGhhc2hQcmVmaXggKyB0aGlzLiQkdXJsIDogJycpOworICB9
OworCisgIHRoaXMuJCRyZXdyaXRlQXBwVXJsID0gZnVuY3Rpb24oYWJzb2x1dGVMaW5rVXJsKSB7
CisgICAgaWYoYWJzb2x1dGVMaW5rVXJsLmluZGV4T2YoYXBwQmFzZVVybCkgPT0gMCkgeworICAg
ICAgcmV0dXJuIGFic29sdXRlTGlua1VybDsKKyAgICB9CisgIH0KKworCisgIHRoaXMuJCRwYXJz
ZSh1cmwpOworfQorCisKK0xvY2F0aW9uVXJsLnByb3RvdHlwZSA9IHsKKworICAvKioKKyAgICog
SGFzIGFueSBjaGFuZ2UgYmVlbiByZXBsYWNpbmcgPworICAgKiBAcHJpdmF0ZQorICAgKi8KKyAg
JCRyZXBsYWNlOiBmYWxzZSwKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFt
ZSBuZy4kbG9jYXRpb24jYWJzVXJsCisgICAqIEBtZXRob2RPZiBuZy4kbG9jYXRpb24KKyAgICoK
KyAgICogQGRlc2NyaXB0aW9uCisgICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciBvbmx5LgorICAg
KgorICAgKiBSZXR1cm4gZnVsbCB1cmwgcmVwcmVzZW50YXRpb24gd2l0aCBhbGwgc2VnbWVudHMg
ZW5jb2RlZCBhY2NvcmRpbmcgdG8gcnVsZXMgc3BlY2lmaWVkIGluCisgICAqIHtAbGluayBodHRw
Oi8vd3d3LmlldGYub3JnL3JmYy9yZmMzOTg2LnR4dCBSRkMgMzk4Nn0uCisgICAqCisgICAqIEBy
ZXR1cm4ge3N0cmluZ30gZnVsbCB1cmwKKyAgICovCisgIGFic1VybDogbG9jYXRpb25HZXR0ZXIo
JyQkYWJzVXJsJyksCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgbmcu
JGxvY2F0aW9uI3VybAorICAgKiBAbWV0aG9kT2YgbmcuJGxvY2F0aW9uCisgICAqCisgICAqIEBk
ZXNjcmlwdGlvbgorICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgLyBzZXR0ZXIuCisgICAqCisg
ICAqIFJldHVybiB1cmwgKGUuZy4gYC9wYXRoP2E9YiNoYXNoYCkgd2hlbiBjYWxsZWQgd2l0aG91
dCBhbnkgcGFyYW1ldGVyLgorICAgKgorICAgKiBDaGFuZ2UgcGF0aCwgc2VhcmNoIGFuZCBoYXNo
LCB3aGVuIGNhbGxlZCB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIGAkbG9jYXRpb25gLgorICAg
KgorICAgKiBAcGFyYW0ge3N0cmluZz19IHVybCBOZXcgdXJsIHdpdGhvdXQgYmFzZSBwcmVmaXgg
KGUuZy4gYC9wYXRoP2E9YiNoYXNoYCkKKyAgICogQHJldHVybiB7c3RyaW5nfSB1cmwKKyAgICov
CisgIHVybDogZnVuY3Rpb24odXJsLCByZXBsYWNlKSB7CisgICAgaWYgKGlzVW5kZWZpbmVkKHVy
bCkpCisgICAgICByZXR1cm4gdGhpcy4kJHVybDsKKworICAgIHZhciBtYXRjaCA9IFBBVEhfTUFU
Q0guZXhlYyh1cmwpOworICAgIGlmIChtYXRjaFsxXSkgdGhpcy5wYXRoKGRlY29kZVVSSUNvbXBv
bmVudChtYXRjaFsxXSkpOworICAgIGlmIChtYXRjaFsyXSB8fCBtYXRjaFsxXSkgdGhpcy5zZWFy
Y2gobWF0Y2hbM10gfHwgJycpOworICAgIHRoaXMuaGFzaChtYXRjaFs1XSB8fCAnJywgcmVwbGFj
ZSk7CisKKyAgICByZXR1cm4gdGhpczsKKyAgfSwKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhv
ZAorICAgKiBAbmFtZSBuZy4kbG9jYXRpb24jcHJvdG9jb2wKKyAgICogQG1ldGhvZE9mIG5nLiRs
b2NhdGlvbgorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVGhpcyBtZXRob2QgaXMgZ2V0
dGVyIG9ubHkuCisgICAqCisgICAqIFJldHVybiBwcm90b2NvbCBvZiBjdXJyZW50IHVybC4KKyAg
ICoKKyAgICogQHJldHVybiB7c3RyaW5nfSBwcm90b2NvbCBvZiBjdXJyZW50IHVybAorICAgKi8K
KyAgcHJvdG9jb2w6IGxvY2F0aW9uR2V0dGVyKCckJHByb3RvY29sJyksCisKKyAgLyoqCisgICAq
IEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgbmcuJGxvY2F0aW9uI2hvc3QKKyAgICogQG1ldGhv
ZE9mIG5nLiRsb2NhdGlvbgorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVGhpcyBtZXRo
b2QgaXMgZ2V0dGVyIG9ubHkuCisgICAqCisgICAqIFJldHVybiBob3N0IG9mIGN1cnJlbnQgdXJs
LgorICAgKgorICAgKiBAcmV0dXJuIHtzdHJpbmd9IGhvc3Qgb2YgY3VycmVudCB1cmwuCisgICAq
LworICBob3N0OiBsb2NhdGlvbkdldHRlcignJCRob3N0JyksCisKKyAgLyoqCisgICAqIEBuZ2Rv
YyBtZXRob2QKKyAgICogQG5hbWUgbmcuJGxvY2F0aW9uI3BvcnQKKyAgICogQG1ldGhvZE9mIG5n
LiRsb2NhdGlvbgorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVGhpcyBtZXRob2QgaXMg
Z2V0dGVyIG9ubHkuCisgICAqCisgICAqIFJldHVybiBwb3J0IG9mIGN1cnJlbnQgdXJsLgorICAg
KgorICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHBvcnQKKyAgICovCisgIHBvcnQ6IGxvY2F0aW9uR2V0
dGVyKCckJHBvcnQnKSwKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBu
Zy4kbG9jYXRpb24jcGF0aAorICAgKiBAbWV0aG9kT2YgbmcuJGxvY2F0aW9uCisgICAqCisgICAq
IEBkZXNjcmlwdGlvbgorICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgLyBzZXR0ZXIuCisgICAq
CisgICAqIFJldHVybiBwYXRoIG9mIGN1cnJlbnQgdXJsIHdoZW4gY2FsbGVkIHdpdGhvdXQgYW55
IHBhcmFtZXRlci4KKyAgICoKKyAgICogQ2hhbmdlIHBhdGggd2hlbiBjYWxsZWQgd2l0aCBwYXJh
bWV0ZXIgYW5kIHJldHVybiBgJGxvY2F0aW9uYC4KKyAgICoKKyAgICogTm90ZTogUGF0aCBzaG91
bGQgYWx3YXlzIGJlZ2luIHdpdGggZm9yd2FyZCBzbGFzaCAoLyksIHRoaXMgbWV0aG9kIHdpbGwg
YWRkIHRoZSBmb3J3YXJkIHNsYXNoCisgICAqIGlmIGl0IGlzIG1pc3NpbmcuCisgICAqCisgICAq
IEBwYXJhbSB7c3RyaW5nPX0gcGF0aCBOZXcgcGF0aAorICAgKiBAcmV0dXJuIHtzdHJpbmd9IHBh
dGgKKyAgICovCisgIHBhdGg6IGxvY2F0aW9uR2V0dGVyU2V0dGVyKCckJHBhdGgnLCBmdW5jdGlv
bihwYXRoKSB7CisgICAgcmV0dXJuIHBhdGguY2hhckF0KDApID09ICcvJyA/IHBhdGggOiAnLycg
KyBwYXRoOworICB9KSwKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBu
Zy4kbG9jYXRpb24jc2VhcmNoCisgICAqIEBtZXRob2RPZiBuZy4kbG9jYXRpb24KKyAgICoKKyAg
ICogQGRlc2NyaXB0aW9uCisgICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciAvIHNldHRlci4KKyAg
ICoKKyAgICogUmV0dXJuIHNlYXJjaCBwYXJ0IChhcyBvYmplY3QpIG9mIGN1cnJlbnQgdXJsIHdo
ZW4gY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlci4KKyAgICoKKyAgICogQ2hhbmdlIHNlYXJj
aCBwYXJ0IHdoZW4gY2FsbGVkIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gYCRsb2NhdGlvbmAu
CisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdDxzdHJpbmcsc3RyaW5nPj19IHNlYXJj
aCBOZXcgc2VhcmNoIHBhcmFtcyAtIHN0cmluZyBvciBoYXNoIG9iamVjdAorICAgKiBAcGFyYW0g
e3N0cmluZz19IHBhcmFtVmFsdWUgSWYgYHNlYXJjaGAgaXMgYSBzdHJpbmcsIHRoZW4gYHBhcmFt
VmFsdWVgIHdpbGwgb3ZlcnJpZGUgb25seSBhCisgICAqICAgIHNpbmdsZSBzZWFyY2ggcGFyYW1l
dGVyLiBJZiB0aGUgdmFsdWUgaXMgYG51bGxgLCB0aGUgcGFyYW1ldGVyIHdpbGwgYmUgZGVsZXRl
ZC4KKyAgICoKKyAgICogQHJldHVybiB7c3RyaW5nfSBzZWFyY2gKKyAgICovCisgIHNlYXJjaDog
ZnVuY3Rpb24oc2VhcmNoLCBwYXJhbVZhbHVlKSB7CisgICAgaWYgKGlzVW5kZWZpbmVkKHNlYXJj
aCkpCisgICAgICByZXR1cm4gdGhpcy4kJHNlYXJjaDsKKworICAgIGlmIChpc0RlZmluZWQocGFy
YW1WYWx1ZSkpIHsKKyAgICAgIGlmIChwYXJhbVZhbHVlID09PSBudWxsKSB7CisgICAgICAgIGRl
bGV0ZSB0aGlzLiQkc2VhcmNoW3NlYXJjaF07CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlz
LiQkc2VhcmNoW3NlYXJjaF0gPSBwYXJhbVZhbHVlOworICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICB0aGlzLiQkc2VhcmNoID0gaXNTdHJpbmcoc2VhcmNoKSA/IHBhcnNlS2V5VmFsdWUoc2Vh
cmNoKSA6IHNlYXJjaDsKKyAgICB9CisKKyAgICB0aGlzLiQkY29tcG9zZSgpOworICAgIHJldHVy
biB0aGlzOworICB9LAorCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIG5n
LiRsb2NhdGlvbiNoYXNoCisgICAqIEBtZXRob2RPZiBuZy4kbG9jYXRpb24KKyAgICoKKyAgICog
QGRlc2NyaXB0aW9uCisgICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciAvIHNldHRlci4KKyAgICoK
KyAgICogUmV0dXJuIGhhc2ggZnJhZ21lbnQgd2hlbiBjYWxsZWQgd2l0aG91dCBhbnkgcGFyYW1l
dGVyLgorICAgKgorICAgKiBDaGFuZ2UgaGFzaCBmcmFnbWVudCB3aGVuIGNhbGxlZCB3aXRoIHBh
cmFtZXRlciBhbmQgcmV0dXJuIGAkbG9jYXRpb25gLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmlu
Zz19IGhhc2ggTmV3IGhhc2ggZnJhZ21lbnQKKyAgICogQHJldHVybiB7c3RyaW5nfSBoYXNoCisg
ICAqLworICBoYXNoOiBsb2NhdGlvbkdldHRlclNldHRlcignJCRoYXNoJywgaWRlbnRpdHkpLAor
CisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIG5nLiRsb2NhdGlvbiNyZXBs
YWNlCisgICAqIEBtZXRob2RPZiBuZy4kbG9jYXRpb24KKyAgICoKKyAgICogQGRlc2NyaXB0aW9u
CisgICAqIElmIGNhbGxlZCwgYWxsIGNoYW5nZXMgdG8gJGxvY2F0aW9uIGR1cmluZyBjdXJyZW50
IGAkZGlnZXN0YCB3aWxsIGJlIHJlcGxhY2luZyBjdXJyZW50IGhpc3RvcnkKKyAgICogcmVjb3Jk
LCBpbnN0ZWFkIG9mIGFkZGluZyBuZXcgb25lLgorICAgKi8KKyAgcmVwbGFjZTogZnVuY3Rpb24o
KSB7CisgICAgdGhpcy4kJHJlcGxhY2UgPSB0cnVlOworICAgIHJldHVybiB0aGlzOworICB9Cit9
OworCitMb2NhdGlvbkhhc2hiYW5nVXJsLnByb3RvdHlwZSA9IGluaGVyaXQoTG9jYXRpb25Vcmwu
cHJvdG90eXBlKTsKKworZnVuY3Rpb24gTG9jYXRpb25IYXNoYmFuZ0luSHRtbDVVcmwodXJsLCBo
YXNoUHJlZml4LCBhcHBCYXNlVXJsLCBiYXNlRXh0cmEpIHsKKyAgTG9jYXRpb25IYXNoYmFuZ1Vy
bC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCisKKyAgdGhpcy4kJHJld3JpdGVBcHBVcmwgPSBm
dW5jdGlvbihhYnNvbHV0ZUxpbmtVcmwpIHsKKyAgICBpZiAoYWJzb2x1dGVMaW5rVXJsLmluZGV4
T2YoYXBwQmFzZVVybCkgPT0gMCkgeworICAgICAgcmV0dXJuIGFwcEJhc2VVcmwgKyBiYXNlRXh0
cmEgKyAnIycgKyBoYXNoUHJlZml4ICArIGFic29sdXRlTGlua1VybC5zdWJzdHIoYXBwQmFzZVVy
bC5sZW5ndGgpOworICAgIH0KKyAgfQorfQorCitMb2NhdGlvbkhhc2hiYW5nSW5IdG1sNVVybC5w
cm90b3R5cGUgPSBpbmhlcml0KExvY2F0aW9uSGFzaGJhbmdVcmwucHJvdG90eXBlKTsKKworZnVu
Y3Rpb24gbG9jYXRpb25HZXR0ZXIocHJvcGVydHkpIHsKKyAgcmV0dXJuIGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiB0aGlzW3Byb3BlcnR5XTsKKyAgfTsKK30KKworCitmdW5jdGlvbiBsb2NhdGlv
bkdldHRlclNldHRlcihwcm9wZXJ0eSwgcHJlcHJvY2VzcykgeworICByZXR1cm4gZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKQorICAgICAgcmV0dXJuIHRoaXNb
cHJvcGVydHldOworCisgICAgdGhpc1twcm9wZXJ0eV0gPSBwcmVwcm9jZXNzKHZhbHVlKTsKKyAg
ICB0aGlzLiQkY29tcG9zZSgpOworCisgICAgcmV0dXJuIHRoaXM7CisgIH07Cit9CisKKworLyoq
CisgKiBAbmdkb2Mgb2JqZWN0CisgKiBAbmFtZSBuZy4kbG9jYXRpb24KKyAqCisgKiBAcmVxdWly
ZXMgJGJyb3dzZXIKKyAqIEByZXF1aXJlcyAkc25pZmZlcgorICogQHJlcXVpcmVzICRyb290RWxl
bWVudAorICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlICRsb2NhdGlvbiBzZXJ2aWNlIHBhcnNl
cyB0aGUgVVJMIGluIHRoZSBicm93c2VyIGFkZHJlc3MgYmFyIChiYXNlZCBvbiB0aGUKKyAqIHtA
bGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi93aW5kb3cubG9jYXRpb24gd2lu
ZG93LmxvY2F0aW9ufSkgYW5kIG1ha2VzIHRoZSBVUkwKKyAqIGF2YWlsYWJsZSB0byB5b3VyIGFw
cGxpY2F0aW9uLiBDaGFuZ2VzIHRvIHRoZSBVUkwgaW4gdGhlIGFkZHJlc3MgYmFyIGFyZSByZWZs
ZWN0ZWQgaW50bworICogJGxvY2F0aW9uIHNlcnZpY2UgYW5kIGNoYW5nZXMgdG8gJGxvY2F0aW9u
IGFyZSByZWZsZWN0ZWQgaW50byB0aGUgYnJvd3NlciBhZGRyZXNzIGJhci4KKyAqCisgKiAqKlRo
ZSAkbG9jYXRpb24gc2VydmljZToqKgorICoKKyAqIC0gRXhwb3NlcyB0aGUgY3VycmVudCBVUkwg
aW4gdGhlIGJyb3dzZXIgYWRkcmVzcyBiYXIsIHNvIHlvdSBjYW4KKyAqICAgLSBXYXRjaCBhbmQg
b2JzZXJ2ZSB0aGUgVVJMLgorICogICAtIENoYW5nZSB0aGUgVVJMLgorICogLSBTeW5jaHJvbml6
ZXMgdGhlIFVSTCB3aXRoIHRoZSBicm93c2VyIHdoZW4gdGhlIHVzZXIKKyAqICAgLSBDaGFuZ2Vz
IHRoZSBhZGRyZXNzIGJhci4KKyAqICAgLSBDbGlja3MgdGhlIGJhY2sgb3IgZm9yd2FyZCBidXR0
b24gKG9yIGNsaWNrcyBhIEhpc3RvcnkgbGluaykuCisgKiAgIC0gQ2xpY2tzIG9uIGEgbGluay4K
KyAqIC0gUmVwcmVzZW50cyB0aGUgVVJMIG9iamVjdCBhcyBhIHNldCBvZiBtZXRob2RzIChwcm90
b2NvbCwgaG9zdCwgcG9ydCwgcGF0aCwgc2VhcmNoLCBoYXNoKS4KKyAqCisgKiBGb3IgbW9yZSBp
bmZvcm1hdGlvbiBzZWUge0BsaW5rIGd1aWRlL2Rldl9ndWlkZS5zZXJ2aWNlcy4kbG9jYXRpb24g
RGV2ZWxvcGVyIEd1aWRlOiBBbmd1bGFyCisgKiBTZXJ2aWNlczogVXNpbmcgJGxvY2F0aW9ufQor
ICovCisKKy8qKgorICogQG5nZG9jIG9iamVjdAorICogQG5hbWUgbmcuJGxvY2F0aW9uUHJvdmlk
ZXIKKyAqIEBkZXNjcmlwdGlvbgorICogVXNlIHRoZSBgJGxvY2F0aW9uUHJvdmlkZXJgIHRvIGNv
bmZpZ3VyZSBob3cgdGhlIGFwcGxpY2F0aW9uIGRlZXAgbGlua2luZyBwYXRocyBhcmUgc3RvcmVk
LgorICovCitmdW5jdGlvbiAkTG9jYXRpb25Qcm92aWRlcigpeworICB2YXIgaGFzaFByZWZpeCA9
ICcnLAorICAgICAgaHRtbDVNb2RlID0gZmFsc2U7CisKKyAgLyoqCisgICAqIEBuZ2RvYyBwcm9w
ZXJ0eQorICAgKiBAbmFtZSBuZy4kbG9jYXRpb25Qcm92aWRlciNoYXNoUHJlZml4CisgICAqIEBt
ZXRob2RPZiBuZy4kbG9jYXRpb25Qcm92aWRlcgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogQHBh
cmFtIHtzdHJpbmc9fSBwcmVmaXggUHJlZml4IGZvciBoYXNoIHBhcnQgKGNvbnRhaW5pbmcgcGF0
aCBhbmQgc2VhcmNoKQorICAgKiBAcmV0dXJucyB7Kn0gY3VycmVudCB2YWx1ZSBpZiB1c2VkIGFz
IGdldHRlciBvciBpdHNlbGYgKGNoYWluaW5nKSBpZiB1c2VkIGFzIHNldHRlcgorICAgKi8KKyAg
dGhpcy5oYXNoUHJlZml4ID0gZnVuY3Rpb24ocHJlZml4KSB7CisgICAgaWYgKGlzRGVmaW5lZChw
cmVmaXgpKSB7CisgICAgICBoYXNoUHJlZml4ID0gcHJlZml4OworICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBoYXNoUHJlZml4OworICAgIH0KKyAgfTsKKwor
ICAvKioKKyAgICogQG5nZG9jIHByb3BlcnR5CisgICAqIEBuYW1lIG5nLiRsb2NhdGlvblByb3Zp
ZGVyI2h0bWw1TW9kZQorICAgKiBAbWV0aG9kT2YgbmcuJGxvY2F0aW9uUHJvdmlkZXIKKyAgICog
QGRlc2NyaXB0aW9uCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbW9kZSBVc2UgSFRNTDUgc3RyYXRl
Z3kgaWYgYXZhaWxhYmxlLgorICAgKiBAcmV0dXJucyB7Kn0gY3VycmVudCB2YWx1ZSBpZiB1c2Vk
IGFzIGdldHRlciBvciBpdHNlbGYgKGNoYWluaW5nKSBpZiB1c2VkIGFzIHNldHRlcgorICAgKi8K
KyAgdGhpcy5odG1sNU1vZGUgPSBmdW5jdGlvbihtb2RlKSB7CisgICAgaWYgKGlzRGVmaW5lZCht
b2RlKSkgeworICAgICAgaHRtbDVNb2RlID0gbW9kZTsKKyAgICAgIHJldHVybiB0aGlzOworICAg
IH0gZWxzZSB7CisgICAgICByZXR1cm4gaHRtbDVNb2RlOworICAgIH0KKyAgfTsKKworICB0aGlz
LiRnZXQgPSBbJyRyb290U2NvcGUnLCAnJGJyb3dzZXInLCAnJHNuaWZmZXInLCAnJHJvb3RFbGVt
ZW50JywKKyAgICAgIGZ1bmN0aW9uKCAkcm9vdFNjb3BlLCAgICRicm93c2VyLCAgICRzbmlmZmVy
LCAgICRyb290RWxlbWVudCkgeworICAgIHZhciAkbG9jYXRpb24sCisgICAgICAgIGJhc2VQYXRo
LAorICAgICAgICBwYXRoUHJlZml4LAorICAgICAgICBpbml0VXJsID0gJGJyb3dzZXIudXJsKCks
CisgICAgICAgIGluaXRVcmxQYXJ0cyA9IG1hdGNoVXJsKGluaXRVcmwpLAorICAgICAgICBhcHBC
YXNlVXJsOworCisgICAgaWYgKGh0bWw1TW9kZSkgeworICAgICAgYmFzZVBhdGggPSAkYnJvd3Nl
ci5iYXNlSHJlZigpIHx8ICcvJzsKKyAgICAgIHBhdGhQcmVmaXggPSBwYXRoUHJlZml4RnJvbUJh
c2UoYmFzZVBhdGgpOworICAgICAgYXBwQmFzZVVybCA9CisgICAgICAgICAgY29tcG9zZVByb3Rv
Y29sSG9zdFBvcnQoaW5pdFVybFBhcnRzLnByb3RvY29sLCBpbml0VXJsUGFydHMuaG9zdCwgaW5p
dFVybFBhcnRzLnBvcnQpICsKKyAgICAgICAgICBwYXRoUHJlZml4ICsgJy8nOworCisgICAgICBp
ZiAoJHNuaWZmZXIuaGlzdG9yeSkgeworICAgICAgICAkbG9jYXRpb24gPSBuZXcgTG9jYXRpb25V
cmwoCisgICAgICAgICAgY29udmVydFRvSHRtbDVVcmwoaW5pdFVybCwgYmFzZVBhdGgsIGhhc2hQ
cmVmaXgpLAorICAgICAgICAgIHBhdGhQcmVmaXgsIGFwcEJhc2VVcmwpOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgJGxvY2F0aW9uID0gbmV3IExvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsKAor
ICAgICAgICAgIGNvbnZlcnRUb0hhc2hiYW5nVXJsKGluaXRVcmwsIGJhc2VQYXRoLCBoYXNoUHJl
Zml4KSwKKyAgICAgICAgICBoYXNoUHJlZml4LCBhcHBCYXNlVXJsLCBiYXNlUGF0aC5zdWJzdHIo
cGF0aFByZWZpeC5sZW5ndGggKyAxKSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGFw
cEJhc2VVcmwgPQorICAgICAgICAgIGNvbXBvc2VQcm90b2NvbEhvc3RQb3J0KGluaXRVcmxQYXJ0
cy5wcm90b2NvbCwgaW5pdFVybFBhcnRzLmhvc3QsIGluaXRVcmxQYXJ0cy5wb3J0KSArCisgICAg
ICAgICAgKGluaXRVcmxQYXJ0cy5wYXRoIHx8ICcnKSArCisgICAgICAgICAgKGluaXRVcmxQYXJ0
cy5zZWFyY2ggPyAoJz8nICsgaW5pdFVybFBhcnRzLnNlYXJjaCkgOiAnJykgKworICAgICAgICAg
ICcjJyArIGhhc2hQcmVmaXggKyAnLyc7CisKKyAgICAgICRsb2NhdGlvbiA9IG5ldyBMb2NhdGlv
bkhhc2hiYW5nVXJsKGluaXRVcmwsIGhhc2hQcmVmaXgsIGFwcEJhc2VVcmwpOworICAgIH0KKwor
ICAgICRyb290RWxlbWVudC5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAv
LyBUT0RPKHZvanRhKTogcmV3cml0ZSBsaW5rIHdoZW4gb3BlbmluZyBpbiBuZXcgdGFiL3dpbmRv
dyAoaW4gbGVnYWN5IGJyb3dzZXIpCisgICAgICAvLyBjdXJyZW50bHkgd2Ugb3BlbiBuaWNlIHVy
bCBsaW5rIGFuZCByZWRpcmVjdCB0aGVuCisKKyAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2
ZW50Lm1ldGFLZXkgfHwgZXZlbnQud2hpY2ggPT0gMikgcmV0dXJuOworCisgICAgICB2YXIgZWxt
ID0ganFMaXRlKGV2ZW50LnRhcmdldCk7CisKKyAgICAgIC8vIHRyYXZlcnNlIHRoZSBET00gdXAg
dG8gZmluZCBmaXJzdCBBIHRhZworICAgICAgd2hpbGUgKGxvd2VyY2FzZShlbG1bMF0ubm9kZU5h
bWUpICE9PSAnYScpIHsKKyAgICAgICAgLy8gaWdub3JlIHJld3JpdGluZyBpZiBubyBBIHRhZyAo
cmVhY2hlZCByb290IGVsZW1lbnQsIG9yIG5vIHBhcmVudCAtIHJlbW92ZWQgZnJvbSBkb2N1bWVu
dCkKKyAgICAgICAgaWYgKGVsbVswXSA9PT0gJHJvb3RFbGVtZW50WzBdIHx8ICEoZWxtID0gZWxt
LnBhcmVudCgpKVswXSkgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgYWJzSHJlZiA9IGVs
bS5wcm9wKCdocmVmJyksCisgICAgICAgICAgcmV3cml0dGVuVXJsID0gJGxvY2F0aW9uLiQkcmV3
cml0ZUFwcFVybChhYnNIcmVmKTsKKworICAgICAgaWYgKGFic0hyZWYgJiYgIWVsbS5hdHRyKCd0
YXJnZXQnKSAmJiByZXdyaXR0ZW5VcmwpIHsKKyAgICAgICAgLy8gdXBkYXRlIGxvY2F0aW9uIG1h
bnVhbGx5CisgICAgICAgICRsb2NhdGlvbi4kJHBhcnNlKHJld3JpdHRlblVybCk7CisgICAgICAg
ICRyb290U2NvcGUuJGFwcGx5KCk7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cisg
ICAgICAgIC8vIGhhY2sgdG8gd29yayBhcm91bmQgRkY2IGJ1ZyA2ODQyMDggd2hlbiBzY2VuYXJp
byBydW5uZXIgY2xpY2tzIG9uIGxpbmtzCisgICAgICAgIHdpbmRvdy5hbmd1bGFyWydmZi02ODQy
MDgtcHJldmVudERlZmF1bHQnXSA9IHRydWU7CisgICAgICB9CisgICAgfSk7CisKKworICAgIC8v
IHJld3JpdGUgaGFzaGJhbmcgdXJsIDw+IGh0bWw1IHVybAorICAgIGlmICgkbG9jYXRpb24uYWJz
VXJsKCkgIT0gaW5pdFVybCkgeworICAgICAgJGJyb3dzZXIudXJsKCRsb2NhdGlvbi5hYnNVcmwo
KSwgdHJ1ZSk7CisgICAgfQorCisgICAgLy8gdXBkYXRlICRsb2NhdGlvbiB3aGVuICRicm93c2Vy
IHVybCBjaGFuZ2VzCisgICAgJGJyb3dzZXIub25VcmxDaGFuZ2UoZnVuY3Rpb24obmV3VXJsKSB7
CisgICAgICBpZiAoJGxvY2F0aW9uLmFic1VybCgpICE9IG5ld1VybCkgeworICAgICAgICBpZiAo
JHJvb3RTY29wZS4kYnJvYWRjYXN0KCckbG9jYXRpb25DaGFuZ2VTdGFydCcsIG5ld1VybCwgJGxv
Y2F0aW9uLmFic1VybCgpKS5kZWZhdWx0UHJldmVudGVkKSB7CisgICAgICAgICAgJGJyb3dzZXIu
dXJsKCRsb2NhdGlvbi5hYnNVcmwoKSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgICRyb290U2NvcGUuJGV2YWxBc3luYyhmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIg
b2xkVXJsID0gJGxvY2F0aW9uLmFic1VybCgpOworCisgICAgICAgICAgJGxvY2F0aW9uLiQkcGFy
c2UobmV3VXJsKTsKKyAgICAgICAgICBhZnRlckxvY2F0aW9uQ2hhbmdlKG9sZFVybCk7CisgICAg
ICAgIH0pOworICAgICAgICBpZiAoISRyb290U2NvcGUuJCRwaGFzZSkgJHJvb3RTY29wZS4kZGln
ZXN0KCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICAvLyB1cGRhdGUgYnJvd3NlcgorICAgIHZh
ciBjaGFuZ2VDb3VudGVyID0gMDsKKyAgICAkcm9vdFNjb3BlLiR3YXRjaChmdW5jdGlvbiAkbG9j
YXRpb25XYXRjaCgpIHsKKyAgICAgIHZhciBvbGRVcmwgPSAkYnJvd3Nlci51cmwoKTsKKyAgICAg
IHZhciBjdXJyZW50UmVwbGFjZSA9ICRsb2NhdGlvbi4kJHJlcGxhY2U7CisKKyAgICAgIGlmICgh
Y2hhbmdlQ291bnRlciB8fCBvbGRVcmwgIT0gJGxvY2F0aW9uLmFic1VybCgpKSB7CisgICAgICAg
IGNoYW5nZUNvdW50ZXIrKzsKKyAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5jKGZ1bmN0aW9u
KCkgeworICAgICAgICAgIGlmICgkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRsb2NhdGlvbkNoYW5n
ZVN0YXJ0JywgJGxvY2F0aW9uLmFic1VybCgpLCBvbGRVcmwpLgorICAgICAgICAgICAgICBkZWZh
dWx0UHJldmVudGVkKSB7CisgICAgICAgICAgICAkbG9jYXRpb24uJCRwYXJzZShvbGRVcmwpOwor
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkYnJvd3Nlci51cmwoJGxvY2F0aW9uLmFi
c1VybCgpLCBjdXJyZW50UmVwbGFjZSk7CisgICAgICAgICAgICBhZnRlckxvY2F0aW9uQ2hhbmdl
KG9sZFVybCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICAgICRsb2Nh
dGlvbi4kJHJlcGxhY2UgPSBmYWxzZTsKKworICAgICAgcmV0dXJuIGNoYW5nZUNvdW50ZXI7Cisg
ICAgfSk7CisKKyAgICByZXR1cm4gJGxvY2F0aW9uOworCisgICAgZnVuY3Rpb24gYWZ0ZXJMb2Nh
dGlvbkNoYW5nZShvbGRVcmwpIHsKKyAgICAgICRyb290U2NvcGUuJGJyb2FkY2FzdCgnJGxvY2F0
aW9uQ2hhbmdlU3VjY2VzcycsICRsb2NhdGlvbi5hYnNVcmwoKSwgb2xkVXJsKTsKKyAgICB9Cit9
XTsKK30KKworLyoqCisgKiBAbmdkb2Mgb2JqZWN0CisgKiBAbmFtZSBuZy4kbG9nCisgKiBAcmVx
dWlyZXMgJHdpbmRvdworICoKKyAqIEBkZXNjcmlwdGlvbgorICogU2ltcGxlIHNlcnZpY2UgZm9y
IGxvZ2dpbmcuIERlZmF1bHQgaW1wbGVtZW50YXRpb24gd3JpdGVzIHRoZSBtZXNzYWdlCisgKiBp
bnRvIHRoZSBicm93c2VyJ3MgY29uc29sZSAoaWYgcHJlc2VudCkuCisgKgorICogVGhlIG1haW4g
cHVycG9zZSBvZiB0aGlzIHNlcnZpY2UgaXMgdG8gc2ltcGxpZnkgZGVidWdnaW5nIGFuZCB0cm91
Ymxlc2hvb3RpbmcuCisgKgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBu
YW1lPSJzY3JpcHQuanMiPgorICAgICAgIGZ1bmN0aW9uIExvZ0N0cmwoJHNjb3BlLCAkbG9nKSB7
CisgICAgICAgICAkc2NvcGUuJGxvZyA9ICRsb2c7CisgICAgICAgICAkc2NvcGUubWVzc2FnZSA9
ICdIZWxsbyBXb3JsZCEnOworICAgICAgIH0KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1l
PSJpbmRleC5odG1sIj4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkxvZ0N0cmwiPgorICAg
ICAgICAgPHA+UmVsb2FkIHRoaXMgcGFnZSB3aXRoIG9wZW4gY29uc29sZSwgZW50ZXIgdGV4dCBh
bmQgaGl0IHRoZSBsb2cgYnV0dG9uLi4uPC9wPgorICAgICAgICAgTWVzc2FnZToKKyAgICAgICAg
IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ibWVzc2FnZSIvPgorICAgICAgICAgPGJ1dHRv
biBuZy1jbGljaz0iJGxvZy5sb2cobWVzc2FnZSkiPmxvZzwvYnV0dG9uPgorICAgICAgICAgPGJ1
dHRvbiBuZy1jbGljaz0iJGxvZy53YXJuKG1lc3NhZ2UpIj53YXJuPC9idXR0b24+CisgICAgICAg
ICA8YnV0dG9uIG5nLWNsaWNrPSIkbG9nLmluZm8obWVzc2FnZSkiPmluZm88L2J1dHRvbj4KKyAg
ICAgICAgIDxidXR0b24gbmctY2xpY2s9IiRsb2cuZXJyb3IobWVzc2FnZSkiPmVycm9yPC9idXR0
b24+CisgICAgICAgPC9kaXY+CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLworCitm
dW5jdGlvbiAkTG9nUHJvdmlkZXIoKXsKKyAgdGhpcy4kZ2V0ID0gWyckd2luZG93JywgZnVuY3Rp
b24oJHdpbmRvdyl7CisgICAgcmV0dXJuIHsKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgICogQG5hbWUgbmcuJGxvZyNsb2cKKyAgICAgICAqIEBtZXRob2RPZiBuZy4k
bG9nCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBXcml0ZSBhIGxv
ZyBtZXNzYWdlCisgICAgICAgKi8KKyAgICAgIGxvZzogY29uc29sZUxvZygnbG9nJyksCisKKyAg
ICAgIC8qKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgbmcuJGxvZyN3
YXJuCisgICAgICAgKiBAbWV0aG9kT2YgbmcuJGxvZworICAgICAgICoKKyAgICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAgICogV3JpdGUgYSB3YXJuaW5nIG1lc3NhZ2UKKyAgICAgICAqLworICAg
ICAgd2FybjogY29uc29sZUxvZygnd2FybicpLAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2Rv
YyBtZXRob2QKKyAgICAgICAqIEBuYW1lIG5nLiRsb2cjaW5mbworICAgICAgICogQG1ldGhvZE9m
IG5nLiRsb2cKKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIFdyaXRl
IGFuIGluZm9ybWF0aW9uIG1lc3NhZ2UKKyAgICAgICAqLworICAgICAgaW5mbzogY29uc29sZUxv
ZygnaW5mbycpLAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAq
IEBuYW1lIG5nLiRsb2cjZXJyb3IKKyAgICAgICAqIEBtZXRob2RPZiBuZy4kbG9nCisgICAgICAg
KgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBXcml0ZSBhbiBlcnJvciBtZXNzYWdl
CisgICAgICAgKi8KKyAgICAgIGVycm9yOiBjb25zb2xlTG9nKCdlcnJvcicpCisgICAgfTsKKwor
ICAgIGZ1bmN0aW9uIGZvcm1hdEVycm9yKGFyZykgeworICAgICAgaWYgKGFyZyBpbnN0YW5jZW9m
IEVycm9yKSB7CisgICAgICAgIGlmIChhcmcuc3RhY2spIHsKKyAgICAgICAgICBhcmcgPSAoYXJn
Lm1lc3NhZ2UgJiYgYXJnLnN0YWNrLmluZGV4T2YoYXJnLm1lc3NhZ2UpID09PSAtMSkKKyAgICAg
ICAgICAgICAgPyAnRXJyb3I6ICcgKyBhcmcubWVzc2FnZSArICdcbicgKyBhcmcuc3RhY2sKKyAg
ICAgICAgICAgICAgOiBhcmcuc3RhY2s7CisgICAgICAgIH0gZWxzZSBpZiAoYXJnLnNvdXJjZVVS
TCkgeworICAgICAgICAgIGFyZyA9IGFyZy5tZXNzYWdlICsgJ1xuJyArIGFyZy5zb3VyY2VVUkwg
KyAnOicgKyBhcmcubGluZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIGFyZzsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBjb25zb2xlTG9nKHR5cGUpIHsKKyAgICAgIHZhciBjb25z
b2xlID0gJHdpbmRvdy5jb25zb2xlIHx8IHt9LAorICAgICAgICAgIGxvZ0ZuID0gY29uc29sZVt0
eXBlXSB8fCBjb25zb2xlLmxvZyB8fCBub29wOworCisgICAgICBpZiAobG9nRm4uYXBwbHkpIHsK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBhcmdzID0gW107Cisg
ICAgICAgICAgZm9yRWFjaChhcmd1bWVudHMsIGZ1bmN0aW9uKGFyZykgeworICAgICAgICAgICAg
YXJncy5wdXNoKGZvcm1hdEVycm9yKGFyZykpOworICAgICAgICAgIH0pOworICAgICAgICAgIHJl
dHVybiBsb2dGbi5hcHBseShjb25zb2xlLCBhcmdzKTsKKyAgICAgICAgfTsKKyAgICAgIH0KKwor
ICAgICAgLy8gd2UgYXJlIElFIHdoaWNoIGVpdGhlciBkb2Vzbid0IGhhdmUgd2luZG93LmNvbnNv
bGUgPT4gdGhpcyBpcyBub29wIGFuZCB3ZSBkbyBub3RoaW5nLAorICAgICAgLy8gb3Igd2UgYXJl
IElFIHdoZXJlIGNvbnNvbGUubG9nIGRvZXNuJ3QgaGF2ZSBhcHBseSBzbyB3ZSBsb2cgYXQgbGVh
c3QgZmlyc3QgMiBhcmdzCisgICAgICByZXR1cm4gZnVuY3Rpb24oYXJnMSwgYXJnMikgeworICAg
ICAgICBsb2dGbihhcmcxLCBhcmcyKTsKKyAgICAgIH0KKyAgICB9CisgIH1dOworfQorCit2YXIg
T1BFUkFUT1JTID0geworICAgICdudWxsJzpmdW5jdGlvbigpe3JldHVybiBudWxsO30sCisgICAg
J3RydWUnOmZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSwKKyAgICAnZmFsc2UnOmZ1bmN0aW9uKCl7
cmV0dXJuIGZhbHNlO30sCisgICAgdW5kZWZpbmVkOm5vb3AsCisgICAgJysnOmZ1bmN0aW9uKHNl
bGYsIGxvY2FscywgYSxiKXsKKyAgICAgIGE9YShzZWxmLCBsb2NhbHMpOyBiPWIoc2VsZiwgbG9j
YWxzKTsKKyAgICAgIGlmIChpc0RlZmluZWQoYSkpIHsKKyAgICAgICAgaWYgKGlzRGVmaW5lZChi
KSkgeworICAgICAgICAgIHJldHVybiBhICsgYjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
YTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBpc0RlZmluZWQoYik/Yjp1bmRlZmluZWQ7fSwKKyAg
ICAnLSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe2E9YShzZWxmLCBsb2NhbHMpOyBiPWIo
c2VsZiwgbG9jYWxzKTsgcmV0dXJuIChpc0RlZmluZWQoYSk/YTowKS0oaXNEZWZpbmVkKGIpP2I6
MCk7fSwKKyAgICAnKic6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe3JldHVybiBhKHNlbGYs
IGxvY2FscykqYihzZWxmLCBsb2NhbHMpO30sCisgICAgJy8nOmZ1bmN0aW9uKHNlbGYsIGxvY2Fs
cywgYSxiKXtyZXR1cm4gYShzZWxmLCBsb2NhbHMpL2Ioc2VsZiwgbG9jYWxzKTt9LAorICAgICcl
JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsYil7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSViKHNl
bGYsIGxvY2Fscyk7fSwKKyAgICAnXic6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe3JldHVy
biBhKHNlbGYsIGxvY2FscyleYihzZWxmLCBsb2NhbHMpO30sCisgICAgJz0nOm5vb3AsCisgICAg
Jz09JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsYil7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKT09
YihzZWxmLCBsb2NhbHMpO30sCisgICAgJyE9JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsYil7
cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSE9YihzZWxmLCBsb2NhbHMpO30sCisgICAgJzwnOmZ1bmN0
aW9uKHNlbGYsIGxvY2FscywgYSxiKXtyZXR1cm4gYShzZWxmLCBsb2NhbHMpPGIoc2VsZiwgbG9j
YWxzKTt9LAorICAgICc+JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsYil7cmV0dXJuIGEoc2Vs
ZiwgbG9jYWxzKT5iKHNlbGYsIGxvY2Fscyk7fSwKKyAgICAnPD0nOmZ1bmN0aW9uKHNlbGYsIGxv
Y2FscywgYSxiKXtyZXR1cm4gYShzZWxmLCBsb2NhbHMpPD1iKHNlbGYsIGxvY2Fscyk7fSwKKyAg
ICAnPj0nOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSxiKXtyZXR1cm4gYShzZWxmLCBsb2NhbHMp
Pj1iKHNlbGYsIGxvY2Fscyk7fSwKKyAgICAnJiYnOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSxi
KXtyZXR1cm4gYShzZWxmLCBsb2NhbHMpJiZiKHNlbGYsIGxvY2Fscyk7fSwKKyAgICAnfHwnOmZ1
bmN0aW9uKHNlbGYsIGxvY2FscywgYSxiKXtyZXR1cm4gYShzZWxmLCBsb2NhbHMpfHxiKHNlbGYs
IGxvY2Fscyk7fSwKKyAgICAnJic6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe3JldHVybiBh
KHNlbGYsIGxvY2FscykmYihzZWxmLCBsb2NhbHMpO30sCisvLyAgICAnfCc6ZnVuY3Rpb24oc2Vs
ZiwgbG9jYWxzLCBhLGIpe3JldHVybiBhfGI7fSwKKyAgICAnfCc6ZnVuY3Rpb24oc2VsZiwgbG9j
YWxzLCBhLGIpe3JldHVybiBiKHNlbGYsIGxvY2Fscykoc2VsZiwgbG9jYWxzLCBhKHNlbGYsIGxv
Y2FscykpO30sCisgICAgJyEnOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSl7cmV0dXJuICFhKHNl
bGYsIGxvY2Fscyk7fQorfTsKK3ZhciBFU0NBUEUgPSB7Im4iOiJcbiIsICJmIjoiXGYiLCAiciI6
IlxyIiwgInQiOiJcdCIsICJ2IjoiXHYiLCAiJyI6IiciLCAnIic6JyInfTsKKworZnVuY3Rpb24g
bGV4KHRleHQsIGNzcCl7CisgIHZhciB0b2tlbnMgPSBbXSwKKyAgICAgIHRva2VuLAorICAgICAg
aW5kZXggPSAwLAorICAgICAganNvbiA9IFtdLAorICAgICAgY2gsCisgICAgICBsYXN0Q2ggPSAn
Oic7IC8vIGNhbiBzdGFydCByZWdleHAKKworICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCkg
eworICAgIGNoID0gdGV4dC5jaGFyQXQoaW5kZXgpOworICAgIGlmIChpcygnIlwnJykpIHsKKyAg
ICAgIHJlYWRTdHJpbmcoY2gpOworICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoY2gpIHx8IGlzKCcu
JykgJiYgaXNOdW1iZXIocGVlaygpKSkgeworICAgICAgcmVhZE51bWJlcigpOworICAgIH0gZWxz
ZSBpZiAoaXNJZGVudChjaCkpIHsKKyAgICAgIHJlYWRJZGVudCgpOworICAgICAgLy8gaWRlbnRp
ZmllcnMgY2FuIG9ubHkgYmUgaWYgdGhlIHByZWNlZGluZyBjaGFyIHdhcyBhIHsgb3IgLAorICAg
ICAgaWYgKHdhcygneywnKSAmJiBqc29uWzBdPT0neycgJiYKKyAgICAgICAgICh0b2tlbj10b2tl
bnNbdG9rZW5zLmxlbmd0aC0xXSkpIHsKKyAgICAgICAgdG9rZW4uanNvbiA9IHRva2VuLnRleHQu
aW5kZXhPZignLicpID09IC0xOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoaXMoJygpe31bXS4s
OzonKSkgeworICAgICAgdG9rZW5zLnB1c2goeworICAgICAgICBpbmRleDppbmRleCwKKyAgICAg
ICAgdGV4dDpjaCwKKyAgICAgICAganNvbjood2FzKCc6WywnKSAmJiBpcygne1snKSkgfHwgaXMo
J31dOiwnKQorICAgICAgfSk7CisgICAgICBpZiAoaXMoJ3tbJykpIGpzb24udW5zaGlmdChjaCk7
CisgICAgICBpZiAoaXMoJ31dJykpIGpzb24uc2hpZnQoKTsKKyAgICAgIGluZGV4Kys7CisgICAg
fSBlbHNlIGlmIChpc1doaXRlc3BhY2UoY2gpKSB7CisgICAgICBpbmRleCsrOworICAgICAgY29u
dGludWU7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBjaDIgPSBjaCArIHBlZWsoKSwKKyAgICAg
ICAgICBmbiA9IE9QRVJBVE9SU1tjaF0sCisgICAgICAgICAgZm4yID0gT1BFUkFUT1JTW2NoMl07
CisgICAgICBpZiAoZm4yKSB7CisgICAgICAgIHRva2Vucy5wdXNoKHtpbmRleDppbmRleCwgdGV4
dDpjaDIsIGZuOmZuMn0pOworICAgICAgICBpbmRleCArPSAyOworICAgICAgfSBlbHNlIGlmIChm
bikgeworICAgICAgICB0b2tlbnMucHVzaCh7aW5kZXg6aW5kZXgsIHRleHQ6Y2gsIGZuOmZuLCBq
c29uOiB3YXMoJ1ssOicpICYmIGlzKCcrLScpfSk7CisgICAgICAgIGluZGV4ICs9IDE7CisgICAg
ICB9IGVsc2UgeworICAgICAgICB0aHJvd0Vycm9yKCJVbmV4cGVjdGVkIG5leHQgY2hhcmFjdGVy
ICIsIGluZGV4LCBpbmRleCsxKTsKKyAgICAgIH0KKyAgICB9CisgICAgbGFzdENoID0gY2g7Cisg
IH0KKyAgcmV0dXJuIHRva2VuczsKKworICBmdW5jdGlvbiBpcyhjaGFycykgeworICAgIHJldHVy
biBjaGFycy5pbmRleE9mKGNoKSAhPSAtMTsKKyAgfQorCisgIGZ1bmN0aW9uIHdhcyhjaGFycykg
eworICAgIHJldHVybiBjaGFycy5pbmRleE9mKGxhc3RDaCkgIT0gLTE7CisgIH0KKworICBmdW5j
dGlvbiBwZWVrKCkgeworICAgIHJldHVybiBpbmRleCArIDEgPCB0ZXh0Lmxlbmd0aCA/IHRleHQu
Y2hhckF0KGluZGV4ICsgMSkgOiBmYWxzZTsKKyAgfQorICBmdW5jdGlvbiBpc051bWJlcihjaCkg
eworICAgIHJldHVybiAnMCcgPD0gY2ggJiYgY2ggPD0gJzknOworICB9CisgIGZ1bmN0aW9uIGlz
V2hpdGVzcGFjZShjaCkgeworICAgIHJldHVybiBjaCA9PSAnICcgfHwgY2ggPT0gJ1xyJyB8fCBj
aCA9PSAnXHQnIHx8CisgICAgICAgICAgIGNoID09ICdcbicgfHwgY2ggPT0gJ1x2JyB8fCBjaCA9
PSAnXHUwMEEwJzsgLy8gSUUgdHJlYXRzIG5vbi1icmVha2luZyBzcGFjZSBhcyBcdTAwQTAKKyAg
fQorICBmdW5jdGlvbiBpc0lkZW50KGNoKSB7CisgICAgcmV0dXJuICdhJyA8PSBjaCAmJiBjaCA8
PSAneicgfHwKKyAgICAgICAgICAgJ0EnIDw9IGNoICYmIGNoIDw9ICdaJyB8fAorICAgICAgICAg
ICAnXycgPT0gY2ggfHwgY2ggPT0gJyQnOworICB9CisgIGZ1bmN0aW9uIGlzRXhwT3BlcmF0b3Io
Y2gpIHsKKyAgICByZXR1cm4gY2ggPT0gJy0nIHx8IGNoID09ICcrJyB8fCBpc051bWJlcihjaCk7
CisgIH0KKworICBmdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yLCBzdGFydCwgZW5kKSB7CisgICAg
ZW5kID0gZW5kIHx8IGluZGV4OworICAgIHRocm93IEVycm9yKCJMZXhlciBFcnJvcjogIiArIGVy
cm9yICsgIiBhdCBjb2x1bW4iICsKKyAgICAgICAgKGlzRGVmaW5lZChzdGFydCkKKyAgICAgICAg
ICAgID8gInMgIiArIHN0YXJ0ICsgICItIiArIGluZGV4ICsgIiBbIiArIHRleHQuc3Vic3RyaW5n
KHN0YXJ0LCBlbmQpICsgIl0iCisgICAgICAgICAgICA6ICIgIiArIGVuZCkgKworICAgICAgICAi
IGluIGV4cHJlc3Npb24gWyIgKyB0ZXh0ICsgIl0uIik7CisgIH0KKworICBmdW5jdGlvbiByZWFk
TnVtYmVyKCkgeworICAgIHZhciBudW1iZXIgPSAiIjsKKyAgICB2YXIgc3RhcnQgPSBpbmRleDsK
KyAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCkgeworICAgICAgdmFyIGNoID0gbG93ZXJj
YXNlKHRleHQuY2hhckF0KGluZGV4KSk7CisgICAgICBpZiAoY2ggPT0gJy4nIHx8IGlzTnVtYmVy
KGNoKSkgeworICAgICAgICBudW1iZXIgKz0gY2g7CisgICAgICB9IGVsc2UgeworICAgICAgICB2
YXIgcGVla0NoID0gcGVlaygpOworICAgICAgICBpZiAoY2ggPT0gJ2UnICYmIGlzRXhwT3BlcmF0
b3IocGVla0NoKSkgeworICAgICAgICAgIG51bWJlciArPSBjaDsKKyAgICAgICAgfSBlbHNlIGlm
IChpc0V4cE9wZXJhdG9yKGNoKSAmJgorICAgICAgICAgICAgcGVla0NoICYmIGlzTnVtYmVyKHBl
ZWtDaCkgJiYKKyAgICAgICAgICAgIG51bWJlci5jaGFyQXQobnVtYmVyLmxlbmd0aCAtIDEpID09
ICdlJykgeworICAgICAgICAgIG51bWJlciArPSBjaDsKKyAgICAgICAgfSBlbHNlIGlmIChpc0V4
cE9wZXJhdG9yKGNoKSAmJgorICAgICAgICAgICAgKCFwZWVrQ2ggfHwgIWlzTnVtYmVyKHBlZWtD
aCkpICYmCisgICAgICAgICAgICBudW1iZXIuY2hhckF0KG51bWJlci5sZW5ndGggLSAxKSA9PSAn
ZScpIHsKKyAgICAgICAgICB0aHJvd0Vycm9yKCdJbnZhbGlkIGV4cG9uZW50Jyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlu
ZGV4Kys7CisgICAgfQorICAgIG51bWJlciA9IDEgKiBudW1iZXI7CisgICAgdG9rZW5zLnB1c2go
e2luZGV4OnN0YXJ0LCB0ZXh0Om51bWJlciwganNvbjp0cnVlLAorICAgICAgZm46ZnVuY3Rpb24o
KSB7cmV0dXJuIG51bWJlcjt9fSk7CisgIH0KKyAgZnVuY3Rpb24gcmVhZElkZW50KCkgeworICAg
IHZhciBpZGVudCA9ICIiLAorICAgICAgICBzdGFydCA9IGluZGV4LAorICAgICAgICBsYXN0RG90
LCBwZWVrSW5kZXgsIG1ldGhvZE5hbWUsIGNoOworCisgICAgd2hpbGUgKGluZGV4IDwgdGV4dC5s
ZW5ndGgpIHsKKyAgICAgIGNoID0gdGV4dC5jaGFyQXQoaW5kZXgpOworICAgICAgaWYgKGNoID09
ICcuJyB8fCBpc0lkZW50KGNoKSB8fCBpc051bWJlcihjaCkpIHsKKyAgICAgICAgaWYgKGNoID09
ICcuJykgbGFzdERvdCA9IGluZGV4OworICAgICAgICBpZGVudCArPSBjaDsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaW5kZXgrKzsKKyAgICB9CisKKyAg
ICAvL2NoZWNrIGlmIHRoaXMgaXMgbm90IGEgbWV0aG9kIGludm9jYXRpb24gYW5kIGlmIGl0IGlz
IGJhY2sgb3V0IHRvIGxhc3QgZG90CisgICAgaWYgKGxhc3REb3QpIHsKKyAgICAgIHBlZWtJbmRl
eCA9IGluZGV4OworICAgICAgd2hpbGUocGVla0luZGV4IDwgdGV4dC5sZW5ndGgpIHsKKyAgICAg
ICAgY2ggPSB0ZXh0LmNoYXJBdChwZWVrSW5kZXgpOworICAgICAgICBpZiAoY2ggPT0gJygnKSB7
CisgICAgICAgICAgbWV0aG9kTmFtZSA9IGlkZW50LnN1YnN0cihsYXN0RG90IC0gc3RhcnQgKyAx
KTsKKyAgICAgICAgICBpZGVudCA9IGlkZW50LnN1YnN0cigwLCBsYXN0RG90IC0gc3RhcnQpOwor
ICAgICAgICAgIGluZGV4ID0gcGVla0luZGV4OworICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGlmKGlzV2hpdGVzcGFjZShjaCkpIHsKKyAgICAgICAgICBwZWVrSW5kZXgrKzsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0KKworCisgICAgdmFyIHRva2VuID0geworICAgICAgaW5kZXg6c3RhcnQsCisgICAgICB0
ZXh0OmlkZW50CisgICAgfTsKKworICAgIGlmIChPUEVSQVRPUlMuaGFzT3duUHJvcGVydHkoaWRl
bnQpKSB7CisgICAgICB0b2tlbi5mbiA9IHRva2VuLmpzb24gPSBPUEVSQVRPUlNbaWRlbnRdOwor
ICAgIH0gZWxzZSB7CisgICAgICB2YXIgZ2V0dGVyID0gZ2V0dGVyRm4oaWRlbnQsIGNzcCk7Cisg
ICAgICB0b2tlbi5mbiA9IGV4dGVuZChmdW5jdGlvbihzZWxmLCBsb2NhbHMpIHsKKyAgICAgICAg
cmV0dXJuIChnZXR0ZXIoc2VsZiwgbG9jYWxzKSk7CisgICAgICB9LCB7CisgICAgICAgIGFzc2ln
bjogZnVuY3Rpb24oc2VsZiwgdmFsdWUpIHsKKyAgICAgICAgICByZXR1cm4gc2V0dGVyKHNlbGYs
IGlkZW50LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIHRva2Vu
cy5wdXNoKHRva2VuKTsKKworICAgIGlmIChtZXRob2ROYW1lKSB7CisgICAgICB0b2tlbnMucHVz
aCh7CisgICAgICAgIGluZGV4Omxhc3REb3QsCisgICAgICAgIHRleHQ6ICcuJywKKyAgICAgICAg
anNvbjogZmFsc2UKKyAgICAgIH0pOworICAgICAgdG9rZW5zLnB1c2goeworICAgICAgICBpbmRl
eDogbGFzdERvdCArIDEsCisgICAgICAgIHRleHQ6IG1ldGhvZE5hbWUsCisgICAgICAgIGpzb246
IGZhbHNlCisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiByZWFkU3RyaW5nKHF1
b3RlKSB7CisgICAgdmFyIHN0YXJ0ID0gaW5kZXg7CisgICAgaW5kZXgrKzsKKyAgICB2YXIgc3Ry
aW5nID0gIiI7CisgICAgdmFyIHJhd1N0cmluZyA9IHF1b3RlOworICAgIHZhciBlc2NhcGUgPSBm
YWxzZTsKKyAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCkgeworICAgICAgdmFyIGNoID0g
dGV4dC5jaGFyQXQoaW5kZXgpOworICAgICAgcmF3U3RyaW5nICs9IGNoOworICAgICAgaWYgKGVz
Y2FwZSkgeworICAgICAgICBpZiAoY2ggPT0gJ3UnKSB7CisgICAgICAgICAgdmFyIGhleCA9IHRl
eHQuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyA1KTsKKyAgICAgICAgICBpZiAoIWhleC5t
YXRjaCgvW1xkYS1mXXs0fS9pKSkKKyAgICAgICAgICAgIHRocm93RXJyb3IoICJJbnZhbGlkIHVu
aWNvZGUgZXNjYXBlIFtcXHUiICsgaGV4ICsgIl0iKTsKKyAgICAgICAgICBpbmRleCArPSA0Owor
ICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGhleCwgMTYp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB2YXIgcmVwID0gRVNDQVBFW2NoXTsKKyAg
ICAgICAgICBpZiAocmVwKSB7CisgICAgICAgICAgICBzdHJpbmcgKz0gcmVwOworICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBzdHJpbmcgKz0gY2g7CisgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVzY2FwZSA9IGZhbHNlOworICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXFwn
KSB7CisgICAgICAgIGVzY2FwZSA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKGNoID09IHF1b3Rl
KSB7CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIHRva2Vucy5wdXNoKHsKKyAgICAgICAgICBp
bmRleDpzdGFydCwKKyAgICAgICAgICB0ZXh0OnJhd1N0cmluZywKKyAgICAgICAgICBzdHJpbmc6
c3RyaW5nLAorICAgICAgICAgIGpzb246dHJ1ZSwKKyAgICAgICAgICBmbjpmdW5jdGlvbigpIHsg
cmV0dXJuIHN0cmluZzsgfQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgc3RyaW5nICs9IGNoOworICAgICAgfQorICAgICAgaW5kZXgrKzsKKyAg
ICB9CisgICAgdGhyb3dFcnJvcigiVW50ZXJtaW5hdGVkIHF1b3RlIiwgc3RhcnQpOworICB9Cit9
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Z1bmN0aW9u
IHBhcnNlcih0ZXh0LCBqc29uLCAkZmlsdGVyLCBjc3ApeworICB2YXIgWkVSTyA9IHZhbHVlRm4o
MCksCisgICAgICB2YWx1ZSwKKyAgICAgIHRva2VucyA9IGxleCh0ZXh0LCBjc3ApLAorICAgICAg
YXNzaWdubWVudCA9IF9hc3NpZ25tZW50LAorICAgICAgZnVuY3Rpb25DYWxsID0gX2Z1bmN0aW9u
Q2FsbCwKKyAgICAgIGZpZWxkQWNjZXNzID0gX2ZpZWxkQWNjZXNzLAorICAgICAgb2JqZWN0SW5k
ZXggPSBfb2JqZWN0SW5kZXgsCisgICAgICBmaWx0ZXJDaGFpbiA9IF9maWx0ZXJDaGFpbjsKKwor
ICBpZihqc29uKXsKKyAgICAvLyBUaGUgZXh0cmEgbGV2ZWwgb2YgYWxpYXNpbmcgaXMgaGVyZSwg
anVzdCBpbiBjYXNlIHRoZSBsZXhlciBtaXNzZXMgc29tZXRoaW5nLCBzbyB0aGF0CisgICAgLy8g
d2UgcHJldmVudCBhbnkgYWNjaWRlbnRhbCBleGVjdXRpb24gaW4gSlNPTi4KKyAgICBhc3NpZ25t
ZW50ID0gbG9naWNhbE9SOworICAgIGZ1bmN0aW9uQ2FsbCA9CisgICAgICBmaWVsZEFjY2VzcyA9
CisgICAgICBvYmplY3RJbmRleCA9CisgICAgICBmaWx0ZXJDaGFpbiA9CisgICAgICAgIGZ1bmN0
aW9uKCkgeyB0aHJvd0Vycm9yKCJpcyBub3QgdmFsaWQganNvbiIsIHt0ZXh0OnRleHQsIGluZGV4
OjB9KTsgfTsKKyAgICB2YWx1ZSA9IHByaW1hcnkoKTsKKyAgfSBlbHNlIHsKKyAgICB2YWx1ZSA9
IHN0YXRlbWVudHMoKTsKKyAgfQorICBpZiAodG9rZW5zLmxlbmd0aCAhPT0gMCkgeworICAgIHRo
cm93RXJyb3IoImlzIGFuIHVuZXhwZWN0ZWQgdG9rZW4iLCB0b2tlbnNbMF0pOworICB9CisgIHJl
dHVybiB2YWx1ZTsKKworICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICBm
dW5jdGlvbiB0aHJvd0Vycm9yKG1zZywgdG9rZW4pIHsKKyAgICB0aHJvdyBFcnJvcigiU3ludGF4
IEVycm9yOiBUb2tlbiAnIiArIHRva2VuLnRleHQgKworICAgICAgIicgIiArIG1zZyArICIgYXQg
Y29sdW1uICIgKworICAgICAgKHRva2VuLmluZGV4ICsgMSkgKyAiIG9mIHRoZSBleHByZXNzaW9u
IFsiICsKKyAgICAgIHRleHQgKyAiXSBzdGFydGluZyBhdCBbIiArIHRleHQuc3Vic3RyaW5nKHRv
a2VuLmluZGV4KSArICJdLiIpOworICB9CisKKyAgZnVuY3Rpb24gcGVla1Rva2VuKCkgeworICAg
IGlmICh0b2tlbnMubGVuZ3RoID09PSAwKQorICAgICAgdGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWQg
ZW5kIG9mIGV4cHJlc3Npb246ICIgKyB0ZXh0KTsKKyAgICByZXR1cm4gdG9rZW5zWzBdOworICB9
CisKKyAgZnVuY3Rpb24gcGVlayhlMSwgZTIsIGUzLCBlNCkgeworICAgIGlmICh0b2tlbnMubGVu
Z3RoID4gMCkgeworICAgICAgdmFyIHRva2VuID0gdG9rZW5zWzBdOworICAgICAgdmFyIHQgPSB0
b2tlbi50ZXh0OworICAgICAgaWYgKHQ9PWUxIHx8IHQ9PWUyIHx8IHQ9PWUzIHx8IHQ9PWU0IHx8
CisgICAgICAgICAgKCFlMSAmJiAhZTIgJiYgIWUzICYmICFlNCkpIHsKKyAgICAgICAgcmV0dXJu
IHRva2VuOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBmdW5j
dGlvbiBleHBlY3QoZTEsIGUyLCBlMywgZTQpeworICAgIHZhciB0b2tlbiA9IHBlZWsoZTEsIGUy
LCBlMywgZTQpOworICAgIGlmICh0b2tlbikgeworICAgICAgaWYgKGpzb24gJiYgIXRva2VuLmpz
b24pIHsKKyAgICAgICAgdGhyb3dFcnJvcigiaXMgbm90IHZhbGlkIGpzb24iLCB0b2tlbik7Cisg
ICAgICB9CisgICAgICB0b2tlbnMuc2hpZnQoKTsKKyAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgZnVuY3Rpb24gY29uc3VtZShlMSl7CisgICAg
aWYgKCFleHBlY3QoZTEpKSB7CisgICAgICB0aHJvd0Vycm9yKCJpcyB1bmV4cGVjdGVkLCBleHBl
Y3RpbmcgWyIgKyBlMSArICJdIiwgcGVlaygpKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB1
bmFyeUZuKGZuLCByaWdodCkgeworICAgIHJldHVybiBmdW5jdGlvbihzZWxmLCBsb2NhbHMpIHsK
KyAgICAgIHJldHVybiBmbihzZWxmLCBsb2NhbHMsIHJpZ2h0KTsKKyAgICB9OworICB9CisKKyAg
ZnVuY3Rpb24gYmluYXJ5Rm4obGVmdCwgZm4sIHJpZ2h0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9u
KHNlbGYsIGxvY2FscykgeworICAgICAgcmV0dXJuIGZuKHNlbGYsIGxvY2FscywgbGVmdCwgcmln
aHQpOworICAgIH07CisgIH0KKworICBmdW5jdGlvbiBzdGF0ZW1lbnRzKCkgeworICAgIHZhciBz
dGF0ZW1lbnRzID0gW107CisgICAgd2hpbGUodHJ1ZSkgeworICAgICAgaWYgKHRva2Vucy5sZW5n
dGggPiAwICYmICFwZWVrKCd9JywgJyknLCAnOycsICddJykpCisgICAgICAgIHN0YXRlbWVudHMu
cHVzaChmaWx0ZXJDaGFpbigpKTsKKyAgICAgIGlmICghZXhwZWN0KCc7JykpIHsKKyAgICAgICAg
Ly8gb3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0aGVyZSBpcyBvbmx5IG9uZSBz
dGF0ZW1lbnQuCisgICAgICAgIC8vIFRPRE8oc2l6ZSk6IG1heWJlIHdlIHNob3VsZCBub3Qgc3Vw
cG9ydCBtdWx0aXBsZSBzdGF0ZW1lbnRzPworICAgICAgICByZXR1cm4gc3RhdGVtZW50cy5sZW5n
dGggPT0gMQorICAgICAgICAgID8gc3RhdGVtZW50c1swXQorICAgICAgICAgIDogZnVuY3Rpb24o
c2VsZiwgbG9jYWxzKXsKKyAgICAgICAgICAgIHZhciB2YWx1ZTsKKyAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMDsgaSA8IHN0YXRlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
dmFyIHN0YXRlbWVudCA9IHN0YXRlbWVudHNbaV07CisgICAgICAgICAgICAgIGlmIChzdGF0ZW1l
bnQpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGF0ZW1lbnQoc2VsZiwgbG9jYWxzKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICB9OworICAg
ICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIF9maWx0ZXJDaGFpbigpIHsKKyAgICB2YXIg
bGVmdCA9IGV4cHJlc3Npb24oKTsKKyAgICB2YXIgdG9rZW47CisgICAgd2hpbGUodHJ1ZSkgewor
ICAgICAgaWYgKCh0b2tlbiA9IGV4cGVjdCgnfCcpKSkgeworICAgICAgICBsZWZ0ID0gYmluYXJ5
Rm4obGVmdCwgdG9rZW4uZm4sIGZpbHRlcigpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJl
dHVybiBsZWZ0OworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGZpbHRlcigpIHsK
KyAgICB2YXIgdG9rZW4gPSBleHBlY3QoKTsKKyAgICB2YXIgZm4gPSAkZmlsdGVyKHRva2VuLnRl
eHQpOworICAgIHZhciBhcmdzRm4gPSBbXTsKKyAgICB3aGlsZSh0cnVlKSB7CisgICAgICBpZiAo
KHRva2VuID0gZXhwZWN0KCc6JykpKSB7CisgICAgICAgIGFyZ3NGbi5wdXNoKGV4cHJlc3Npb24o
KSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgZm5JbnZva2UgPSBmdW5jdGlvbihzZWxm
LCBsb2NhbHMsIGlucHV0KXsKKyAgICAgICAgICB2YXIgYXJncyA9IFtpbnB1dF07CisgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwOyBpIDwgYXJnc0ZuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICBhcmdzLnB1c2goYXJnc0ZuW2ldKHNlbGYsIGxvY2FscykpOworICAgICAgICAgIH0KKyAgICAg
ICAgICByZXR1cm4gZm4uYXBwbHkoc2VsZiwgYXJncyk7CisgICAgICAgIH07CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gZm5JbnZva2U7CisgICAgICAgIH07
CisgICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gZXhwcmVzc2lvbigpIHsKKyAgICBy
ZXR1cm4gYXNzaWdubWVudCgpOworICB9CisKKyAgZnVuY3Rpb24gX2Fzc2lnbm1lbnQoKSB7Cisg
ICAgdmFyIGxlZnQgPSBsb2dpY2FsT1IoKTsKKyAgICB2YXIgcmlnaHQ7CisgICAgdmFyIHRva2Vu
OworICAgIGlmICgodG9rZW4gPSBleHBlY3QoJz0nKSkpIHsKKyAgICAgIGlmICghbGVmdC5hc3Np
Z24pIHsKKyAgICAgICAgdGhyb3dFcnJvcigiaW1wbGllcyBhc3NpZ25tZW50IGJ1dCBbIiArCisg
ICAgICAgICAgdGV4dC5zdWJzdHJpbmcoMCwgdG9rZW4uaW5kZXgpICsgIl0gY2FuIG5vdCBiZSBh
c3NpZ25lZCB0byIsIHRva2VuKTsKKyAgICAgIH0KKyAgICAgIHJpZ2h0ID0gbG9naWNhbE9SKCk7
CisgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2Fscyl7CisgICAgICAgIHJldHVybiBs
ZWZ0LmFzc2lnbihzY29wZSwgcmlnaHQoc2NvcGUsIGxvY2FscyksIGxvY2Fscyk7CisgICAgICB9
OworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gbGVmdDsKKyAgICB9CisgIH0KKworICBmdW5j
dGlvbiBsb2dpY2FsT1IoKSB7CisgICAgdmFyIGxlZnQgPSBsb2dpY2FsQU5EKCk7CisgICAgdmFy
IHRva2VuOworICAgIHdoaWxlKHRydWUpIHsKKyAgICAgIGlmICgodG9rZW4gPSBleHBlY3QoJ3x8
JykpKSB7CisgICAgICAgIGxlZnQgPSBiaW5hcnlGbihsZWZ0LCB0b2tlbi5mbiwgbG9naWNhbEFO
RCgpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBsZWZ0OworICAgICAgfQorICAg
IH0KKyAgfQorCisgIGZ1bmN0aW9uIGxvZ2ljYWxBTkQoKSB7CisgICAgdmFyIGxlZnQgPSBlcXVh
bGl0eSgpOworICAgIHZhciB0b2tlbjsKKyAgICBpZiAoKHRva2VuID0gZXhwZWN0KCcmJicpKSkg
eworICAgICAgbGVmdCA9IGJpbmFyeUZuKGxlZnQsIHRva2VuLmZuLCBsb2dpY2FsQU5EKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gbGVmdDsKKyAgfQorCisgIGZ1bmN0aW9uIGVxdWFsaXR5KCkgewor
ICAgIHZhciBsZWZ0ID0gcmVsYXRpb25hbCgpOworICAgIHZhciB0b2tlbjsKKyAgICBpZiAoKHRv
a2VuID0gZXhwZWN0KCc9PScsJyE9JykpKSB7CisgICAgICBsZWZ0ID0gYmluYXJ5Rm4obGVmdCwg
dG9rZW4uZm4sIGVxdWFsaXR5KCkpOworICAgIH0KKyAgICByZXR1cm4gbGVmdDsKKyAgfQorCisg
IGZ1bmN0aW9uIHJlbGF0aW9uYWwoKSB7CisgICAgdmFyIGxlZnQgPSBhZGRpdGl2ZSgpOworICAg
IHZhciB0b2tlbjsKKyAgICBpZiAoKHRva2VuID0gZXhwZWN0KCc8JywgJz4nLCAnPD0nLCAnPj0n
KSkpIHsKKyAgICAgIGxlZnQgPSBiaW5hcnlGbihsZWZ0LCB0b2tlbi5mbiwgcmVsYXRpb25hbCgp
KTsKKyAgICB9CisgICAgcmV0dXJuIGxlZnQ7CisgIH0KKworICBmdW5jdGlvbiBhZGRpdGl2ZSgp
IHsKKyAgICB2YXIgbGVmdCA9IG11bHRpcGxpY2F0aXZlKCk7CisgICAgdmFyIHRva2VuOworICAg
IHdoaWxlICgodG9rZW4gPSBleHBlY3QoJysnLCctJykpKSB7CisgICAgICBsZWZ0ID0gYmluYXJ5
Rm4obGVmdCwgdG9rZW4uZm4sIG11bHRpcGxpY2F0aXZlKCkpOworICAgIH0KKyAgICByZXR1cm4g
bGVmdDsKKyAgfQorCisgIGZ1bmN0aW9uIG11bHRpcGxpY2F0aXZlKCkgeworICAgIHZhciBsZWZ0
ID0gdW5hcnkoKTsKKyAgICB2YXIgdG9rZW47CisgICAgd2hpbGUgKCh0b2tlbiA9IGV4cGVjdCgn
KicsJy8nLCclJykpKSB7CisgICAgICBsZWZ0ID0gYmluYXJ5Rm4obGVmdCwgdG9rZW4uZm4sIHVu
YXJ5KCkpOworICAgIH0KKyAgICByZXR1cm4gbGVmdDsKKyAgfQorCisgIGZ1bmN0aW9uIHVuYXJ5
KCkgeworICAgIHZhciB0b2tlbjsKKyAgICBpZiAoZXhwZWN0KCcrJykpIHsKKyAgICAgIHJldHVy
biBwcmltYXJ5KCk7CisgICAgfSBlbHNlIGlmICgodG9rZW4gPSBleHBlY3QoJy0nKSkpIHsKKyAg
ICAgIHJldHVybiBiaW5hcnlGbihaRVJPLCB0b2tlbi5mbiwgdW5hcnkoKSk7CisgICAgfSBlbHNl
IGlmICgodG9rZW4gPSBleHBlY3QoJyEnKSkpIHsKKyAgICAgIHJldHVybiB1bmFyeUZuKHRva2Vu
LmZuLCB1bmFyeSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHByaW1hcnkoKTsKKyAg
ICB9CisgIH0KKworCisgIGZ1bmN0aW9uIHByaW1hcnkoKSB7CisgICAgdmFyIHByaW1hcnk7Cisg
ICAgaWYgKGV4cGVjdCgnKCcpKSB7CisgICAgICBwcmltYXJ5ID0gZmlsdGVyQ2hhaW4oKTsKKyAg
ICAgIGNvbnN1bWUoJyknKTsKKyAgICB9IGVsc2UgaWYgKGV4cGVjdCgnWycpKSB7CisgICAgICBw
cmltYXJ5ID0gYXJyYXlEZWNsYXJhdGlvbigpOworICAgIH0gZWxzZSBpZiAoZXhwZWN0KCd7Jykp
IHsKKyAgICAgIHByaW1hcnkgPSBvYmplY3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIHRv
a2VuID0gZXhwZWN0KCk7CisgICAgICBwcmltYXJ5ID0gdG9rZW4uZm47CisgICAgICBpZiAoIXBy
aW1hcnkpIHsKKyAgICAgICAgdGhyb3dFcnJvcigibm90IGEgcHJpbWFyeSBleHByZXNzaW9uIiwg
dG9rZW4pOworICAgICAgfQorICAgIH0KKworICAgIHZhciBuZXh0LCBjb250ZXh0OworICAgIHdo
aWxlICgobmV4dCA9IGV4cGVjdCgnKCcsICdbJywgJy4nKSkpIHsKKyAgICAgIGlmIChuZXh0LnRl
eHQgPT09ICcoJykgeworICAgICAgICBwcmltYXJ5ID0gZnVuY3Rpb25DYWxsKHByaW1hcnksIGNv
bnRleHQpOworICAgICAgICBjb250ZXh0ID0gbnVsbDsKKyAgICAgIH0gZWxzZSBpZiAobmV4dC50
ZXh0ID09PSAnWycpIHsKKyAgICAgICAgY29udGV4dCA9IHByaW1hcnk7CisgICAgICAgIHByaW1h
cnkgPSBvYmplY3RJbmRleChwcmltYXJ5KTsKKyAgICAgIH0gZWxzZSBpZiAobmV4dC50ZXh0ID09
PSAnLicpIHsKKyAgICAgICAgY29udGV4dCA9IHByaW1hcnk7CisgICAgICAgIHByaW1hcnkgPSBm
aWVsZEFjY2VzcyhwcmltYXJ5KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93RXJyb3Io
IklNUE9TU0lCTEUiKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHByaW1hcnk7CisgIH0K
KworICBmdW5jdGlvbiBfZmllbGRBY2Nlc3Mob2JqZWN0KSB7CisgICAgdmFyIGZpZWxkID0gZXhw
ZWN0KCkudGV4dDsKKyAgICB2YXIgZ2V0dGVyID0gZ2V0dGVyRm4oZmllbGQsIGNzcCk7CisgICAg
cmV0dXJuIGV4dGVuZCgKKyAgICAgICAgZnVuY3Rpb24oc2NvcGUsIGxvY2Fscywgc2VsZikgewor
ICAgICAgICAgIHJldHVybiBnZXR0ZXIoc2VsZiB8fCBvYmplY3Qoc2NvcGUsIGxvY2FscyksIGxv
Y2Fscyk7CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICBhc3NpZ246ZnVuY3Rpb24o
c2NvcGUsIHZhbHVlLCBsb2NhbHMpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXR0ZXIob2JqZWN0
KHNjb3BlLCBsb2NhbHMpLCBmaWVsZCwgdmFsdWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICk7CisgIH0KKworICBmdW5jdGlvbiBfb2JqZWN0SW5kZXgob2JqKSB7CisgICAgdmFyIGlu
ZGV4Rm4gPSBleHByZXNzaW9uKCk7CisgICAgY29uc3VtZSgnXScpOworICAgIHJldHVybiBleHRl
bmQoCisgICAgICBmdW5jdGlvbihzZWxmLCBsb2NhbHMpeworICAgICAgICB2YXIgbyA9IG9iaihz
ZWxmLCBsb2NhbHMpLAorICAgICAgICAgICAgaSA9IGluZGV4Rm4oc2VsZiwgbG9jYWxzKSwKKyAg
ICAgICAgICAgIHYsIHA7CisKKyAgICAgICAgaWYgKCFvKSByZXR1cm4gdW5kZWZpbmVkOworICAg
ICAgICB2ID0gb1tpXTsKKyAgICAgICAgaWYgKHYgJiYgdi50aGVuKSB7CisgICAgICAgICAgcCA9
IHY7CisgICAgICAgICAgaWYgKCEoJyQkdicgaW4gdikpIHsKKyAgICAgICAgICAgIHAuJCR2ID0g
dW5kZWZpbmVkOworICAgICAgICAgICAgcC50aGVuKGZ1bmN0aW9uKHZhbCkgeyBwLiQkdiA9IHZh
bDsgfSk7CisgICAgICAgICAgfQorICAgICAgICAgIHYgPSB2LiQkdjsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdjsKKyAgICAgIH0sIHsKKyAgICAgICAgYXNzaWduOmZ1bmN0aW9uKHNlbGYs
IHZhbHVlLCBsb2NhbHMpeworICAgICAgICAgIHJldHVybiBvYmooc2VsZiwgbG9jYWxzKVtpbmRl
eEZuKHNlbGYsIGxvY2FscyldID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgIH0pOworICB9CisK
KyAgZnVuY3Rpb24gX2Z1bmN0aW9uQ2FsbChmbiwgY29udGV4dEdldHRlcikgeworICAgIHZhciBh
cmdzRm4gPSBbXTsKKyAgICBpZiAocGVla1Rva2VuKCkudGV4dCAhPSAnKScpIHsKKyAgICAgIGRv
IHsKKyAgICAgICAgYXJnc0ZuLnB1c2goZXhwcmVzc2lvbigpKTsKKyAgICAgIH0gd2hpbGUgKGV4
cGVjdCgnLCcpKTsKKyAgICB9CisgICAgY29uc3VtZSgnKScpOworICAgIHJldHVybiBmdW5jdGlv
bihzY29wZSwgbG9jYWxzKXsKKyAgICAgIHZhciBhcmdzID0gW10sCisgICAgICAgICAgY29udGV4
dCA9IGNvbnRleHRHZXR0ZXIgPyBjb250ZXh0R2V0dGVyKHNjb3BlLCBsb2NhbHMpIDogc2NvcGU7
CisKKyAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGFyZ3NGbi5sZW5ndGg7IGkrKykgeworICAg
ICAgICBhcmdzLnB1c2goYXJnc0ZuW2ldKHNjb3BlLCBsb2NhbHMpKTsKKyAgICAgIH0KKyAgICAg
IHZhciBmblB0ciA9IGZuKHNjb3BlLCBsb2NhbHMsIGNvbnRleHQpIHx8IG5vb3A7CisgICAgICAv
LyBJRSBzdHVwaWRpdHkhCisgICAgICByZXR1cm4gZm5QdHIuYXBwbHkKKyAgICAgICAgICA/IGZu
UHRyLmFwcGx5KGNvbnRleHQsIGFyZ3MpCisgICAgICAgICAgOiBmblB0cihhcmdzWzBdLCBhcmdz
WzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTsKKyAgICB9OworICB9CisKKyAgLy8gVGhp
cyBpcyB1c2VkIHdpdGgganNvbiBhcnJheSBkZWNsYXJhdGlvbgorICBmdW5jdGlvbiBhcnJheURl
Y2xhcmF0aW9uICgpIHsKKyAgICB2YXIgZWxlbWVudEZucyA9IFtdOworICAgIGlmIChwZWVrVG9r
ZW4oKS50ZXh0ICE9ICddJykgeworICAgICAgZG8geworICAgICAgICBlbGVtZW50Rm5zLnB1c2go
ZXhwcmVzc2lvbigpKTsKKyAgICAgIH0gd2hpbGUgKGV4cGVjdCgnLCcpKTsKKyAgICB9CisgICAg
Y29uc3VtZSgnXScpOworICAgIHJldHVybiBmdW5jdGlvbihzZWxmLCBsb2NhbHMpeworICAgICAg
dmFyIGFycmF5ID0gW107CisgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBlbGVtZW50Rm5zLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgIGFycmF5LnB1c2goZWxlbWVudEZuc1tpXShzZWxmLCBsb2Nh
bHMpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBhcnJheTsKKyAgICB9OworICB9CisKKyAgZnVu
Y3Rpb24gb2JqZWN0ICgpIHsKKyAgICB2YXIga2V5VmFsdWVzID0gW107CisgICAgaWYgKHBlZWtU
b2tlbigpLnRleHQgIT0gJ30nKSB7CisgICAgICBkbyB7CisgICAgICAgIHZhciB0b2tlbiA9IGV4
cGVjdCgpLAorICAgICAgICBrZXkgPSB0b2tlbi5zdHJpbmcgfHwgdG9rZW4udGV4dDsKKyAgICAg
ICAgY29uc3VtZSgiOiIpOworICAgICAgICB2YXIgdmFsdWUgPSBleHByZXNzaW9uKCk7CisgICAg
ICAgIGtleVZhbHVlcy5wdXNoKHtrZXk6a2V5LCB2YWx1ZTp2YWx1ZX0pOworICAgICAgfSB3aGls
ZSAoZXhwZWN0KCcsJykpOworICAgIH0KKyAgICBjb25zdW1lKCd9Jyk7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKHNlbGYsIGxvY2Fscyl7CisgICAgICB2YXIgb2JqZWN0ID0ge307CisgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGtl
eVZhbHVlID0ga2V5VmFsdWVzW2ldOworICAgICAgICBvYmplY3Rba2V5VmFsdWUua2V5XSA9IGtl
eVZhbHVlLnZhbHVlKHNlbGYsIGxvY2Fscyk7CisgICAgICB9CisgICAgICByZXR1cm4gb2JqZWN0
OworICAgIH07CisgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKy8vIFBhcnNlciBoZWxwZXIgZnVuY3Rpb25zCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitmdW5jdGlvbiBzZXR0ZXIo
b2JqLCBwYXRoLCBzZXRWYWx1ZSkgeworICB2YXIgZWxlbWVudCA9IHBhdGguc3BsaXQoJy4nKTsK
KyAgZm9yICh2YXIgaSA9IDA7IGVsZW1lbnQubGVuZ3RoID4gMTsgaSsrKSB7CisgICAgdmFyIGtl
eSA9IGVsZW1lbnQuc2hpZnQoKTsKKyAgICB2YXIgcHJvcGVydHlPYmogPSBvYmpba2V5XTsKKyAg
ICBpZiAoIXByb3BlcnR5T2JqKSB7CisgICAgICBwcm9wZXJ0eU9iaiA9IHt9OworICAgICAgb2Jq
W2tleV0gPSBwcm9wZXJ0eU9iajsKKyAgICB9CisgICAgb2JqID0gcHJvcGVydHlPYmo7CisgIH0K
KyAgb2JqW2VsZW1lbnQuc2hpZnQoKV0gPSBzZXRWYWx1ZTsKKyAgcmV0dXJuIHNldFZhbHVlOwor
fQorCisvKioKKyAqIFJldHVybiB0aGUgdmFsdWUgYWNjZXNpYmxlIGZyb20gdGhlIG9iamVjdCBi
eSBwYXRoLiBBbnkgdW5kZWZpbmVkIHRyYXZlcnNhbHMgYXJlIGlnbm9yZWQKKyAqIEBwYXJhbSB7
T2JqZWN0fSBvYmogc3RhcnRpbmcgb2JqZWN0CisgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBwYXRo
IHRvIHRyYXZlcnNlCisgKiBAcGFyYW0ge2Jvb2xlYW49dHJ1ZX0gYmluZEZuVG9TY29wZQorICog
QHJldHVybnMgdmFsdWUgYXMgYWNjZXNiaWxlIGJ5IHBhdGgKKyAqLworLy9UT0RPKG1pc2tvKTog
dGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZW1vdmVkCitmdW5jdGlvbiBnZXR0ZXIob2JqLCBw
YXRoLCBiaW5kRm5Ub1Njb3BlKSB7CisgIGlmICghcGF0aCkgcmV0dXJuIG9iajsKKyAgdmFyIGtl
eXMgPSBwYXRoLnNwbGl0KCcuJyk7CisgIHZhciBrZXk7CisgIHZhciBsYXN0SW5zdGFuY2UgPSBv
Ymo7CisgIHZhciBsZW4gPSBrZXlzLmxlbmd0aDsKKworICBmb3IgKHZhciBpID0gMDsgaSA8IGxl
bjsgaSsrKSB7CisgICAga2V5ID0ga2V5c1tpXTsKKyAgICBpZiAob2JqKSB7CisgICAgICBvYmog
PSAobGFzdEluc3RhbmNlID0gb2JqKVtrZXldOworICAgIH0KKyAgfQorICBpZiAoIWJpbmRGblRv
U2NvcGUgJiYgaXNGdW5jdGlvbihvYmopKSB7CisgICAgcmV0dXJuIGJpbmQobGFzdEluc3RhbmNl
LCBvYmopOworICB9CisgIHJldHVybiBvYmo7Cit9CisKK3ZhciBnZXR0ZXJGbkNhY2hlID0ge307
CisKKy8qKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlICJCbGFjayBIb2xlIiB2YXJpYW50IGZy
b206CisgKiAtIGh0dHA6Ly9qc3BlcmYuY29tL2FuZ3VsYXJqcy1wYXJzZS1nZXR0ZXIvNAorICog
LSBodHRwOi8vanNwZXJmLmNvbS9wYXRoLWV2YWx1YXRpb24tc2ltcGxpZmllZC83CisgKi8KK2Z1
bmN0aW9uIGNzcFNhZmVHZXR0ZXJGbihrZXkwLCBrZXkxLCBrZXkyLCBrZXkzLCBrZXk0KSB7Cisg
IHJldHVybiBmdW5jdGlvbihzY29wZSwgbG9jYWxzKSB7CisgICAgdmFyIHBhdGhWYWwgPSAobG9j
YWxzICYmIGxvY2Fscy5oYXNPd25Qcm9wZXJ0eShrZXkwKSkgPyBsb2NhbHMgOiBzY29wZSwKKyAg
ICAgICAgcHJvbWlzZTsKKworICAgIGlmIChwYXRoVmFsID09PSBudWxsIHx8IHBhdGhWYWwgPT09
IHVuZGVmaW5lZCkgcmV0dXJuIHBhdGhWYWw7CisKKyAgICBwYXRoVmFsID0gcGF0aFZhbFtrZXkw
XTsKKyAgICBpZiAocGF0aFZhbCAmJiBwYXRoVmFsLnRoZW4pIHsKKyAgICAgIGlmICghKCIkJHYi
IGluIHBhdGhWYWwpKSB7CisgICAgICAgIHByb21pc2UgPSBwYXRoVmFsOworICAgICAgICBwcm9t
aXNlLiQkdiA9IHVuZGVmaW5lZDsKKyAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbCkg
eyBwcm9taXNlLiQkdiA9IHZhbDsgfSk7CisgICAgICB9CisgICAgICBwYXRoVmFsID0gcGF0aFZh
bC4kJHY7CisgICAgfQorICAgIGlmICgha2V5MSB8fCBwYXRoVmFsID09PSBudWxsIHx8IHBhdGhW
YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHBhdGhWYWw7CisKKyAgICBwYXRoVmFsID0gcGF0aFZh
bFtrZXkxXTsKKyAgICBpZiAocGF0aFZhbCAmJiBwYXRoVmFsLnRoZW4pIHsKKyAgICAgIGlmICgh
KCIkJHYiIGluIHBhdGhWYWwpKSB7CisgICAgICAgIHByb21pc2UgPSBwYXRoVmFsOworICAgICAg
ICBwcm9taXNlLiQkdiA9IHVuZGVmaW5lZDsKKyAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9u
KHZhbCkgeyBwcm9taXNlLiQkdiA9IHZhbDsgfSk7CisgICAgICB9CisgICAgICBwYXRoVmFsID0g
cGF0aFZhbC4kJHY7CisgICAgfQorICAgIGlmICgha2V5MiB8fCBwYXRoVmFsID09PSBudWxsIHx8
IHBhdGhWYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHBhdGhWYWw7CisKKyAgICBwYXRoVmFsID0g
cGF0aFZhbFtrZXkyXTsKKyAgICBpZiAocGF0aFZhbCAmJiBwYXRoVmFsLnRoZW4pIHsKKyAgICAg
IGlmICghKCIkJHYiIGluIHBhdGhWYWwpKSB7CisgICAgICAgIHByb21pc2UgPSBwYXRoVmFsOwor
ICAgICAgICBwcm9taXNlLiQkdiA9IHVuZGVmaW5lZDsKKyAgICAgICAgcHJvbWlzZS50aGVuKGZ1
bmN0aW9uKHZhbCkgeyBwcm9taXNlLiQkdiA9IHZhbDsgfSk7CisgICAgICB9CisgICAgICBwYXRo
VmFsID0gcGF0aFZhbC4kJHY7CisgICAgfQorICAgIGlmICgha2V5MyB8fCBwYXRoVmFsID09PSBu
dWxsIHx8IHBhdGhWYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHBhdGhWYWw7CisKKyAgICBwYXRo
VmFsID0gcGF0aFZhbFtrZXkzXTsKKyAgICBpZiAocGF0aFZhbCAmJiBwYXRoVmFsLnRoZW4pIHsK
KyAgICAgIGlmICghKCIkJHYiIGluIHBhdGhWYWwpKSB7CisgICAgICAgIHByb21pc2UgPSBwYXRo
VmFsOworICAgICAgICBwcm9taXNlLiQkdiA9IHVuZGVmaW5lZDsKKyAgICAgICAgcHJvbWlzZS50
aGVuKGZ1bmN0aW9uKHZhbCkgeyBwcm9taXNlLiQkdiA9IHZhbDsgfSk7CisgICAgICB9CisgICAg
ICBwYXRoVmFsID0gcGF0aFZhbC4kJHY7CisgICAgfQorICAgIGlmICgha2V5NCB8fCBwYXRoVmFs
ID09PSBudWxsIHx8IHBhdGhWYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHBhdGhWYWw7CisKKyAg
ICBwYXRoVmFsID0gcGF0aFZhbFtrZXk0XTsKKyAgICBpZiAocGF0aFZhbCAmJiBwYXRoVmFsLnRo
ZW4pIHsKKyAgICAgIGlmICghKCIkJHYiIGluIHBhdGhWYWwpKSB7CisgICAgICAgIHByb21pc2Ug
PSBwYXRoVmFsOworICAgICAgICBwcm9taXNlLiQkdiA9IHVuZGVmaW5lZDsKKyAgICAgICAgcHJv
bWlzZS50aGVuKGZ1bmN0aW9uKHZhbCkgeyBwcm9taXNlLiQkdiA9IHZhbDsgfSk7CisgICAgICB9
CisgICAgICBwYXRoVmFsID0gcGF0aFZhbC4kJHY7CisgICAgfQorICAgIHJldHVybiBwYXRoVmFs
OworICB9OworfQorCitmdW5jdGlvbiBnZXR0ZXJGbihwYXRoLCBjc3ApIHsKKyAgaWYgKGdldHRl
ckZuQ2FjaGUuaGFzT3duUHJvcGVydHkocGF0aCkpIHsKKyAgICByZXR1cm4gZ2V0dGVyRm5DYWNo
ZVtwYXRoXTsKKyAgfQorCisgIHZhciBwYXRoS2V5cyA9IHBhdGguc3BsaXQoJy4nKSwKKyAgICAg
IHBhdGhLZXlzTGVuZ3RoID0gcGF0aEtleXMubGVuZ3RoLAorICAgICAgZm47CisKKyAgaWYgKGNz
cCkgeworICAgIGZuID0gKHBhdGhLZXlzTGVuZ3RoIDwgNikKKyAgICAgICAgPyBjc3BTYWZlR2V0
dGVyRm4ocGF0aEtleXNbMF0sIHBhdGhLZXlzWzFdLCBwYXRoS2V5c1syXSwgcGF0aEtleXNbM10s
IHBhdGhLZXlzWzRdKQorICAgICAgICA6IGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMpIHsKKyAgICAg
ICAgICB2YXIgaSA9IDAsIHZhbDsKKyAgICAgICAgICBkbyB7CisgICAgICAgICAgICB2YWwgPSBj
c3BTYWZlR2V0dGVyRm4oCisgICAgICAgICAgICAgICAgICAgIHBhdGhLZXlzW2krK10sIHBhdGhL
ZXlzW2krK10sIHBhdGhLZXlzW2krK10sIHBhdGhLZXlzW2krK10sIHBhdGhLZXlzW2krK10KKyAg
ICAgICAgICAgICAgICAgICkoc2NvcGUsIGxvY2Fscyk7CisKKyAgICAgICAgICAgIGxvY2FscyA9
IHVuZGVmaW5lZDsgLy8gY2xlYXIgYWZ0ZXIgZmlyc3QgaXRlcmF0aW9uCisgICAgICAgICAgICBz
Y29wZSA9IHZhbDsKKyAgICAgICAgICB9IHdoaWxlIChpIDwgcGF0aEtleXNMZW5ndGgpOworICAg
ICAgICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgfSBlbHNlIHsKKyAgICB2YXIgY29kZSA9
ICd2YXIgbCwgZm4sIHA7XG4nOworICAgIGZvckVhY2gocGF0aEtleXMsIGZ1bmN0aW9uKGtleSwg
aW5kZXgpIHsKKyAgICAgIGNvZGUgKz0gJ2lmKHMgPT09IG51bGwgfHwgcyA9PT0gdW5kZWZpbmVk
KSByZXR1cm4gcztcbicgKworICAgICAgICAgICAgICAnbD1zO1xuJyArCisgICAgICAgICAgICAg
ICdzPScrIChpbmRleAorICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHNpbXBseSBkZXJlZmVy
ZW5jZSAncycgb24gYW55IC5kb3Qgbm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICA/ICdz
JworICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBpZiB3ZSBhcmUgZmlyc3QgdGhlbiB3ZSBj
aGVjayBsb2NhbHMgZmlyc3QsIGFuZCBpZiBzbyByZWFkIGl0IGZpcnN0CisgICAgICAgICAgICAg
ICAgICAgICAgOiAnKChrJiZrLmhhc093blByb3BlcnR5KCInICsga2V5ICsgJyIpKT9rOnMpJykg
KyAnWyInICsga2V5ICsgJyJdJyArICc7XG4nICsKKyAgICAgICAgICAgICAgJ2lmIChzICYmIHMu
dGhlbikge1xuJyArCisgICAgICAgICAgICAgICAgJyBpZiAoISgiJCR2IiBpbiBzKSkge1xuJyAr
CisgICAgICAgICAgICAgICAgICAnIHA9cztcbicgKworICAgICAgICAgICAgICAgICAgJyBwLiQk
diA9IHVuZGVmaW5lZDtcbicgKworICAgICAgICAgICAgICAgICAgJyBwLnRoZW4oZnVuY3Rpb24o
dikge3AuJCR2PXY7fSk7XG4nICsKKyAgICAgICAgICAgICAgICAgICd9XG4nICsKKyAgICAgICAg
ICAgICAgICAnIHM9cy4kJHZcbicgKworICAgICAgICAgICAgICAnfVxuJzsKKyAgICB9KTsKKyAg
ICBjb2RlICs9ICdyZXR1cm4gczsnOworICAgIGZuID0gRnVuY3Rpb24oJ3MnLCAnaycsIGNvZGUp
OyAvLyBzPXNjb3BlLCBrPWxvY2FscworICAgIGZuLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJl
dHVybiBjb2RlOyB9OworICB9CisKKyAgcmV0dXJuIGdldHRlckZuQ2FjaGVbcGF0aF0gPSBmbjsK
K30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoqCisgKiBAbmdk
b2MgZnVuY3Rpb24KKyAqIEBuYW1lIG5nLiRwYXJzZQorICogQGZ1bmN0aW9uCisgKgorICogQGRl
c2NyaXB0aW9uCisgKgorICogQ29udmVydHMgQW5ndWxhciB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lv
biBleHByZXNzaW9ufSBpbnRvIGEgZnVuY3Rpb24uCisgKgorICogPHByZT4KKyAqICAgdmFyIGdl
dHRlciA9ICRwYXJzZSgndXNlci5uYW1lJyk7CisgKiAgIHZhciBzZXR0ZXIgPSBnZXR0ZXIuYXNz
aWduOworICogICB2YXIgY29udGV4dCA9IHt1c2VyOntuYW1lOidhbmd1bGFyJ319OworICogICB2
YXIgbG9jYWxzID0ge3VzZXI6e25hbWU6J2xvY2FsJ319OworICoKKyAqICAgZXhwZWN0KGdldHRl
cihjb250ZXh0KSkudG9FcXVhbCgnYW5ndWxhcicpOworICogICBzZXR0ZXIoY29udGV4dCwgJ25l
d1ZhbHVlJyk7CisgKiAgIGV4cGVjdChjb250ZXh0LnVzZXIubmFtZSkudG9FcXVhbCgnbmV3VmFs
dWUnKTsKKyAqICAgZXhwZWN0KGdldHRlcihjb250ZXh0LCBsb2NhbHMpKS50b0VxdWFsKCdsb2Nh
bCcpOworICogPC9wcmU+CisgKgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFN0
cmluZyBleHByZXNzaW9uIHRvIGNvbXBpbGUuCisgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4
dCwgbG9jYWxzKX0gYSBmdW5jdGlvbiB3aGljaCByZXByZXNlbnRzIHRoZSBjb21waWxlZCBleHBy
ZXNzaW9uOgorICoKKyAqICAgICogYGNvbnRleHRgIOKAkyBge29iamVjdH1gIOKAkyBhbiBvYmpl
Y3QgYWdhaW5zdCB3aGljaCBhbnkgZXhwcmVzc2lvbnMgZW1iZWRkZWQgaW4gdGhlIHN0cmluZ3MK
KyAqICAgICAgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0ICh0aXBpY2FsbHkgYSBzY29wZSBvYmplY3Qp
LgorICogICAgKiBgbG9jYWxzYCDigJMgYHtvYmplY3Q9fWAg4oCTIGxvY2FsIHZhcmlhYmxlcyBj
b250ZXh0IG9iamVjdCwgdXNlZnVsIGZvciBvdmVycmlkaW5nIHZhbHVlcyBpbgorICogICAgICBg
Y29udGV4dGAuCisgKgorICogICAgVGhlIHJldHVybiBmdW5jdGlvbiBhbHNvIGhhcyBhbiBgYXNz
aWduYCBwcm9wZXJ0eSwgaWYgdGhlIGV4cHJlc3Npb24gaXMgYXNzaWduYWJsZSwgd2hpY2gKKyAq
ICAgIGFsbG93cyBvbmUgdG8gc2V0IHZhbHVlcyB0byBleHByZXNzaW9ucy4KKyAqCisgKi8KK2Z1
bmN0aW9uICRQYXJzZVByb3ZpZGVyKCkgeworICB2YXIgY2FjaGUgPSB7fTsKKyAgdGhpcy4kZ2V0
ID0gWyckZmlsdGVyJywgJyRzbmlmZmVyJywgZnVuY3Rpb24oJGZpbHRlciwgJHNuaWZmZXIpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24oZXhwKSB7CisgICAgICBzd2l0Y2godHlwZW9mIGV4cCkgewor
ICAgICAgICBjYXNlICdzdHJpbmcnOgorICAgICAgICAgIHJldHVybiBjYWNoZS5oYXNPd25Qcm9w
ZXJ0eShleHApCisgICAgICAgICAgICA/IGNhY2hlW2V4cF0KKyAgICAgICAgICAgIDogY2FjaGVb
ZXhwXSA9ICBwYXJzZXIoZXhwLCBmYWxzZSwgJGZpbHRlciwgJHNuaWZmZXIuY3NwKTsKKyAgICAg
ICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgIHJldHVybiBleHA7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgcmV0dXJuIG5vb3A7CisgICAgICB9CisgICAgfTsKKyAgfV07Cit9CisK
Ky8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lIG5nLiRxCisgKiBAcmVxdWlyZXMgJHJv
b3RTY29wZQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogQSBwcm9taXNlL2RlZmVycmVkIGltcGxl
bWVudGF0aW9uIGluc3BpcmVkIGJ5IFtLcmlzIEtvd2FsJ3MgUV0oaHR0cHM6Ly9naXRodWIuY29t
L2tyaXNrb3dhbC9xKS4KKyAqCisgKiBbVGhlIENvbW1vbkpTIFByb21pc2UgcHJvcG9zYWxdKGh0
dHA6Ly93aWtpLmNvbW1vbmpzLm9yZy93aWtpL1Byb21pc2VzKSBkZXNjcmliZXMgYSBwcm9taXNl
IGFzIGFuCisgKiBpbnRlcmZhY2UgZm9yIGludGVyYWN0aW5nIHdpdGggYW4gb2JqZWN0IHRoYXQg
cmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGFuIGFjdGlvbiB0aGF0IGlzCisgKiBwZXJmb3JtZWQg
YXN5bmNocm9ub3VzbHksIGFuZCBtYXkgb3IgbWF5IG5vdCBiZSBmaW5pc2hlZCBhdCBhbnkgZ2l2
ZW4gcG9pbnQgaW4gdGltZS4KKyAqCisgKiBGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBkZWFsaW5n
IHdpdGggZXJyb3IgaGFuZGxpbmcsIGRlZmVycmVkIGFuZCBwcm9taXNlIEFQSXMgYXJlIHRvCisg
KiBhc3luY2hyb25vdXMgcHJvZ3JhbW1pbmcgd2hhdCBgdHJ5YCwgYGNhdGNoYCBhbmQgYHRocm93
YCBrZXl3b3JkcyBhcmUgdG8gc3luY2hyb25vdXMgcHJvZ3JhbW1pbmcuCisgKgorICogPHByZT4K
KyAqICAgLy8gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgZXhhbXBsZSBsZXQncyBhc3N1bWUgdGhh
dCB2YXJpYWJsZXMgYCRxYCBhbmQgYHNjb3BlYCBhcmUKKyAqICAgLy8gYXZhaWxhYmxlIGluIHRo
ZSBjdXJyZW50IGxleGljYWwgc2NvcGUgKHRoZXkgY291bGQgaGF2ZSBiZWVuIGluamVjdGVkIG9y
IHBhc3NlZCBpbikuCisgKgorICogICBmdW5jdGlvbiBhc3luY0dyZWV0KG5hbWUpIHsKKyAqICAg
ICB2YXIgZGVmZXJyZWQgPSAkcS5kZWZlcigpOworICoKKyAqICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgeworICogICAgICAgLy8gc2luY2UgdGhpcyBmbiBleGVjdXRlcyBhc3luYyBpbiBhIGZ1
dHVyZSB0dXJuIG9mIHRoZSBldmVudCBsb29wLCB3ZSBuZWVkIHRvIHdyYXAKKyAqICAgICAgIC8v
IG91ciBjb2RlIGludG8gYW4gJGFwcGx5IGNhbGwgc28gdGhhdCB0aGUgbW9kZWwgY2hhbmdlcyBh
cmUgcHJvcGVybHkgb2JzZXJ2ZWQuCisgKiAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7
CisgKiAgICAgICAgIGlmIChva1RvR3JlZXQobmFtZSkpIHsKKyAqICAgICAgICAgICBkZWZlcnJl
ZC5yZXNvbHZlKCdIZWxsbywgJyArIG5hbWUgKyAnIScpOworICogICAgICAgICB9IGVsc2Ugewor
ICogICAgICAgICAgIGRlZmVycmVkLnJlamVjdCgnR3JlZXRpbmcgJyArIG5hbWUgKyAnIGlzIG5v
dCBhbGxvd2VkLicpOworICogICAgICAgICB9CisgKiAgICAgICB9KTsKKyAqICAgICB9LCAxMDAw
KTsKKyAqCisgKiAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7CisgKiAgIH0KKyAqCisgKiAg
IHZhciBwcm9taXNlID0gYXN5bmNHcmVldCgnUm9iaW4gSG9vZCcpOworICogICBwcm9taXNlLnRo
ZW4oZnVuY3Rpb24oZ3JlZXRpbmcpIHsKKyAqICAgICBhbGVydCgnU3VjY2VzczogJyArIGdyZWV0
aW5nKTsKKyAqICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7CisgKiAgICAgYWxlcnQoJ0ZhaWxlZDog
JyArIHJlYXNvbik7CisgKiAgIH0pOworICogPC9wcmU+CisgKgorICogQXQgZmlyc3QgaXQgbWln
aHQgbm90IGJlIG9idmlvdXMgd2h5IHRoaXMgZXh0cmEgY29tcGxleGl0eSBpcyB3b3J0aCB0aGUg
dHJvdWJsZS4gVGhlIHBheW9mZgorICogY29tZXMgaW4gdGhlIHdheSBvZgorICogW2d1YXJhbnRl
ZXMgdGhhdCBwcm9taXNlIGFuZCBkZWZlcnJlZCBBUElzIG1ha2VdKGh0dHBzOi8vZ2l0aHViLmNv
bS9rcmlza293YWwvdW5jb21tb25qcy9ibG9iL21hc3Rlci9wcm9taXNlcy9zcGVjaWZpY2F0aW9u
Lm1kKS4KKyAqCisgKiBBZGRpdGlvbmFsbHkgdGhlIHByb21pc2UgYXBpIGFsbG93cyBmb3IgY29t
cG9zaXRpb24gdGhhdCBpcyB2ZXJ5IGhhcmQgdG8gZG8gd2l0aCB0aGUKKyAqIHRyYWRpdGlvbmFs
IGNhbGxiYWNrIChbQ1BTXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbnRpbnVhdGlv
bi1wYXNzaW5nX3N0eWxlKSkgYXBwcm9hY2guCisgKiBGb3IgbW9yZSBvbiB0aGlzIHBsZWFzZSBz
ZWUgdGhlIFtRIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvcSkg
ZXNwZWNpYWxseSB0aGUKKyAqIHNlY3Rpb24gb24gc2VyaWFsIG9yIHBhcmFsbGVsIGpvaW5pbmcg
b2YgcHJvbWlzZXMuCisgKgorICoKKyAqICMgVGhlIERlZmVycmVkIEFQSQorICoKKyAqIEEgbmV3
IGluc3RhbmNlIG9mIGRlZmVycmVkIGlzIGNvbnN0cnVjdGVkIGJ5IGNhbGxpbmcgYCRxLmRlZmVy
KClgLgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoZSBkZWZlcnJlZCBvYmplY3QgaXMgdG8gZXhw
b3NlIHRoZSBhc3NvY2lhdGVkIFByb21pc2UgaW5zdGFuY2UgYXMgd2VsbCBhcyBBUElzCisgKiB0
aGF0IGNhbiBiZSB1c2VkIGZvciBzaWduYWxpbmcgdGhlIHN1Y2Nlc3NmdWwgb3IgdW5zdWNjZXNz
ZnVsIGNvbXBsZXRpb24gb2YgdGhlIHRhc2suCisgKgorICogKipNZXRob2RzKioKKyAqCisgKiAt
IGByZXNvbHZlKHZhbHVlKWAg4oCTIHJlc29sdmVzIHRoZSBkZXJpdmVkIHByb21pc2Ugd2l0aCB0
aGUgYHZhbHVlYC4gSWYgdGhlIHZhbHVlIGlzIGEgcmVqZWN0aW9uCisgKiAgIGNvbnN0cnVjdGVk
IHZpYSBgJHEucmVqZWN0YCwgdGhlIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCBpbnN0ZWFkLgor
ICogLSBgcmVqZWN0KHJlYXNvbilgIOKAkyByZWplY3RzIHRoZSBkZXJpdmVkIHByb21pc2Ugd2l0
aCB0aGUgYHJlYXNvbmAuIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICogICByZXNvbHZpbmcgaXQg
d2l0aCBhIHJlamVjdGlvbiBjb25zdHJ1Y3RlZCB2aWEgYCRxLnJlamVjdGAuCisgKgorICogKipQ
cm9wZXJ0aWVzKioKKyAqCisgKiAtIHByb21pc2Ug4oCTIGB7UHJvbWlzZX1gIOKAkyBwcm9taXNl
IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWZlcnJlZC4KKyAqCisgKgorICogIyBUaGUg
UHJvbWlzZSBBUEkKKyAqCisgKiBBIG5ldyBwcm9taXNlIGluc3RhbmNlIGlzIGNyZWF0ZWQgd2hl
biBhIGRlZmVycmVkIGluc3RhbmNlIGlzIGNyZWF0ZWQgYW5kIGNhbiBiZSByZXRyaWV2ZWQgYnkK
KyAqIGNhbGxpbmcgYGRlZmVycmVkLnByb21pc2VgLgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRo
ZSBwcm9taXNlIG9iamVjdCBpcyB0byBhbGxvdyBmb3IgaW50ZXJlc3RlZCBwYXJ0aWVzIHRvIGdl
dCBhY2Nlc3MgdG8gdGhlIHJlc3VsdAorICogb2YgdGhlIGRlZmVycmVkIHRhc2sgd2hlbiBpdCBj
b21wbGV0ZXMuCisgKgorICogKipNZXRob2RzKioKKyAqCisgKiAtIGB0aGVuKHN1Y2Nlc3NDYWxs
YmFjaywgZXJyb3JDYWxsYmFjaylgIOKAkyByZWdhcmRsZXNzIG9mIHdoZW4gdGhlIHByb21pc2Ug
d2FzIG9yIHdpbGwgYmUgcmVzb2x2ZWQKKyAqICAgb3IgcmVqZWN0ZWQgY2FsbHMgb25lIG9mIHRo
ZSBzdWNjZXNzIG9yIGVycm9yIGNhbGxiYWNrcyBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIHRo
ZSByZXN1bHQKKyAqICAgaXMgYXZhaWxhYmxlLiBUaGUgY2FsbGJhY2tzIGFyZSBjYWxsZWQgd2l0
aCBhIHNpbmdsZSBhcmd1bWVudCB0aGUgcmVzdWx0IG9yIHJlamVjdGlvbiByZWFzb24uCisgKgor
ICogICBUaGlzIG1ldGhvZCAqcmV0dXJucyBhIG5ldyBwcm9taXNlKiB3aGljaCBpcyByZXNvbHZl
ZCBvciByZWplY3RlZCB2aWEgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKKyAqICAgYHN1Y2Nlc3ND
YWxsYmFja2Agb3IgYGVycm9yQ2FsbGJhY2tgLgorICoKKyAqCisgKiAjIENoYWluaW5nIHByb21p
c2VzCisgKgorICogQmVjYXVzZSBjYWxsaW5nIGB0aGVuYCBhcGkgb2YgYSBwcm9taXNlIHJldHVy
bnMgYSBuZXcgZGVyaXZlZCBwcm9taXNlLCBpdCBpcyBlYXNpbHkgcG9zc2libGUKKyAqIHRvIGNy
ZWF0ZSBhIGNoYWluIG9mIHByb21pc2VzOgorICoKKyAqIDxwcmU+CisgKiAgIHByb21pc2VCID0g
cHJvbWlzZUEudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAqICAgICByZXR1cm4gcmVzdWx0ICsg
MTsKKyAqICAgfSk7CisgKgorICogICAvLyBwcm9taXNlQiB3aWxsIGJlIHJlc29sdmVkIGltbWVk
aWF0ZWx5IGFmdGVyIHByb21pc2VBIGlzIHJlc29sdmVkIGFuZCBpdHMgdmFsdWUgd2lsbCBiZQor
ICogICAvLyB0aGUgcmVzdWx0IG9mIHByb21pc2VBIGluY3JlbWVudGVkIGJ5IDEKKyAqIDwvcHJl
PgorICoKKyAqIEl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBjaGFpbnMgb2YgYW55IGxlbmd0aCBh
bmQgc2luY2UgYSBwcm9taXNlIGNhbiBiZSByZXNvbHZlZCB3aXRoIGFub3RoZXIKKyAqIHByb21p
c2UgKHdoaWNoIHdpbGwgZGVmZXIgaXRzIHJlc29sdXRpb24gZnVydGhlciksIGl0IGlzIHBvc3Np
YmxlIHRvIHBhdXNlL2RlZmVyIHJlc29sdXRpb24gb2YKKyAqIHRoZSBwcm9taXNlcyBhdCBhbnkg
cG9pbnQgaW4gdGhlIGNoYWluLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBw
b3dlcmZ1bCBhcGlzIGxpa2UKKyAqICRodHRwJ3MgcmVzcG9uc2UgaW50ZXJjZXB0b3JzLgorICoK
KyAqCisgKiAjIERpZmZlcmVuY2VzIGJldHdlZW4gS3JpcyBLb3dhbCdzIFEgYW5kICRxCisgKgor
ICogIFRoZXJlIGFyZSB0aHJlZSBtYWluIGRpZmZlcmVuY2VzOgorICoKKyAqIC0gJHEgaXMgaW50
ZWdyYXRlZCB3aXRoIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZX0gU2NvcGUgbW9kZWwg
b2JzZXJ2YXRpb24KKyAqICAgbWVjaGFuaXNtIGluIGFuZ3VsYXIsIHdoaWNoIG1lYW5zIGZhc3Rl
ciBwcm9wYWdhdGlvbiBvZiByZXNvbHV0aW9uIG9yIHJlamVjdGlvbiBpbnRvIHlvdXIKKyAqICAg
bW9kZWxzIGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBicm93c2VyIHJlcGFpbnRzLCB3aGljaCB3
b3VsZCByZXN1bHQgaW4gZmxpY2tlcmluZyBVSS4KKyAqIC0gJHEgcHJvbWlzZXMgYXJlIHJlY29n
bml6ZWQgYnkgdGhlIHRlbXBsYXRpbmcgZW5naW5lIGluIGFuZ3VsYXIsIHdoaWNoIG1lYW5zIHRo
YXQgaW4gdGVtcGxhdGVzCisgKiAgIHlvdSBjYW4gdHJlYXQgcHJvbWlzZXMgYXR0YWNoZWQgdG8g
YSBzY29wZSBhcyBpZiB0aGV5IHdlcmUgdGhlIHJlc3VsdGluZyB2YWx1ZXMuCisgKiAtIFEgaGFz
IG1hbnkgbW9yZSBmZWF0dXJlcyB0aGFuICRxLCBidXQgdGhhdCBjb21lcyBhdCBhIGNvc3Qgb2Yg
Ynl0ZXMuICRxIGlzIHRpbnksIGJ1dCBjb250YWlucworICogICBhbGwgdGhlIGltcG9ydGFudCBm
dW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgY29tbW9uIGFzeW5jIHRhc2tzLgorICogCisgKiAgIyBU
ZXN0aW5nCisgKiAKKyAqICA8cHJlPgorICogICAgaXQoJ3Nob3VsZCBzaW11bGF0ZSBwcm9taXNl
JywgaW5qZWN0KGZ1bmN0aW9uKCRxLCAkcm9vdFNjb3BlKSB7CisgKiAgICAgIHZhciBkZWZlcnJl
ZCA9ICRxLmRlZmVyKCk7CisgKiAgICAgIHZhciBwcm9taXNlID0gZGVmZXJyZWQucHJvbWlzZTsK
KyAqICAgICAgdmFyIHJlc29sdmVkVmFsdWU7CisgKiAKKyAqICAgICAgcHJvbWlzZS50aGVuKGZ1
bmN0aW9uKHZhbHVlKSB7IHJlc29sdmVkVmFsdWUgPSB2YWx1ZTsgfSk7CisgKiAgICAgIGV4cGVj
dChyZXNvbHZlZFZhbHVlKS50b0JlVW5kZWZpbmVkKCk7CisgKiAKKyAqICAgICAgLy8gU2ltdWxh
dGUgcmVzb2x2aW5nIG9mIHByb21pc2UKKyAqICAgICAgZGVmZXJyZWQucmVzb2x2ZSgxMjMpOwor
ICogICAgICAvLyBOb3RlIHRoYXQgdGhlICd0aGVuJyBmdW5jdGlvbiBkb2VzIG5vdCBnZXQgY2Fs
bGVkIHN5bmNocm9ub3VzbHkuCisgKiAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRo
ZSBwcm9taXNlIEFQSSB0byBhbHdheXMgYmUgYXN5bmMsIHdoZXRoZXIgb3Igbm90CisgKiAgICAg
IC8vIGl0IGdvdCBjYWxsZWQgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseS4KKyAqICAg
ICAgZXhwZWN0KHJlc29sdmVkVmFsdWUpLnRvQmVVbmRlZmluZWQoKTsKKyAqIAorICogICAgICAv
LyBQcm9wYWdhdGUgcHJvbWlzZSByZXNvbHV0aW9uIHRvICd0aGVuJyBmdW5jdGlvbnMgdXNpbmcg
JGFwcGx5KCkuCisgKiAgICAgICRyb290U2NvcGUuJGFwcGx5KCk7CisgKiAgICAgIGV4cGVjdChy
ZXNvbHZlZFZhbHVlKS50b0VxdWFsKDEyMyk7CisgKiAgICB9KTsKKyAqICA8L3ByZT4KKyAqLwor
ZnVuY3Rpb24gJFFQcm92aWRlcigpIHsKKworICB0aGlzLiRnZXQgPSBbJyRyb290U2NvcGUnLCAn
JGV4Y2VwdGlvbkhhbmRsZXInLCBmdW5jdGlvbigkcm9vdFNjb3BlLCAkZXhjZXB0aW9uSGFuZGxl
cikgeworICAgIHJldHVybiBxRmFjdG9yeShmdW5jdGlvbihjYWxsYmFjaykgeworICAgICAgJHJv
b3RTY29wZS4kZXZhbEFzeW5jKGNhbGxiYWNrKTsKKyAgICB9LCAkZXhjZXB0aW9uSGFuZGxlcik7
CisgIH1dOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIHByb21pc2UgbWFuYWdlci4KKyAq
CisgKiBAcGFyYW0ge2Z1bmN0aW9uKGZ1bmN0aW9uKX0gbmV4dFRpY2sgRnVuY3Rpb24gZm9yIGV4
ZWN1dGluZyBmdW5jdGlvbnMgaW4gdGhlIG5leHQgdHVybi4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24o
Li4uKil9IGV4Y2VwdGlvbkhhbmRsZXIgRnVuY3Rpb24gaW50byB3aGljaCB1bmV4cGVjdGVkIGV4
Y2VwdGlvbnMgYXJlIHBhc3NlZCBmb3IKKyAqICAgICBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgKiBA
cmV0dXJucyB7b2JqZWN0fSBQcm9taXNlIG1hbmFnZXIuCisgKi8KK2Z1bmN0aW9uIHFGYWN0b3J5
KG5leHRUaWNrLCBleGNlcHRpb25IYW5kbGVyKSB7CisKKyAgLyoqCisgICAqIEBuZ2RvYworICAg
KiBAbmFtZSBuZy4kcSNkZWZlcgorICAgKiBAbWV0aG9kT2YgbmcuJHEKKyAgICogQGRlc2NyaXB0
aW9uCisgICAqIENyZWF0ZXMgYSBgRGVmZXJyZWRgIG9iamVjdCB3aGljaCByZXByZXNlbnRzIGEg
dGFzayB3aGljaCB3aWxsIGZpbmlzaCBpbiB0aGUgZnV0dXJlLgorICAgKgorICAgKiBAcmV0dXJu
cyB7RGVmZXJyZWR9IFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgZGVmZXJyZWQuCisgICAqLwor
ICB2YXIgZGVmZXIgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGVuZGluZyA9IFtdLAorICAgICAg
ICB2YWx1ZSwgZGVmZXJyZWQ7CisKKyAgICBkZWZlcnJlZCA9IHsKKworICAgICAgcmVzb2x2ZTog
ZnVuY3Rpb24odmFsKSB7CisgICAgICAgIGlmIChwZW5kaW5nKSB7CisgICAgICAgICAgdmFyIGNh
bGxiYWNrcyA9IHBlbmRpbmc7CisgICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgICB2YWx1ZSA9IHJlZih2YWwpOworCisgICAgICAgICAgaWYgKGNhbGxiYWNrcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgIG5leHRUaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICB2YXIg
Y2FsbGJhY2s7CisgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNhbGxiYWNrcy5s
ZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFj
a3NbaV07CisgICAgICAgICAgICAgICAgdmFsdWUudGhlbihjYWxsYmFja1swXSwgY2FsbGJhY2tb
MV0pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgIH0sCisKKworICAgICAgcmVqZWN0OiBmdW5jdGlvbihyZWFzb24pIHsKKyAg
ICAgICAgZGVmZXJyZWQucmVzb2x2ZShyZWplY3QocmVhc29uKSk7CisgICAgICB9LAorCisKKyAg
ICAgIHByb21pc2U6IHsKKyAgICAgICAgdGhlbjogZnVuY3Rpb24oY2FsbGJhY2ssIGVycmJhY2sp
IHsKKyAgICAgICAgICB2YXIgcmVzdWx0ID0gZGVmZXIoKTsKKworICAgICAgICAgIHZhciB3cmFw
cGVkQ2FsbGJhY2sgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgcmVzdWx0LnJlc29sdmUoKGNhbGxiYWNrIHx8IGRlZmF1bHRDYWxsYmFjaykodmFs
dWUpKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICBleGNlcHRpb25I
YW5kbGVyKGUpOworICAgICAgICAgICAgICByZXN1bHQucmVqZWN0KGUpOworICAgICAgICAgICAg
fQorICAgICAgICAgIH07CisKKyAgICAgICAgICB2YXIgd3JhcHBlZEVycmJhY2sgPSBmdW5jdGlv
bihyZWFzb24pIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIHJlc3VsdC5yZXNv
bHZlKChlcnJiYWNrIHx8IGRlZmF1bHRFcnJiYWNrKShyZWFzb24pKTsKKyAgICAgICAgICAgIH0g
Y2F0Y2goZSkgeworICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAgICAg
ICAgICByZXN1bHQucmVqZWN0KGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH07CisKKyAg
ICAgICAgICBpZiAocGVuZGluZykgeworICAgICAgICAgICAgcGVuZGluZy5wdXNoKFt3cmFwcGVk
Q2FsbGJhY2ssIHdyYXBwZWRFcnJiYWNrXSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHZhbHVlLnRoZW4od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkRXJyYmFjayk7CisgICAgICAg
ICAgfQorCisgICAgICAgICAgcmV0dXJuIHJlc3VsdC5wcm9taXNlOworICAgICAgICB9CisgICAg
ICB9CisgICAgfTsKKworICAgIHJldHVybiBkZWZlcnJlZDsKKyAgfTsKKworCisgIHZhciByZWYg
PSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS50aGVuKSByZXR1cm4g
dmFsdWU7CisgICAgcmV0dXJuIHsKKyAgICAgIHRoZW46IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Cisg
ICAgICAgIHZhciByZXN1bHQgPSBkZWZlcigpOworICAgICAgICBuZXh0VGljayhmdW5jdGlvbigp
IHsKKyAgICAgICAgICByZXN1bHQucmVzb2x2ZShjYWxsYmFjayh2YWx1ZSkpOworICAgICAgICB9
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5wcm9taXNlOworICAgICAgfQorICAgIH07CisgIH07
CisKKworICAvKioKKyAgICogQG5nZG9jCisgICAqIEBuYW1lIG5nLiRxI3JlamVjdAorICAgKiBA
bWV0aG9kT2YgbmcuJHEKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIENyZWF0ZXMgYSBwcm9taXNl
IHRoYXQgaXMgcmVzb2x2ZWQgYXMgcmVqZWN0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGByZWFzb25g
LiBUaGlzIGFwaSBzaG91bGQgYmUKKyAgICogdXNlZCB0byBmb3J3YXJkIHJlamVjdGlvbiBpbiBh
IGNoYWluIG9mIHByb21pc2VzLiBJZiB5b3UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgbGFzdCBwcm9t
aXNlIGluCisgICAqIGEgcHJvbWlzZSBjaGFpbiwgeW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJv
dXQgaXQuCisgICAqCisgICAqIFdoZW4gY29tcGFyaW5nIGRlZmVycmVkcy9wcm9taXNlcyB0byB0
aGUgZmFtaWxpYXIgYmVoYXZpb3Igb2YgdHJ5L2NhdGNoL3Rocm93LCB0aGluayBvZgorICAgKiBg
cmVqZWN0YCBhcyB0aGUgYHRocm93YCBrZXl3b3JkIGluIEphdmFTY3JpcHQuIFRoaXMgYWxzbyBt
ZWFucyB0aGF0IGlmIHlvdSAiY2F0Y2giIGFuIGVycm9yIHZpYQorICAgKiBhIHByb21pc2UgZXJy
b3IgY2FsbGJhY2sgYW5kIHlvdSB3YW50IHRvIGZvcndhcmQgdGhlIGVycm9yIHRvIHRoZSBwcm9t
aXNlIGRlcml2ZWQgZnJvbSB0aGUKKyAgICogY3VycmVudCBwcm9taXNlLCB5b3UgaGF2ZSB0byAi
cmV0aHJvdyIgdGhlIGVycm9yIGJ5IHJldHVybmluZyBhIHJlamVjdGlvbiBjb25zdHJ1Y3RlZCB2
aWEKKyAgICogYHJlamVjdGAuCisgICAqCisgICAqIDxwcmU+CisgICAqICAgcHJvbWlzZUIgPSBw
cm9taXNlQS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgKiAgICAgLy8gc3VjY2VzczogZG8g
c29tZXRoaW5nIGFuZCByZXNvbHZlIHByb21pc2VCCisgICAqICAgICAvLyAgICAgICAgICB3aXRo
IHRoZSBvbGQgb3IgYSBuZXcgcmVzdWx0CisgICAqICAgICByZXR1cm4gcmVzdWx0OworICAgKiAg
IH0sIGZ1bmN0aW9uKHJlYXNvbikgeworICAgKiAgICAgLy8gZXJyb3I6IGhhbmRsZSB0aGUgZXJy
b3IgaWYgcG9zc2libGUgYW5kCisgICAqICAgICAvLyAgICAgICAgcmVzb2x2ZSBwcm9taXNlQiB3
aXRoIG5ld1Byb21pc2VPclZhbHVlLAorICAgKiAgICAgLy8gICAgICAgIG90aGVyd2lzZSBmb3J3
YXJkIHRoZSByZWplY3Rpb24gdG8gcHJvbWlzZUIKKyAgICogICAgIGlmIChjYW5IYW5kbGUocmVh
c29uKSkgeworICAgKiAgICAgIC8vIGhhbmRsZSB0aGUgZXJyb3IgYW5kIHJlY292ZXIKKyAgICog
ICAgICByZXR1cm4gbmV3UHJvbWlzZU9yVmFsdWU7CisgICAqICAgICB9CisgICAqICAgICByZXR1
cm4gJHEucmVqZWN0KHJlYXNvbik7CisgICAqICAgfSk7CisgICAqIDwvcHJlPgorICAgKgorICAg
KiBAcGFyYW0geyp9IHJlYXNvbiBDb25zdGFudCwgbWVzc2FnZSwgZXhjZXB0aW9uIG9yIGFuIG9i
amVjdCByZXByZXNlbnRpbmcgdGhlIHJlamVjdGlvbiByZWFzb24uCisgICAqIEByZXR1cm5zIHtQ
cm9taXNlfSBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdhcyBhbHJlYWR5IHJlc29sdmVkIGFzIHJl
amVjdGVkIHdpdGggdGhlIGByZWFzb25gLgorICAgKi8KKyAgdmFyIHJlamVjdCA9IGZ1bmN0aW9u
KHJlYXNvbikgeworICAgIHJldHVybiB7CisgICAgICB0aGVuOiBmdW5jdGlvbihjYWxsYmFjaywg
ZXJyYmFjaykgeworICAgICAgICB2YXIgcmVzdWx0ID0gZGVmZXIoKTsKKyAgICAgICAgbmV4dFRp
Y2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgcmVzdWx0LnJlc29sdmUoKGVycmJhY2sgfHwgZGVm
YXVsdEVycmJhY2spKHJlYXNvbikpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5wcm9taXNlOworICAgICAgfQorICAgIH07CisgIH07CisKKworICAvKioKKyAgICogQG5nZG9j
CisgICAqIEBuYW1lIG5nLiRxI3doZW4KKyAgICogQG1ldGhvZE9mIG5nLiRxCisgICAqIEBkZXNj
cmlwdGlvbgorICAgKiBXcmFwcyBhbiBvYmplY3QgdGhhdCBtaWdodCBiZSBhIHZhbHVlIG9yIGEg
KDNyZCBwYXJ0eSkgdGhlbi1hYmxlIHByb21pc2UgaW50byBhICRxIHByb21pc2UuCisgICAqIFRo
aXMgaXMgdXNlZnVsIHdoZW4geW91IGFyZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0IHRoYXQgbWln
aHQgb3IgbWlnaHQgbm90IGJlIGEgcHJvbWlzZSwgb3IgaWYKKyAgICogdGhlIHByb21pc2UgY29t
ZXMgZnJvbSBhIHNvdXJjZSB0aGF0IGNhbid0IGJlIHRydXN0ZWQuCisgICAqCisgICAqIEBwYXJh
bSB7Kn0gdmFsdWUgVmFsdWUgb3IgYSBwcm9taXNlCisgICAqIEByZXR1cm5zIHtQcm9taXNlfSBS
ZXR1cm5zIGEgcHJvbWlzZSBvZiB0aGUgcGFzc2VkIHZhbHVlIG9yIHByb21pc2UKKyAgICovCisg
IHZhciB3aGVuID0gZnVuY3Rpb24odmFsdWUsIGNhbGxiYWNrLCBlcnJiYWNrKSB7CisgICAgdmFy
IHJlc3VsdCA9IGRlZmVyKCksCisgICAgICAgIGRvbmU7CisKKyAgICB2YXIgd3JhcHBlZENhbGxi
YWNrID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHJldHVybiAoY2Fs
bGJhY2sgfHwgZGVmYXVsdENhbGxiYWNrKSh2YWx1ZSk7CisgICAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgIGV4Y2VwdGlvbkhhbmRsZXIoZSk7CisgICAgICAgIHJldHVybiByZWplY3QoZSk7Cisg
ICAgICB9CisgICAgfTsKKworICAgIHZhciB3cmFwcGVkRXJyYmFjayA9IGZ1bmN0aW9uKHJlYXNv
bikgeworICAgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIChlcnJiYWNrIHx8IGRlZmF1bHRFcnJi
YWNrKShyZWFzb24pOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBleGNlcHRpb25IYW5k
bGVyKGUpOworICAgICAgICByZXR1cm4gcmVqZWN0KGUpOworICAgICAgfQorICAgIH07CisKKyAg
ICBuZXh0VGljayhmdW5jdGlvbigpIHsKKyAgICAgIHJlZih2YWx1ZSkudGhlbihmdW5jdGlvbih2
YWx1ZSkgeworICAgICAgICBpZiAoZG9uZSkgcmV0dXJuOworICAgICAgICBkb25lID0gdHJ1ZTsK
KyAgICAgICAgcmVzdWx0LnJlc29sdmUocmVmKHZhbHVlKS50aGVuKHdyYXBwZWRDYWxsYmFjaywg
d3JhcHBlZEVycmJhY2spKTsKKyAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgICBp
ZiAoZG9uZSkgcmV0dXJuOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LnJl
c29sdmUod3JhcHBlZEVycmJhY2socmVhc29uKSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAg
IHJldHVybiByZXN1bHQucHJvbWlzZTsKKyAgfTsKKworCisgIGZ1bmN0aW9uIGRlZmF1bHRDYWxs
YmFjayh2YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZTsKKyAgfQorCisKKyAgZnVuY3Rpb24gZGVm
YXVsdEVycmJhY2socmVhc29uKSB7CisgICAgcmV0dXJuIHJlamVjdChyZWFzb24pOworICB9CisK
KworICAvKioKKyAgICogQG5nZG9jCisgICAqIEBuYW1lIG5nLiRxI2FsbAorICAgKiBAbWV0aG9k
T2YgbmcuJHEKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIENvbWJpbmVzIG11bHRpcGxlIHByb21p
c2VzIGludG8gYSBzaW5nbGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gYWxsIG9mIHRo
ZSBpbnB1dAorICAgKiBwcm9taXNlcyBhcmUgcmVzb2x2ZWQuCisgICAqCisgICAqIEBwYXJhbSB7
QXJyYXkuPFByb21pc2U+fSBwcm9taXNlcyBBbiBhcnJheSBvZiBwcm9taXNlcy4KKyAgICogQHJl
dHVybnMge1Byb21pc2V9IFJldHVybnMgYSBzaW5nbGUgcHJvbWlzZSB0aGF0IHdpbGwgYmUgcmVz
b2x2ZWQgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXMsCisgICAqICAgZWFjaCB2YWx1ZSBjb3JyZXNw
b25kaW5nIHRvIHRoZSBwcm9taXNlIGF0IHRoZSBzYW1lIGluZGV4IGluIHRoZSBgcHJvbWlzZXNg
IGFycmF5LiBJZiBhbnkgb2YKKyAgICogICB0aGUgcHJvbWlzZXMgaXMgcmVzb2x2ZWQgd2l0aCBh
IHJlamVjdGlvbiwgdGhpcyByZXN1bHRpbmcgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGgg
dGhlCisgICAqICAgc2FtZSByZWplY3Rpb24uCisgICAqLworICBmdW5jdGlvbiBhbGwocHJvbWlz
ZXMpIHsKKyAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpLAorICAgICAgICBjb3VudGVyID0gcHJv
bWlzZXMubGVuZ3RoLAorICAgICAgICByZXN1bHRzID0gW107CisKKyAgICBpZiAoY291bnRlcikg
eworICAgICAgZm9yRWFjaChwcm9taXNlcywgZnVuY3Rpb24ocHJvbWlzZSwgaW5kZXgpIHsKKyAg
ICAgICAgcmVmKHByb21pc2UpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICBpZiAo
aW5kZXggaW4gcmVzdWx0cykgcmV0dXJuOworICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdmFs
dWU7CisgICAgICAgICAgaWYgKCEoLS1jb3VudGVyKSkgZGVmZXJyZWQucmVzb2x2ZShyZXN1bHRz
KTsKKyAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7CisgICAgICAgICAgaWYgKGluZGV4IGlu
IHJlc3VsdHMpIHJldHVybjsKKyAgICAgICAgICBkZWZlcnJlZC5yZWplY3QocmVhc29uKTsKKyAg
ICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgZGVmZXJyZWQucmVzb2x2
ZShyZXN1bHRzKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTsKKyAgfQor
CisgIHJldHVybiB7CisgICAgZGVmZXI6IGRlZmVyLAorICAgIHJlamVjdDogcmVqZWN0LAorICAg
IHdoZW46IHdoZW4sCisgICAgYWxsOiBhbGwKKyAgfTsKK30KKworLyoqCisgKiBAbmdkb2Mgb2Jq
ZWN0CisgKiBAbmFtZSBuZy4kcm91dGVQcm92aWRlcgorICogQGZ1bmN0aW9uCisgKgorICogQGRl
c2NyaXB0aW9uCisgKgorICogVXNlZCBmb3IgY29uZmlndXJpbmcgcm91dGVzLiBTZWUge0BsaW5r
IG5nLiRyb3V0ZSAkcm91dGV9IGZvciBhbiBleGFtcGxlLgorICovCitmdW5jdGlvbiAkUm91dGVQ
cm92aWRlcigpeworICB2YXIgcm91dGVzID0ge307CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICogQG5hbWUgbmcuJHJvdXRlUHJvdmlkZXIjd2hlbgorICAgKiBAbWV0aG9kT2Ygbmcu
JHJvdXRlUHJvdmlkZXIKKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUm91dGUgcGF0
aCAobWF0Y2hlZCBhZ2FpbnN0IGAkbG9jYXRpb24ucGF0aGApLiBJZiBgJGxvY2F0aW9uLnBhdGhg
CisgICAqICAgIGNvbnRhaW5zIHJlZHVuZGFudCB0cmFpbGluZyBzbGFzaCBvciBpcyBtaXNzaW5n
IG9uZSwgdGhlIHJvdXRlIHdpbGwgc3RpbGwgbWF0Y2ggYW5kIHRoZQorICAgKiAgICBgJGxvY2F0
aW9uLnBhdGhgIHdpbGwgYmUgdXBkYXRlZCB0byBhZGQgb3IgZHJvcCB0aGUgdHJhaWxpbmcgc2xh
c2ggdG8gZXhhY3RseSBtYXRjaCB0aGUKKyAgICogICAgcm91dGUgZGVmaW5pdGlvbi4KKyAgICoK
KyAgICogICAgYHBhdGhgIGNhbiBjb250YWluIG5hbWVkIGdyb3VwcyBzdGFydGluZyB3aXRoIGEg
Y29sb24gKGA6bmFtZWApLiBBbGwgY2hhcmFjdGVycyB1cCB0byB0aGUKKyAgICogICAgbmV4dCBz
bGFzaCBhcmUgbWF0Y2hlZCBhbmQgc3RvcmVkIGluIGAkcm91dGVQYXJhbXNgIHVuZGVyIHRoZSBn
aXZlbiBgbmFtZWAgd2hlbiB0aGUgcm91dGUKKyAgICogICAgbWF0Y2hlcy4KKyAgICoKKyAgICog
QHBhcmFtIHtPYmplY3R9IHJvdXRlIE1hcHBpbmcgaW5mb3JtYXRpb24gdG8gYmUgYXNzaWduZWQg
dG8gYCRyb3V0ZS5jdXJyZW50YCBvbiByb3V0ZQorICAgKiAgICBtYXRjaC4KKyAgICoKKyAgICog
ICAgT2JqZWN0IHByb3BlcnRpZXM6CisgICAqCisgICAqICAgIC0gYGNvbnRyb2xsZXJgIOKAkyBg
eyhzdHJpbmd8ZnVuY3Rpb24oKT19YCDigJMgQ29udHJvbGxlciBmbiB0aGF0IHNob3VsZCBiZSBh
c3NvY2lhdGVkIHdpdGggbmV3bHkKKyAgICogICAgICBjcmVhdGVkIHNjb3BlIG9yIHRoZSBuYW1l
IG9mIGEge0BsaW5rIGFuZ3VsYXIuTW9kdWxlI2NvbnRyb2xsZXIgcmVnaXN0ZXJlZCBjb250cm9s
bGVyfQorICAgKiAgICAgIGlmIHBhc3NlZCBhcyBhIHN0cmluZy4KKyAgICogICAgLSBgdGVtcGxh
dGVgIOKAkyBge3N0cmluZz19YCDigJMgIGh0bWwgdGVtcGxhdGUgYXMgYSBzdHJpbmcgdGhhdCBz
aG91bGQgYmUgdXNlZCBieQorICAgKiAgICAgIHtAbGluayBuZy5kaXJlY3RpdmU6bmdWaWV3IG5n
Vmlld30gb3IKKyAgICogICAgICB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nSW5jbHVkZSBuZ0luY2x1
ZGV9IGRpcmVjdGl2ZXMuCisgICAqICAgICAgdGhpcyBwcm9wZXJ0eSB0YWtlcyBwcmVjZWRlbmNl
IG92ZXIgYHRlbXBsYXRlVXJsYC4KKyAgICogICAgLSBgdGVtcGxhdGVVcmxgIOKAkyBge3N0cmlu
Zz19YCDigJMgcGF0aCB0byBhbiBodG1sIHRlbXBsYXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkK
KyAgICogICAgICB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nVmlldyBuZ1ZpZXd9LgorICAgKiAgICAt
IGByZXNvbHZlYCAtIGB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uPj19YCAtIEFuIG9wdGlvbmFs
IG1hcCBvZiBkZXBlbmRlbmNpZXMgd2hpY2ggc2hvdWxkCisgICAqICAgICAgYmUgaW5qZWN0ZWQg
aW50byB0aGUgY29udHJvbGxlci4gSWYgYW55IG9mIHRoZXNlIGRlcGVuZGVuY2llcyBhcmUgcHJv
bWlzZXMsIHRoZXkgd2lsbCBiZQorICAgKiAgICAgIHJlc29sdmVkIGFuZCBjb252ZXJ0ZWQgdG8g
YSB2YWx1ZSBiZWZvcmUgdGhlIGNvbnRyb2xsZXIgaXMgaW5zdGFudGlhdGVkIGFuZCB0aGUKKyAg
ICogICAgICBgJHJvdXRlQ2hhbmdlU3VjY2Vzc2AgZXZlbnQgaXMgZmlyZWQuIFRoZSBtYXAgb2Jq
ZWN0IGlzOgorICAgKgorICAgKiAgICAgIC0gYGtleWAg4oCTIGB7c3RyaW5nfWA6IGEgbmFtZSBv
ZiBhIGRlcGVuZGVuY3kgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgY29udHJvbGxlci4KKyAgICog
ICAgICAtIGBmYWN0b3J5YCAtIGB7c3RyaW5nfGZ1bmN0aW9ufWA6IElmIGBzdHJpbmdgIHRoZW4g
aXQgaXMgYW4gYWxpYXMgZm9yIGEgc2VydmljZS4KKyAgICogICAgICAgIE90aGVyd2lzZSBpZiBm
dW5jdGlvbiwgdGhlbiBpdCBpcyB7QGxpbmsgYXBpL0FVVE8uJGluamVjdG9yI2ludm9rZSBpbmpl
Y3RlZH0KKyAgICogICAgICAgIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIHRyZWF0ZWQgYXMgdGhl
IGRlcGVuZGVuY3kuIElmIHRoZSByZXN1bHQgaXMgYSBwcm9taXNlLCBpdCBpcyByZXNvbHZlZAor
ICAgKiAgICAgICAgYmVmb3JlIGl0cyB2YWx1ZSBpcyBpbmplY3RlZCBpbnRvIHRoZSBjb250cm9s
bGVyLgorICAgKgorICAgKiAgICAtIGByZWRpcmVjdFRvYCDigJMgeyhzdHJpbmd8ZnVuY3Rpb24o
KSk9fSDigJMgdmFsdWUgdG8gdXBkYXRlCisgICAqICAgICAge0BsaW5rIG5nLiRsb2NhdGlvbiAk
bG9jYXRpb259IHBhdGggd2l0aCBhbmQgdHJpZ2dlciByb3V0ZSByZWRpcmVjdGlvbi4KKyAgICoK
KyAgICogICAgICBJZiBgcmVkaXJlY3RUb2AgaXMgYSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBjYWxs
ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisgICAqCisgICAqICAgICAgLSBge09i
amVjdC48c3RyaW5nPn1gIC0gcm91dGUgcGFyYW1ldGVycyBleHRyYWN0ZWQgZnJvbSB0aGUgY3Vy
cmVudAorICAgKiAgICAgICAgYCRsb2NhdGlvbi5wYXRoKClgIGJ5IGFwcGx5aW5nIHRoZSBjdXJy
ZW50IHJvdXRlIHRlbXBsYXRlVXJsLgorICAgKiAgICAgIC0gYHtzdHJpbmd9YCAtIGN1cnJlbnQg
YCRsb2NhdGlvbi5wYXRoKClgCisgICAqICAgICAgLSBge09iamVjdH1gIC0gY3VycmVudCBgJGxv
Y2F0aW9uLnNlYXJjaCgpYAorICAgKgorICAgKiAgICAgIFRoZSBjdXN0b20gYHJlZGlyZWN0VG9g
IGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhIHN0cmluZyB3aGljaCB3aWxsIGJlIHVz
ZWQKKyAgICogICAgICB0byB1cGRhdGUgYCRsb2NhdGlvbi5wYXRoKClgIGFuZCBgJGxvY2F0aW9u
LnNlYXJjaCgpYC4KKyAgICoKKyAgICogICAgLSBgW3JlbG9hZE9uU2VhcmNoPXRydWVdYCAtIHti
b29sZWFuPX0gLSByZWxvYWQgcm91dGUgd2hlbiBvbmx5ICRsb2NhdGlvbi5zZWFyY2goKQorICAg
KiAgICBjaGFuZ2VzLgorICAgKgorICAgKiAgICAgIElmIHRoZSBvcHRpb24gaXMgc2V0IHRvIGBm
YWxzZWAgYW5kIHVybCBpbiB0aGUgYnJvd3NlciBjaGFuZ2VzLCB0aGVuCisgICAqICAgICAgYCRy
b3V0ZVVwZGF0ZWAgZXZlbnQgaXMgYnJvYWRjYXN0ZWQgb24gdGhlIHJvb3Qgc2NvcGUuCisgICAq
CisgICAqIEByZXR1cm5zIHtPYmplY3R9IHNlbGYKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisg
ICAqIEFkZHMgYSBuZXcgcm91dGUgZGVmaW5pdGlvbiB0byB0aGUgYCRyb3V0ZWAgc2VydmljZS4K
KyAgICovCisgIHRoaXMud2hlbiA9IGZ1bmN0aW9uKHBhdGgsIHJvdXRlKSB7CisgICAgcm91dGVz
W3BhdGhdID0gZXh0ZW5kKHtyZWxvYWRPblNlYXJjaDogdHJ1ZX0sIHJvdXRlKTsKKworICAgIC8v
IGNyZWF0ZSByZWRpcmVjdGlvbiBmb3IgdHJhaWxpbmcgc2xhc2hlcworICAgIGlmIChwYXRoKSB7
CisgICAgICB2YXIgcmVkaXJlY3RQYXRoID0gKHBhdGhbcGF0aC5sZW5ndGgtMV0gPT0gJy8nKQor
ICAgICAgICAgID8gcGF0aC5zdWJzdHIoMCwgcGF0aC5sZW5ndGgtMSkKKyAgICAgICAgICA6IHBh
dGggKycvJzsKKworICAgICAgcm91dGVzW3JlZGlyZWN0UGF0aF0gPSB7cmVkaXJlY3RUbzogcGF0
aH07CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2Rv
YyBtZXRob2QKKyAgICogQG5hbWUgbmcuJHJvdXRlUHJvdmlkZXIjb3RoZXJ3aXNlCisgICAqIEBt
ZXRob2RPZiBuZy4kcm91dGVQcm92aWRlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICog
U2V0cyByb3V0ZSBkZWZpbml0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHJvdXRlIGNoYW5nZSB3
aGVuIG5vIG90aGVyIHJvdXRlIGRlZmluaXRpb24KKyAgICogaXMgbWF0Y2hlZC4KKyAgICoKKyAg
ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBNYXBwaW5nIGluZm9ybWF0aW9uIHRvIGJlIGFzc2ln
bmVkIHRvIGAkcm91dGUuY3VycmVudGAuCisgICAqIEByZXR1cm5zIHtPYmplY3R9IHNlbGYKKyAg
ICovCisgIHRoaXMub3RoZXJ3aXNlID0gZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgdGhpcy53aGVu
KG51bGwsIHBhcmFtcyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH07CisKKworICB0aGlzLiRnZXQg
PSBbJyRyb290U2NvcGUnLCAnJGxvY2F0aW9uJywgJyRyb3V0ZVBhcmFtcycsICckcScsICckaW5q
ZWN0b3InLCAnJGh0dHAnLCAnJHRlbXBsYXRlQ2FjaGUnLAorICAgICAgZnVuY3Rpb24oICRyb290
U2NvcGUsICAgJGxvY2F0aW9uLCAgICRyb3V0ZVBhcmFtcywgICAkcSwgICAkaW5qZWN0b3IsICAg
JGh0dHAsICAgJHRlbXBsYXRlQ2FjaGUpIHsKKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBvYmpl
Y3QKKyAgICAgKiBAbmFtZSBuZy4kcm91dGUKKyAgICAgKiBAcmVxdWlyZXMgJGxvY2F0aW9uCisg
ICAgICogQHJlcXVpcmVzICRyb3V0ZVBhcmFtcworICAgICAqCisgICAgICogQHByb3BlcnR5IHtP
YmplY3R9IGN1cnJlbnQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJvdXRlIGRlZmluaXRpb24u
CisgICAgICogVGhlIHJvdXRlIGRlZmluaXRpb24gY29udGFpbnM6CisgICAgICoKKyAgICAgKiAg
IC0gYGNvbnRyb2xsZXJgOiBUaGUgY29udHJvbGxlciBjb25zdHJ1Y3RvciBhcyBkZWZpbmUgaW4g
cm91dGUgZGVmaW5pdGlvbi4KKyAgICAgKiAgIC0gYGxvY2Fsc2A6IEEgbWFwIG9mIGxvY2FscyB3
aGljaCBpcyB1c2VkIGJ5IHtAbGluayBuZy4kY29udHJvbGxlciAkY29udHJvbGxlcn0gc2Vydmlj
ZSBmb3IKKyAgICAgKiAgICAgY29udHJvbGxlciBpbnN0YW50aWF0aW9uLiBUaGUgYGxvY2Fsc2Ag
Y29udGFpbgorICAgICAqICAgICB0aGUgcmVzb2x2ZWQgdmFsdWVzIG9mIHRoZSBgcmVzb2x2ZWAg
bWFwLiBBZGRpdGlvbmFsbHkgdGhlIGBsb2NhbHNgIGFsc28gY29udGFpbjoKKyAgICAgKgorICAg
ICAqICAgICAtIGAkc2NvcGVgIC0gVGhlIGN1cnJlbnQgcm91dGUgc2NvcGUuCisgICAgICogICAg
IC0gYCR0ZW1wbGF0ZWAgLSBUaGUgY3VycmVudCByb3V0ZSB0ZW1wbGF0ZSBIVE1MLgorICAgICAq
CisgICAgICogQHByb3BlcnR5IHtBcnJheS48T2JqZWN0Pn0gcm91dGVzIEFycmF5IG9mIGFsbCBj
b25maWd1cmVkIHJvdXRlcy4KKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIElz
IHVzZWQgZm9yIGRlZXAtbGlua2luZyBVUkxzIHRvIGNvbnRyb2xsZXJzIGFuZCB2aWV3cyAoSFRN
TCBwYXJ0aWFscykuCisgICAgICogSXQgd2F0Y2hlcyBgJGxvY2F0aW9uLnVybCgpYCBhbmQgdHJp
ZXMgdG8gbWFwIHRoZSBwYXRoIHRvIGFuIGV4aXN0aW5nIHJvdXRlIGRlZmluaXRpb24uCisgICAg
ICoKKyAgICAgKiBZb3UgY2FuIGRlZmluZSByb3V0ZXMgdGhyb3VnaCB7QGxpbmsgbmcuJHJvdXRl
UHJvdmlkZXIgJHJvdXRlUHJvdmlkZXJ9J3MgQVBJLgorICAgICAqCisgICAgICogVGhlIGAkcm91
dGVgIHNlcnZpY2UgaXMgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB7QGxpbmsg
bmcuZGlyZWN0aXZlOm5nVmlldyBuZ1ZpZXd9CisgICAgICogZGlyZWN0aXZlIGFuZCB0aGUge0Bs
aW5rIG5nLiRyb3V0ZVBhcmFtcyAkcm91dGVQYXJhbXN9IHNlcnZpY2UuCisgICAgICoKKyAgICAg
KiBAZXhhbXBsZQorICAgICAgIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgY2hhbmdpbmcgdGhlIFVS
TCBoYXNoIGNhdXNlcyB0aGUgYCRyb3V0ZWAgdG8gbWF0Y2ggYSByb3V0ZSBhZ2FpbnN0IHRoZQor
ICAgICAgIFVSTCwgYW5kIHRoZSBgbmdWaWV3YCBwdWxscyBpbiB0aGUgcGFydGlhbC4KKworICAg
ICAgIE5vdGUgdGhhdCB0aGlzIGV4YW1wbGUgaXMgdXNpbmcge0BsaW5rIG5nLmRpcmVjdGl2ZTpz
Y3JpcHQgaW5saW5lZCB0ZW1wbGF0ZXN9CisgICAgICAgdG8gZ2V0IGl0IHdvcmtpbmcgb24ganNm
aWRkbGUgYXMgd2VsbC4KKworICAgICA8ZXhhbXBsZSBtb2R1bGU9Im5nVmlldyI+CisgICAgICAg
PGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9Ik1h
aW5DbnRsIj4KKyAgICAgICAgICAgQ2hvb3NlOgorICAgICAgICAgICA8YSBocmVmPSJCb29rL01v
YnkiPk1vYnk8L2E+IHwKKyAgICAgICAgICAgPGEgaHJlZj0iQm9vay9Nb2J5L2NoLzEiPk1vYnk6
IENoMTwvYT4gfAorICAgICAgICAgICA8YSBocmVmPSJCb29rL0dhdHNieSI+R2F0c2J5PC9hPiB8
CisgICAgICAgICAgIDxhIGhyZWY9IkJvb2svR2F0c2J5L2NoLzQ/a2V5PXZhbHVlIj5HYXRzYnk6
IENoNDwvYT4gfAorICAgICAgICAgICA8YSBocmVmPSJCb29rL1NjYXJsZXQiPlNjYXJsZXQgTGV0
dGVyPC9hPjxici8+CisKKyAgICAgICAgICAgPGRpdiBuZy12aWV3PjwvZGl2PgorICAgICAgICAg
ICA8aHIgLz4KKworICAgICAgICAgICA8cHJlPiRsb2NhdGlvbi5wYXRoKCkgPSB7eyRsb2NhdGlv
bi5wYXRoKCl9fTwvcHJlPgorICAgICAgICAgICA8cHJlPiRyb3V0ZS5jdXJyZW50LnRlbXBsYXRl
VXJsID0ge3skcm91dGUuY3VycmVudC50ZW1wbGF0ZVVybH19PC9wcmU+CisgICAgICAgICAgIDxw
cmU+JHJvdXRlLmN1cnJlbnQucGFyYW1zID0ge3skcm91dGUuY3VycmVudC5wYXJhbXN9fTwvcHJl
PgorICAgICAgICAgICA8cHJlPiRyb3V0ZS5jdXJyZW50LnNjb3BlLm5hbWUgPSB7eyRyb3V0ZS5j
dXJyZW50LnNjb3BlLm5hbWV9fTwvcHJlPgorICAgICAgICAgICA8cHJlPiRyb3V0ZVBhcmFtcyA9
IHt7JHJvdXRlUGFyYW1zfX08L3ByZT4KKyAgICAgICAgIDwvZGl2PgorICAgICAgIDwvZmlsZT4K
KworICAgICAgIDxmaWxlIG5hbWU9ImJvb2suaHRtbCI+CisgICAgICAgICBjb250cm9sbGVyOiB7
e25hbWV9fTxiciAvPgorICAgICAgICAgQm9vayBJZDoge3twYXJhbXMuYm9va0lkfX08YnIgLz4K
KyAgICAgICA8L2ZpbGU+CisKKyAgICAgICA8ZmlsZSBuYW1lPSJjaGFwdGVyLmh0bWwiPgorICAg
ICAgICAgY29udHJvbGxlcjoge3tuYW1lfX08YnIgLz4KKyAgICAgICAgIEJvb2sgSWQ6IHt7cGFy
YW1zLmJvb2tJZH19PGJyIC8+CisgICAgICAgICBDaGFwdGVyIElkOiB7e3BhcmFtcy5jaGFwdGVy
SWR9fQorICAgICAgIDwvZmlsZT4KKworICAgICAgIDxmaWxlIG5hbWU9InNjcmlwdC5qcyI+Cisg
ICAgICAgICBhbmd1bGFyLm1vZHVsZSgnbmdWaWV3JywgW10sIGZ1bmN0aW9uKCRyb3V0ZVByb3Zp
ZGVyLCAkbG9jYXRpb25Qcm92aWRlcikgeworICAgICAgICAgICAkcm91dGVQcm92aWRlci53aGVu
KCcvQm9vay86Ym9va0lkJywgeworICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiAnYm9vay5odG1s
JywKKyAgICAgICAgICAgICBjb250cm9sbGVyOiBCb29rQ250bCwKKyAgICAgICAgICAgICByZXNv
bHZlOiB7CisgICAgICAgICAgICAgICAvLyBJIHdpbGwgY2F1c2UgYSAxIHNlY29uZCBkZWxheQor
ICAgICAgICAgICAgICAgZGVsYXk6IGZ1bmN0aW9uKCRxLCAkdGltZW91dCkgeworICAgICAgICAg
ICAgICAgICB2YXIgZGVsYXkgPSAkcS5kZWZlcigpOworICAgICAgICAgICAgICAgICAkdGltZW91
dChkZWxheS5yZXNvbHZlLCAxMDAwKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGF5LnBy
b21pc2U7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgJHJvdXRlUHJvdmlkZXIud2hlbignL0Jvb2svOmJvb2tJZC9jaC86Y2hhcHRl
cklkJywgeworICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiAnY2hhcHRlci5odG1sJywKKyAgICAg
ICAgICAgICBjb250cm9sbGVyOiBDaGFwdGVyQ250bAorICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAvLyBjb25maWd1cmUgaHRtbDUgdG8gZ2V0IGxpbmtzIHdvcmtpbmcgb24ganNmaWRkbGUK
KyAgICAgICAgICAgJGxvY2F0aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRydWUpOworICAgICAgICAg
fSk7CisKKyAgICAgICAgIGZ1bmN0aW9uIE1haW5DbnRsKCRzY29wZSwgJHJvdXRlLCAkcm91dGVQ
YXJhbXMsICRsb2NhdGlvbikgeworICAgICAgICAgICAkc2NvcGUuJHJvdXRlID0gJHJvdXRlOwor
ICAgICAgICAgICAkc2NvcGUuJGxvY2F0aW9uID0gJGxvY2F0aW9uOworICAgICAgICAgICAkc2Nv
cGUuJHJvdXRlUGFyYW1zID0gJHJvdXRlUGFyYW1zOworICAgICAgICAgfQorCisgICAgICAgICBm
dW5jdGlvbiBCb29rQ250bCgkc2NvcGUsICRyb3V0ZVBhcmFtcykgeworICAgICAgICAgICAkc2Nv
cGUubmFtZSA9ICJCb29rQ250bCI7CisgICAgICAgICAgICRzY29wZS5wYXJhbXMgPSAkcm91dGVQ
YXJhbXM7CisgICAgICAgICB9CisKKyAgICAgICAgIGZ1bmN0aW9uIENoYXB0ZXJDbnRsKCRzY29w
ZSwgJHJvdXRlUGFyYW1zKSB7CisgICAgICAgICAgICRzY29wZS5uYW1lID0gIkNoYXB0ZXJDbnRs
IjsKKyAgICAgICAgICAgJHNjb3BlLnBhcmFtcyA9ICRyb3V0ZVBhcmFtczsKKyAgICAgICAgIH0K
KyAgICAgICA8L2ZpbGU+CisKKyAgICAgICA8ZmlsZSBuYW1lPSJzY2VuYXJpby5qcyI+CisgICAg
ICAgICBpdCgnc2hvdWxkIGxvYWQgYW5kIGNvbXBpbGUgY29ycmVjdCB0ZW1wbGF0ZScsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICBlbGVtZW50KCdhOmNvbnRhaW5zKCJNb2J5OiBDaDEiKScpLmNs
aWNrKCk7CisgICAgICAgICAgIHZhciBjb250ZW50ID0gZWxlbWVudCgnLmRvYy1leGFtcGxlLWxp
dmUgW25nLXZpZXddJykudGV4dCgpOworICAgICAgICAgICBleHBlY3QoY29udGVudCkudG9NYXRj
aCgvY29udHJvbGxlclw6IENoYXB0ZXJDbnRsLyk7CisgICAgICAgICAgIGV4cGVjdChjb250ZW50
KS50b01hdGNoKC9Cb29rIElkXDogTW9ieS8pOworICAgICAgICAgICBleHBlY3QoY29udGVudCku
dG9NYXRjaCgvQ2hhcHRlciBJZFw6IDEvKTsKKworICAgICAgICAgICBlbGVtZW50KCdhOmNvbnRh
aW5zKCJTY2FybGV0IiknKS5jbGljaygpOworICAgICAgICAgICBzbGVlcCgyKTsgLy8gcHJvbWlz
ZXMgYXJlIG5vdCBwYXJ0IG9mIHNjZW5hcmlvIHdhaXRpbmcKKyAgICAgICAgICAgY29udGVudCA9
IGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIFtuZy12aWV3XScpLnRleHQoKTsKKyAgICAgICAg
ICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2goL2NvbnRyb2xsZXJcOiBCb29rQ250bC8pOworICAg
ICAgICAgICBleHBlY3QoY29udGVudCkudG9NYXRjaCgvQm9vayBJZFw6IFNjYXJsZXQvKTsKKyAg
ICAgICAgIH0pOworICAgICAgIDwvZmlsZT4KKyAgICAgPC9leGFtcGxlPgorICAgICAqLworCisg
ICAgLyoqCisgICAgICogQG5nZG9jIGV2ZW50CisgICAgICogQG5hbWUgbmcuJHJvdXRlIyRyb3V0
ZUNoYW5nZVN0YXJ0CisgICAgICogQGV2ZW50T2YgbmcuJHJvdXRlCisgICAgICogQGV2ZW50VHlw
ZSBicm9hZGNhc3Qgb24gcm9vdCBzY29wZQorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIEJy
b2FkY2FzdGVkIGJlZm9yZSBhIHJvdXRlIGNoYW5nZS4gQXQgdGhpcyAgcG9pbnQgdGhlIHJvdXRl
IHNlcnZpY2VzIHN0YXJ0cworICAgICAqIHJlc29sdmluZyBhbGwgb2YgdGhlIGRlcGVuZGVuY2ll
cyBuZWVkZWQgZm9yIHRoZSByb3V0ZSBjaGFuZ2UgdG8gb2NjdXJzLgorICAgICAqIFR5cGljYWxs
eSB0aGlzIGludm9sdmVzIGZldGNoaW5nIHRoZSB2aWV3IHRlbXBsYXRlIGFzIHdlbGwgYXMgYW55
IGRlcGVuZGVuY2llcworICAgICAqIGRlZmluZWQgaW4gYHJlc29sdmVgIHJvdXRlIHByb3BlcnR5
LiBPbmNlICBhbGwgb2YgdGhlIGRlcGVuZGVuY2llcyBhcmUgcmVzb2x2ZWQKKyAgICAgKiBgJHJv
dXRlQ2hhbmdlU3VjY2Vzc2AgaXMgZmlyZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge1JvdXRl
fSBuZXh0IEZ1dHVyZSByb3V0ZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW0ge1JvdXRlfSBj
dXJyZW50IEN1cnJlbnQgcm91dGUgaW5mb3JtYXRpb24uCisgICAgICovCisKKyAgICAvKioKKyAg
ICAgKiBAbmdkb2MgZXZlbnQKKyAgICAgKiBAbmFtZSBuZy4kcm91dGUjJHJvdXRlQ2hhbmdlU3Vj
Y2VzcworICAgICAqIEBldmVudE9mIG5nLiRyb3V0ZQorICAgICAqIEBldmVudFR5cGUgYnJvYWRj
YXN0IG9uIHJvb3Qgc2NvcGUKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBCcm9hZGNhc3Rl
ZCBhZnRlciBhIHJvdXRlIGRlcGVuZGVuY2llcyBhcmUgcmVzb2x2ZWQuCisgICAgICoge0BsaW5r
IG5nLmRpcmVjdGl2ZTpuZ1ZpZXcgbmdWaWV3fSBsaXN0ZW5zIGZvciB0aGUgZGlyZWN0aXZlCisg
ICAgICogdG8gaW5zdGFudGlhdGUgdGhlIGNvbnRyb2xsZXIgYW5kIHJlbmRlciB0aGUgdmlldy4K
KyAgICAgKgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhbmd1bGFyRXZlbnQgU3ludGhldGljIGV2
ZW50IG9iamVjdC4KKyAgICAgKiBAcGFyYW0ge1JvdXRlfSBjdXJyZW50IEN1cnJlbnQgcm91dGUg
aW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIHtSb3V0ZXxVbmRlZmluZWR9IHByZXZpb3VzIFBy
ZXZpb3VzIHJvdXRlIGluZm9ybWF0aW9uLCBvciB1bmRlZmluZWQgaWYgY3VycmVudCBpcyBmaXJz
dCByb3V0ZSBlbnRlcmVkLgorICAgICAqLworCisgICAgLyoqCisgICAgICogQG5nZG9jIGV2ZW50
CisgICAgICogQG5hbWUgbmcuJHJvdXRlIyRyb3V0ZUNoYW5nZUVycm9yCisgICAgICogQGV2ZW50
T2YgbmcuJHJvdXRlCisgICAgICogQGV2ZW50VHlwZSBicm9hZGNhc3Qgb24gcm9vdCBzY29wZQor
ICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIEJyb2FkY2FzdGVkIGlmIGFueSBvZiB0aGUgcmVz
b2x2ZSBwcm9taXNlcyBhcmUgcmVqZWN0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge1JvdXRl
fSBjdXJyZW50IEN1cnJlbnQgcm91dGUgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIHtSb3V0
ZX0gcHJldmlvdXMgUHJldmlvdXMgcm91dGUgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIHtS
b3V0ZX0gcmVqZWN0aW9uIFJlamVjdGlvbiBvZiB0aGUgcHJvbWlzZS4gVXN1YWxseSB0aGUgZXJy
b3Igb2YgdGhlIGZhaWxlZCBwcm9taXNlLgorICAgICAqLworCisgICAgLyoqCisgICAgICogQG5n
ZG9jIGV2ZW50CisgICAgICogQG5hbWUgbmcuJHJvdXRlIyRyb3V0ZVVwZGF0ZQorICAgICAqIEBl
dmVudE9mIG5nLiRyb3V0ZQorICAgICAqIEBldmVudFR5cGUgYnJvYWRjYXN0IG9uIHJvb3Qgc2Nv
cGUKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKgorICAgICAqIFRoZSBgcmVsb2FkT25TZWFy
Y2hgIHByb3BlcnR5IGhhcyBiZWVuIHNldCB0byBmYWxzZSwgYW5kIHdlIGFyZSByZXVzaW5nIHRo
ZSBzYW1lCisgICAgICogaW5zdGFuY2Ugb2YgdGhlIENvbnRyb2xsZXIuCisgICAgICovCisKKyAg
ICB2YXIgZm9yY2VSZWxvYWQgPSBmYWxzZSwKKyAgICAgICAgJHJvdXRlID0geworICAgICAgICAg
IHJvdXRlczogcm91dGVzLAorCisgICAgICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgICAgICAqIEBuYW1lIG5nLiRyb3V0ZSNyZWxvYWQKKyAgICAgICAgICAgKiBA
bWV0aG9kT2YgbmcuJHJvdXRlCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiBAZGVzY3JpcHRp
b24KKyAgICAgICAgICAgKiBDYXVzZXMgYCRyb3V0ZWAgc2VydmljZSB0byByZWxvYWQgdGhlIGN1
cnJlbnQgcm91dGUgZXZlbiBpZgorICAgICAgICAgICAqIHtAbGluayBuZy4kbG9jYXRpb24gJGxv
Y2F0aW9ufSBoYXNuJ3QgY2hhbmdlZC4KKyAgICAgICAgICAgKgorICAgICAgICAgICAqIEFzIGEg
cmVzdWx0IG9mIHRoYXQsIHtAbGluayBuZy5kaXJlY3RpdmU6bmdWaWV3IG5nVmlld30KKyAgICAg
ICAgICAgKiBjcmVhdGVzIG5ldyBzY29wZSwgcmVpbnN0YW50aWF0ZXMgdGhlIGNvbnRyb2xsZXIu
CisgICAgICAgICAgICovCisgICAgICAgICAgcmVsb2FkOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGZvcmNlUmVsb2FkID0gdHJ1ZTsKKyAgICAgICAgICAgICRyb290U2NvcGUuJGV2YWxBc3lu
Yyh1cGRhdGVSb3V0ZSk7CisgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgJHJvb3RTY29w
ZS4kb24oJyRsb2NhdGlvbkNoYW5nZVN1Y2Nlc3MnLCB1cGRhdGVSb3V0ZSk7CisKKyAgICByZXR1
cm4gJHJvdXRlOworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBvbiB7c3RyaW5nfSBjdXJy
ZW50IHVybAorICAgICAqIEBwYXJhbSB3aGVuIHtzdHJpbmd9IHJvdXRlIHdoZW4gdGVtcGxhdGUg
dG8gbWF0Y2ggdGhlIHVybCBhZ2FpbnN0CisgICAgICogQHJldHVybiB7P09iamVjdH0KKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBzd2l0Y2hSb3V0ZU1hdGNoZXIob24sIHdoZW4pIHsKKyAgICAgIC8v
IFRPRE8oaSk6IHRoaXMgY29kZSBpcyBjb252b2x1dGVkIGFuZCBpbmVmZmljaWVudCwgd2Ugc2hv
dWxkIGNvbnN0cnVjdCB0aGUgcm91dGUgbWF0Y2hpbmcKKyAgICAgIC8vICAgcmVnZXggb25seSBv
bmNlIGFuZCB0aGVuIHJldXNlIGl0CisKKyAgICAgIC8vIEVzY2FwZSByZWdleHAgc3BlY2lhbCBj
aGFyYWN0ZXJzLgorICAgICAgd2hlbiA9ICdeJyArIHdoZW4ucmVwbGFjZSgvWy1cL1xcXiQqKz8u
KCl8W1xde31dL2csICJcXCQmIikgKyAnJCc7CisgICAgICB2YXIgcmVnZXggPSAnJywKKyAgICAg
ICAgICBwYXJhbXMgPSBbXSwKKyAgICAgICAgICBkc3QgPSB7fTsKKworICAgICAgdmFyIHJlID0g
LzooXHcrKS9nLAorICAgICAgICAgIHBhcmFtTWF0Y2gsCisgICAgICAgICAgbGFzdE1hdGNoZWRJ
bmRleCA9IDA7CisKKyAgICAgIHdoaWxlICgocGFyYW1NYXRjaCA9IHJlLmV4ZWMod2hlbikpICE9
PSBudWxsKSB7CisgICAgICAgIC8vIEZpbmQgZWFjaCA6cGFyYW0gaW4gYHdoZW5gIGFuZCByZXBs
YWNlIGl0IHdpdGggYSBjYXB0dXJpbmcgZ3JvdXAuCisgICAgICAgIC8vIEFwcGVuZCBhbGwgb3Ro
ZXIgc2VjdGlvbnMgb2Ygd2hlbiB1bmNoYW5nZWQuCisgICAgICAgIHJlZ2V4ICs9IHdoZW4uc2xp
Y2UobGFzdE1hdGNoZWRJbmRleCwgcGFyYW1NYXRjaC5pbmRleCk7CisgICAgICAgIHJlZ2V4ICs9
ICcoW15cXC9dKiknOworICAgICAgICBwYXJhbXMucHVzaChwYXJhbU1hdGNoWzFdKTsKKyAgICAg
ICAgbGFzdE1hdGNoZWRJbmRleCA9IHJlLmxhc3RJbmRleDsKKyAgICAgIH0KKyAgICAgIC8vIEFw
cGVuZCB0cmFpbGluZyBwYXRoIHBhcnQuCisgICAgICByZWdleCArPSB3aGVuLnN1YnN0cihsYXN0
TWF0Y2hlZEluZGV4KTsKKworICAgICAgdmFyIG1hdGNoID0gb24ubWF0Y2gobmV3IFJlZ0V4cChy
ZWdleCkpOworICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgIGZvckVhY2gocGFyYW1zLCBmdW5j
dGlvbihuYW1lLCBpbmRleCkgeworICAgICAgICAgIGRzdFtuYW1lXSA9IG1hdGNoW2luZGV4ICsg
MV07CisgICAgICAgIH0pOworICAgICAgfQorICAgICAgcmV0dXJuIG1hdGNoID8gZHN0IDogbnVs
bDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB1cGRhdGVSb3V0ZSgpIHsKKyAgICAgIHZhciBuZXh0
ID0gcGFyc2VSb3V0ZSgpLAorICAgICAgICAgIGxhc3QgPSAkcm91dGUuY3VycmVudDsKKworICAg
ICAgaWYgKG5leHQgJiYgbGFzdCAmJiBuZXh0LiQkcm91dGUgPT09IGxhc3QuJCRyb3V0ZQorICAg
ICAgICAgICYmIGVxdWFscyhuZXh0LnBhdGhQYXJhbXMsIGxhc3QucGF0aFBhcmFtcykgJiYgIW5l
eHQucmVsb2FkT25TZWFyY2ggJiYgIWZvcmNlUmVsb2FkKSB7CisgICAgICAgIGxhc3QucGFyYW1z
ID0gbmV4dC5wYXJhbXM7CisgICAgICAgIGNvcHkobGFzdC5wYXJhbXMsICRyb3V0ZVBhcmFtcyk7
CisgICAgICAgICRyb290U2NvcGUuJGJyb2FkY2FzdCgnJHJvdXRlVXBkYXRlJywgbGFzdCk7Cisg
ICAgICB9IGVsc2UgaWYgKG5leHQgfHwgbGFzdCkgeworICAgICAgICBmb3JjZVJlbG9hZCA9IGZh
bHNlOworICAgICAgICAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRyb3V0ZUNoYW5nZVN0YXJ0Jywg
bmV4dCwgbGFzdCk7CisgICAgICAgICRyb3V0ZS5jdXJyZW50ID0gbmV4dDsKKyAgICAgICAgaWYg
KG5leHQpIHsKKyAgICAgICAgICBpZiAobmV4dC5yZWRpcmVjdFRvKSB7CisgICAgICAgICAgICBp
ZiAoaXNTdHJpbmcobmV4dC5yZWRpcmVjdFRvKSkgeworICAgICAgICAgICAgICAkbG9jYXRpb24u
cGF0aChpbnRlcnBvbGF0ZShuZXh0LnJlZGlyZWN0VG8sIG5leHQucGFyYW1zKSkuc2VhcmNoKG5l
eHQucGFyYW1zKQorICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgJGxvY2F0aW9uLnVybChuZXh0LnJlZGlyZWN0VG8o
bmV4dC5wYXRoUGFyYW1zLCAkbG9jYXRpb24ucGF0aCgpLCAkbG9jYXRpb24uc2VhcmNoKCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICRxLndoZW4obmV4dCkuCisgICAgICAgICAgdGhl
bihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmIChuZXh0KSB7CisgICAgICAgICAgICAgIHZh
ciBrZXlzID0gW10sCisgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbXSwKKyAgICAgICAgICAg
ICAgICAgIHRlbXBsYXRlOworCisgICAgICAgICAgICAgIGZvckVhY2gobmV4dC5yZXNvbHZlIHx8
IHt9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CisgICAgICAgICAgICAgICAga2V5cy5wdXNoKGtl
eSk7CisgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaXNTdHJpbmcodmFsdWUpID8gJGluamVj
dG9yLmdldCh2YWx1ZSkgOiAkaW5qZWN0b3IuaW52b2tlKHZhbHVlKSk7CisgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRlbXBsYXRlID0gbmV4dC50ZW1wbGF0
ZSkpIHsKKyAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0RlZmluZWQodGVtcGxhdGUgPSBuZXh0
LnRlbXBsYXRlVXJsKSkgeworICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gJGh0dHAuZ2V0KHRl
bXBsYXRlLCB7Y2FjaGU6ICR0ZW1wbGF0ZUNhY2hlfSkuCisgICAgICAgICAgICAgICAgICAgIHRo
ZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsgcmV0dXJuIHJlc3BvbnNlLmRhdGE7IH0pOworICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGVtcGxhdGUpKSB7CisgICAg
ICAgICAgICAgICAga2V5cy5wdXNoKCckdGVtcGxhdGUnKTsKKyAgICAgICAgICAgICAgICB2YWx1
ZXMucHVzaCh0ZW1wbGF0ZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcmV0dXJu
ICRxLmFsbCh2YWx1ZXMpLnRoZW4oZnVuY3Rpb24odmFsdWVzKSB7CisgICAgICAgICAgICAgICAg
dmFyIGxvY2FscyA9IHt9OworICAgICAgICAgICAgICAgIGZvckVhY2godmFsdWVzLCBmdW5jdGlv
bih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgIGxvY2Fsc1trZXlzW2luZGV4XV0g
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9j
YWxzOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KS4KKyAg
ICAgICAgICAvLyBhZnRlciByb3V0ZSBjaGFuZ2UKKyAgICAgICAgICB0aGVuKGZ1bmN0aW9uKGxv
Y2FscykgeworICAgICAgICAgICAgaWYgKG5leHQgPT0gJHJvdXRlLmN1cnJlbnQpIHsKKyAgICAg
ICAgICAgICAgaWYgKG5leHQpIHsKKyAgICAgICAgICAgICAgICBuZXh0LmxvY2FscyA9IGxvY2Fs
czsKKyAgICAgICAgICAgICAgICBjb3B5KG5leHQucGFyYW1zLCAkcm91dGVQYXJhbXMpOworICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICRyb290U2NvcGUuJGJyb2FkY2FzdCgnJHJvdXRl
Q2hhbmdlU3VjY2VzcycsIG5leHQsIGxhc3QpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0s
IGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICBpZiAobmV4dCA9PSAkcm91dGUuY3VycmVu
dCkgeworICAgICAgICAgICAgICAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRyb3V0ZUNoYW5nZUVy
cm9yJywgbmV4dCwgbGFzdCwgZXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOwor
ICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQg
YWN0aXZlIHJvdXRlLCBieSBtYXRjaGluZyBpdCBhZ2FpbnN0IHRoZSBVUkwKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBwYXJzZVJvdXRlKCkgeworICAgICAgLy8gTWF0Y2ggYSByb3V0ZQorICAgICAg
dmFyIHBhcmFtcywgbWF0Y2g7CisgICAgICBmb3JFYWNoKHJvdXRlcywgZnVuY3Rpb24ocm91dGUs
IHBhdGgpIHsKKyAgICAgICAgaWYgKCFtYXRjaCAmJiAocGFyYW1zID0gc3dpdGNoUm91dGVNYXRj
aGVyKCRsb2NhdGlvbi5wYXRoKCksIHBhdGgpKSkgeworICAgICAgICAgIG1hdGNoID0gaW5oZXJp
dChyb3V0ZSwgeworICAgICAgICAgICAgcGFyYW1zOiBleHRlbmQoe30sICRsb2NhdGlvbi5zZWFy
Y2goKSwgcGFyYW1zKSwKKyAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhcmFtc30pOworICAgICAg
ICAgIG1hdGNoLiQkcm91dGUgPSByb3V0ZTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICAv
LyBObyByb3V0ZSBtYXRjaGVkOyBmYWxsYmFjayB0byAib3RoZXJ3aXNlIiByb3V0ZQorICAgICAg
cmV0dXJuIG1hdGNoIHx8IHJvdXRlc1tudWxsXSAmJiBpbmhlcml0KHJvdXRlc1tudWxsXSwge3Bh
cmFtczoge30sIHBhdGhQYXJhbXM6e319KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0
dXJucyBpbnRlcnBvbGF0aW9uIG9mIHRoZSByZWRpcmVjdCBwYXRoIHdpdGggdGhlIHBhcmFtZXRy
cworICAgICAqLworICAgIGZ1bmN0aW9uIGludGVycG9sYXRlKHN0cmluZywgcGFyYW1zKSB7Cisg
ICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICBmb3JFYWNoKChzdHJpbmd8fCcnKS5zcGxpdCgn
OicpLCBmdW5jdGlvbihzZWdtZW50LCBpKSB7CisgICAgICAgIGlmIChpID09IDApIHsKKyAgICAg
ICAgICByZXN1bHQucHVzaChzZWdtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB2
YXIgc2VnbWVudE1hdGNoID0gc2VnbWVudC5tYXRjaCgvKFx3KykoLiopLyk7CisgICAgICAgICAg
dmFyIGtleSA9IHNlZ21lbnRNYXRjaFsxXTsKKyAgICAgICAgICByZXN1bHQucHVzaChwYXJhbXNb
a2V5XSk7CisgICAgICAgICAgcmVzdWx0LnB1c2goc2VnbWVudE1hdGNoWzJdIHx8ICcnKTsKKyAg
ICAgICAgICBkZWxldGUgcGFyYW1zW2tleV07CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAg
cmV0dXJuIHJlc3VsdC5qb2luKCcnKTsKKyAgICB9CisgIH1dOworfQorCisvKioKKyAqIEBuZ2Rv
YyBvYmplY3QKKyAqIEBuYW1lIG5nLiRyb3V0ZVBhcmFtcworICogQHJlcXVpcmVzICRyb3V0ZQor
ICoKKyAqIEBkZXNjcmlwdGlvbgorICogQ3VycmVudCBzZXQgb2Ygcm91dGUgcGFyYW1ldGVycy4g
VGhlIHJvdXRlIHBhcmFtZXRlcnMgYXJlIGEgY29tYmluYXRpb24gb2YgdGhlCisgKiB7QGxpbmsg
bmcuJGxvY2F0aW9uICRsb2NhdGlvbn0gYHNlYXJjaCgpYCwgYW5kIGBwYXRoKClgLiBUaGUgYHBh
dGhgIHBhcmFtZXRlcnMKKyAqIGFyZSBleHRyYWN0ZWQgd2hlbiB0aGUge0BsaW5rIG5nLiRyb3V0
ZSAkcm91dGV9IHBhdGggaXMgbWF0Y2hlZC4KKyAqCisgKiBJbiBjYXNlIG9mIHBhcmFtZXRlciBu
YW1lIGNvbGxpc2lvbiwgYHBhdGhgIHBhcmFtcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBgc2VhcmNo
YCBwYXJhbXMuCisgKgorICogVGhlIHNlcnZpY2UgZ3VhcmFudGVlcyB0aGF0IHRoZSBpZGVudGl0
eSBvZiB0aGUgYCRyb3V0ZVBhcmFtc2Agb2JqZWN0IHdpbGwgcmVtYWluIHVuY2hhbmdlZAorICog
KGJ1dCBpdHMgcHJvcGVydGllcyB3aWxsIGxpa2VseSBjaGFuZ2UpIGV2ZW4gd2hlbiBhIHJvdXRl
IGNoYW5nZSBvY2N1cnMuCisgKgorICogQGV4YW1wbGUKKyAqIDxwcmU+CisgKiAgLy8gR2l2ZW46
CisgKiAgLy8gVVJMOiBodHRwOi8vc2VydmVyLmNvbS9pbmRleC5odG1sIy9DaGFwdGVyLzEvU2Vj
dGlvbi8yP3NlYXJjaD1tb2J5CisgKiAgLy8gUm91dGU6IC9DaGFwdGVyLzpjaGFwdGVySWQvU2Vj
dGlvbi86c2VjdGlvbklkCisgKiAgLy8KKyAqICAvLyBUaGVuCisgKiAgJHJvdXRlUGFyYW1zID09
PiB7Y2hhcHRlcklkOjEsIHNlY3Rpb25JZDoyLCBzZWFyY2g6J21vYnknfQorICogPC9wcmU+Cisg
Ki8KK2Z1bmN0aW9uICRSb3V0ZVBhcmFtc1Byb3ZpZGVyKCkgeworICB0aGlzLiRnZXQgPSB2YWx1
ZUZuKHt9KTsKK30KKworLyoqCisgKiBERVNJR04gTk9URVMKKyAqCisgKiBUaGUgZGVzaWduIGRl
Y2lzaW9ucyBiZWhpbmQgdGhlIHNjb3BlIGFyZSBoZWF2aWx5IGZhdm9yZWQgZm9yIHNwZWVkIGFu
ZCBtZW1vcnkgY29uc3VtcHRpb24uCisgKgorICogVGhlIHR5cGljYWwgdXNlIG9mIHNjb3BlIGlz
IHRvIHdhdGNoIHRoZSBleHByZXNzaW9ucywgd2hpY2ggbW9zdCBvZiB0aGUgdGltZSByZXR1cm4g
dGhlIHNhbWUKKyAqIHZhbHVlIGFzIGxhc3QgdGltZSBzbyB3ZSBvcHRpbWl6ZSB0aGUgb3BlcmF0
aW9uLgorICoKKyAqIENsb3N1cmVzIGNvbnN0cnVjdGlvbiBpcyBleHBlbnNpdmUgaW4gdGVybXMg
b2Ygc3BlZWQgYXMgd2VsbCBhcyBtZW1vcnk6CisgKiAgIC0gTm8gY2xvc3VyZXMsIGluc3RlYWQg
dXNlIHByb3RvdHlwaWNhbCBpbmhlcml0YW5jZSBmb3IgQVBJCisgKiAgIC0gSW50ZXJuYWwgc3Rh
dGUgbmVlZHMgdG8gYmUgc3RvcmVkIG9uIHNjb3BlIGRpcmVjdGx5LCB3aGljaCBtZWFucyB0aGF0
IHByaXZhdGUgc3RhdGUgaXMKKyAqICAgICBleHBvc2VkIGFzICQkX19fXyBwcm9wZXJ0aWVzCisg
KgorICogTG9vcCBvcGVyYXRpb25zIGFyZSBvcHRpbWl6ZWQgYnkgdXNpbmcgd2hpbGUoY291bnQt
LSkgeyAuLi4gfQorICogICAtIHRoaXMgbWVhbnMgdGhhdCBpbiBvcmRlciB0byBrZWVwIHRoZSBz
YW1lIG9yZGVyIG9mIGV4ZWN1dGlvbiBhcyBhZGRpdGlvbiB3ZSBoYXZlIHRvIGFkZAorICogICAg
IGl0ZW1zIHRvIHRoZSBhcnJheSBhdCB0aGUgYmVnaW5uaW5nIChzaGlmdCkgaW5zdGVhZCBvZiBh
dCB0aGUgZW5kIChwdXNoKQorICoKKyAqIENoaWxkIHNjb3BlcyBhcmUgY3JlYXRlZCBhbmQgcmVt
b3ZlZCBvZnRlbgorICogICAtIFVzaW5nIGFuIGFycmF5IHdvdWxkIGJlIHNsb3cgc2luY2UgaW5z
ZXJ0cyBpbiBtaWRkbGUgYXJlIGV4cGVuc2l2ZSBzbyB3ZSB1c2UgbGlua2VkIGxpc3QKKyAqCisg
KiBUaGVyZSBhcmUgZmV3IHdhdGNoZXMgdGhlbiBhIGxvdCBvZiBvYnNlcnZlcnMuIFRoaXMgaXMg
d2h5IHlvdSBkb24ndCB3YW50IHRoZSBvYnNlcnZlciB0byBiZQorICogaW1wbGVtZW50ZWQgaW4g
dGhlIHNhbWUgd2F5IGFzIHdhdGNoLiBXYXRjaCByZXF1aXJlcyByZXR1cm4gb2YgaW5pdGlhbGl6
YXRpb24gZnVuY3Rpb24gd2hpY2gKKyAqIGFyZSBleHBlbnNpdmUgdG8gY29uc3RydWN0LgorICov
CisKKworLyoqCisgKiBAbmdkb2Mgb2JqZWN0CisgKiBAbmFtZSBuZy4kcm9vdFNjb3BlUHJvdmlk
ZXIKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIFByb3ZpZGVyIGZvciB0aGUgJHJvb3RTY29wZSBz
ZXJ2aWNlLgorICovCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBuZy4kcm9v
dFNjb3BlUHJvdmlkZXIjZGlnZXN0VHRsCisgKiBAbWV0aG9kT2YgbmcuJHJvb3RTY29wZVByb3Zp
ZGVyCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBTZXRzIHRoZSBudW1iZXIgb2YgZGlnZXN0IGl0
ZXJhdGlvbnMgdGhlIHNjb3BlIHNob3VsZCBhdHRlbXB0IHRvIGV4ZWN1dGUgYmVmb3JlIGdpdmlu
ZyB1cCBhbmQKKyAqIGFzc3VtaW5nIHRoYXQgdGhlIG1vZGVsIGlzIHVuc3RhYmxlLgorICoKKyAq
IFRoZSBjdXJyZW50IGRlZmF1bHQgaXMgMTAgaXRlcmF0aW9ucy4KKyAqCisgKiBAcGFyYW0ge251
bWJlcn0gbGltaXQgVGhlIG51bWJlciBvZiBkaWdlc3QgaXRlcmF0aW9ucy4KKyAqLworCisKKy8q
KgorICogQG5nZG9jIG9iamVjdAorICogQG5hbWUgbmcuJHJvb3RTY29wZQorICogQGRlc2NyaXB0
aW9uCisgKgorICogRXZlcnkgYXBwbGljYXRpb24gaGFzIGEgc2luZ2xlIHJvb3Qge0BsaW5rIG5n
LiRyb290U2NvcGUuU2NvcGUgc2NvcGV9LgorICogQWxsIG90aGVyIHNjb3BlcyBhcmUgY2hpbGQg
c2NvcGVzIG9mIHRoZSByb290IHNjb3BlLiBTY29wZXMgcHJvdmlkZSBtZWNoYW5pc20gZm9yIHdh
dGNoaW5nIHRoZSBtb2RlbCBhbmQgcHJvdmlkZQorICogZXZlbnQgcHJvY2Vzc2luZyBsaWZlLWN5
Y2xlLiBTZWUge0BsaW5rIGd1aWRlL3Njb3BlIGRldmVsb3BlciBndWlkZSBvbiBzY29wZXN9Lgor
ICovCitmdW5jdGlvbiAkUm9vdFNjb3BlUHJvdmlkZXIoKXsKKyAgdmFyIFRUTCA9IDEwOworCisg
IHRoaXMuZGlnZXN0VHRsID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxl
bmd0aCkgeworICAgICAgVFRMID0gdmFsdWU7CisgICAgfQorICAgIHJldHVybiBUVEw7CisgIH07
CisKKyAgdGhpcy4kZ2V0ID0gWyckaW5qZWN0b3InLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCAnJHBh
cnNlJywKKyAgICAgIGZ1bmN0aW9uKCAkaW5qZWN0b3IsICAgJGV4Y2VwdGlvbkhhbmRsZXIsICAg
JHBhcnNlKSB7CisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgZnVuY3Rpb24KKyAgICAgKiBAbmFt
ZSBuZy4kcm9vdFNjb3BlLlNjb3BlCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAg
KiBBIHJvb3Qgc2NvcGUgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUge0BsaW5rIG5nLiRyb290
U2NvcGUgJHJvb3RTY29wZX0ga2V5IGZyb20gdGhlCisgICAgICoge0BsaW5rIEFVVE8uJGluamVj
dG9yICRpbmplY3Rvcn0uIENoaWxkIHNjb3BlcyBhcmUgY3JlYXRlZCB1c2luZyB0aGUKKyAgICAg
KiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkbmV3ICRuZXcoKX0gbWV0aG9kLiAoTW9zdCBz
Y29wZXMgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuCisgICAgICogY29tcGlsZWQgSFRN
TCB0ZW1wbGF0ZSBpcyBleGVjdXRlZC4pCisgICAgICoKKyAgICAgKiBIZXJlIGlzIGEgc2ltcGxl
IHNjb3BlIHNuaXBwZXQgdG8gc2hvdyBob3cgeW91IGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBzY29w
ZS4KKyAgICAgKiA8cHJlPgorICAgICAgICBhbmd1bGFyLmluamVjdG9yKFsnbmcnXSkuaW52b2tl
KGZ1bmN0aW9uKCRyb290U2NvcGUpIHsKKyAgICAgICAgICAgdmFyIHNjb3BlID0gJHJvb3RTY29w
ZS4kbmV3KCk7CisgICAgICAgICAgIHNjb3BlLnNhbHV0YXRpb24gPSAnSGVsbG8nOworICAgICAg
ICAgICBzY29wZS5uYW1lID0gJ1dvcmxkJzsKKworICAgICAgICAgICBleHBlY3Qoc2NvcGUuZ3Jl
ZXRpbmcpLnRvRXF1YWwodW5kZWZpbmVkKTsKKworICAgICAgICAgICBzY29wZS4kd2F0Y2goJ25h
bWUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICBzY29wZS5ncmVldGluZyA9IHNjb3BlLnNh
bHV0YXRpb24gKyAnICcgKyBzY29wZS5uYW1lICsgJyEnOworICAgICAgICAgICB9KTsgLy8gaW5p
dGlhbGl6ZSB0aGUgd2F0Y2gKKworICAgICAgICAgICBleHBlY3Qoc2NvcGUuZ3JlZXRpbmcpLnRv
RXF1YWwodW5kZWZpbmVkKTsKKyAgICAgICAgICAgc2NvcGUubmFtZSA9ICdNaXNrbyc7CisgICAg
ICAgICAgIC8vIHN0aWxsIG9sZCB2YWx1ZSwgc2luY2Ugd2F0Y2hlcyBoYXZlIG5vdCBiZWVuIGNh
bGxlZCB5ZXQKKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLmdyZWV0aW5nKS50b0VxdWFsKHVuZGVm
aW5lZCk7CisKKyAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpOyAvLyBmaXJlIGFsbCAgdGhlIHdh
dGNoZXMKKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLmdyZWV0aW5nKS50b0VxdWFsKCdIZWxsbyBN
aXNrbyEnKTsKKyAgICAgICAgfSk7CisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiAjIElu
aGVyaXRhbmNlCisgICAgICogQSBzY29wZSBjYW4gaW5oZXJpdCBmcm9tIGEgcGFyZW50IHNjb3Bl
LCBhcyBpbiB0aGlzIGV4YW1wbGU6CisgICAgICogPHByZT4KKyAgICAgICAgIHZhciBwYXJlbnQg
PSAkcm9vdFNjb3BlOworICAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50LiRuZXcoKTsKKworICAg
ICAgICAgcGFyZW50LnNhbHV0YXRpb24gPSAiSGVsbG8iOworICAgICAgICAgY2hpbGQubmFtZSA9
ICJXb3JsZCI7CisgICAgICAgICBleHBlY3QoY2hpbGQuc2FsdXRhdGlvbikudG9FcXVhbCgnSGVs
bG8nKTsKKworICAgICAgICAgY2hpbGQuc2FsdXRhdGlvbiA9ICJXZWxjb21lIjsKKyAgICAgICAg
IGV4cGVjdChjaGlsZC5zYWx1dGF0aW9uKS50b0VxdWFsKCdXZWxjb21lJyk7CisgICAgICAgICBl
eHBlY3QocGFyZW50LnNhbHV0YXRpb24pLnRvRXF1YWwoJ0hlbGxvJyk7CisgICAgICogPC9wcmU+
CisgICAgICoKKyAgICAgKgorICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9u
KCk+PX0gcHJvdmlkZXJzIE1hcCBvZiBzZXJ2aWNlIGZhY3Rvcnkgd2hpY2ggbmVlZCB0byBiZSBw
cm92aWRlZAorICAgICAqICAgICBmb3IgdGhlIGN1cnJlbnQgc2NvcGUuIERlZmF1bHRzIHRvIHtA
bGluayBuZ30uCisgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgKj49fSBpbnN0YW5jZUNh
Y2hlIFByb3ZpZGVzIHByZS1pbnN0YW50aWF0ZWQgc2VydmljZXMgd2hpY2ggc2hvdWxkCisgICAg
ICogICAgIGFwcGVuZC9vdmVycmlkZSBzZXJ2aWNlcyBwcm92aWRlZCBieSBgcHJvdmlkZXJzYC4g
VGhpcyBpcyBoYW5keSB3aGVuIHVuaXQtdGVzdGluZyBhbmQgaGF2aW5nCisgICAgICogICAgIHRo
ZSBuZWVkIHRvIG92ZXJyaWRlIGEgZGVmYXVsdCBzZXJ2aWNlLgorICAgICAqIEByZXR1cm5zIHtP
YmplY3R9IE5ld2x5IGNyZWF0ZWQgc2NvcGUuCisgICAgICoKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBTY29wZSgpIHsKKyAgICAgIHRoaXMuJGlkID0gbmV4dFVpZCgpOworICAgICAgdGhpcy4kJHBo
YXNlID0gdGhpcy4kcGFyZW50ID0gdGhpcy4kJHdhdGNoZXJzID0KKyAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuJCRuZXh0U2libGluZyA9IHRoaXMuJCRwcmV2U2libGluZyA9CisgICAgICAgICAg
ICAgICAgICAgICB0aGlzLiQkY2hpbGRIZWFkID0gdGhpcy4kJGNoaWxkVGFpbCA9IG51bGw7Cisg
ICAgICB0aGlzWyd0aGlzJ10gPSB0aGlzLiRyb290ID0gIHRoaXM7CisgICAgICB0aGlzLiQkZGVz
dHJveWVkID0gZmFsc2U7CisgICAgICB0aGlzLiQkYXN5bmNRdWV1ZSA9IFtdOworICAgICAgdGhp
cy4kJGxpc3RlbmVycyA9IHt9OworICAgICAgdGhpcy4kJGlzb2xhdGVCaW5kaW5ncyA9IHt9Owor
ICAgIH0KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBwcm9wZXJ0eQorICAgICAqIEBuYW1lIG5n
LiRyb290U2NvcGUuU2NvcGUjJGlkCisgICAgICogQHByb3BlcnR5T2YgbmcuJHJvb3RTY29wZS5T
Y29wZQorICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFVuaXF1ZSBzY29wZSBJRCAobW9ub3Rvbmlj
YWxseSBpbmNyZWFzaW5nIGFscGhhbnVtZXJpYyBzZXF1ZW5jZSkgdXNlZnVsIGZvcgorICAgICAq
ICAgZGVidWdnaW5nLgorICAgICAqLworCisKKyAgICBTY29wZS5wcm90b3R5cGUgPSB7CisgICAg
ICAvKioKKyAgICAgICAqIEBuZ2RvYyBmdW5jdGlvbgorICAgICAgICogQG5hbWUgbmcuJHJvb3RT
Y29wZS5TY29wZSMkbmV3CisgICAgICAgKiBAbWV0aG9kT2YgbmcuJHJvb3RTY29wZS5TY29wZQor
ICAgICAgICogQGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAg
ICAgKiBDcmVhdGVzIGEgbmV3IGNoaWxkIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIHNjb3Bl
fS4KKyAgICAgICAqCisgICAgICAgKiBUaGUgcGFyZW50IHNjb3BlIHdpbGwgcHJvcGFnYXRlIHRo
ZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QoKX0gYW5kCisgICAg
ICAgKiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QoKX0gZXZlbnRz
LiBUaGUgc2NvcGUgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2NvcGUKKyAgICAgICAqIGhpZXJh
cmNoeSB1c2luZyB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGVzdHJveSAkZGVzdHJveSgp
fS4KKyAgICAgICAqCisgICAgICAgKiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGVzdHJv
eSAkZGVzdHJveSgpfSBtdXN0IGJlIGNhbGxlZCBvbiBhIHNjb3BlIHdoZW4gaXQgaXMgZGVzaXJl
ZCBmb3IKKyAgICAgICAqIHRoZSBzY29wZSBhbmQgaXRzIGNoaWxkIHNjb3BlcyB0byBiZSBwZXJt
YW5lbnRseSBkZXRhY2hlZCBmcm9tIHRoZSBwYXJlbnQgYW5kIHRodXMgc3RvcAorICAgICAgICog
cGFydGljaXBhdGluZyBpbiBtb2RlbCBjaGFuZ2UgZGV0ZWN0aW9uIGFuZCBsaXN0ZW5lciBub3Rp
ZmljYXRpb24gYnkgaW52b2tpbmcuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtib29sZWFu
fSBpc29sYXRlIGlmIHRydWUgdGhlbiB0aGUgc2NvcGUgZG9lcyBub3QgcHJvdG90eXBpY2FsbHkg
aW5oZXJpdCBmcm9tIHRoZQorICAgICAgICogICAgICAgICBwYXJlbnQgc2NvcGUuIFRoZSBzY29w
ZSBpcyBpc29sYXRlZCwgYXMgaXQgY2FuIG5vdCBzZWUgcGFyZW50IHNjb3BlIHByb3BlcnRpZXMu
CisgICAgICAgKiAgICAgICAgIFdoZW4gY3JlYXRpbmcgd2lkZ2V0cyBpdCBpcyB1c2VmdWwgZm9y
IHRoZSB3aWRnZXQgdG8gbm90IGFjY2lkZW50YWxseSByZWFkIHBhcmVudAorICAgICAgICogICAg
ICAgICBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgbmV3
bHkgY3JlYXRlZCBjaGlsZCBzY29wZS4KKyAgICAgICAqCisgICAgICAgKi8KKyAgICAgICRuZXc6
IGZ1bmN0aW9uKGlzb2xhdGUpIHsKKyAgICAgICAgdmFyIENoaWxkLAorICAgICAgICAgICAgY2hp
bGQ7CisKKyAgICAgICAgaWYgKGlzRnVuY3Rpb24oaXNvbGF0ZSkpIHsKKyAgICAgICAgICAvLyBU
T0RPOiByZW1vdmUgYXQgc29tZSBwb2ludAorICAgICAgICAgIHRocm93IEVycm9yKCdBUEktQ0hB
TkdFOiBVc2UgJGNvbnRyb2xsZXIgdG8gaW5zdGFudGlhdGUgY29udHJvbGxlcnMuJyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGlzb2xhdGUpIHsKKyAgICAgICAgICBjaGlsZCA9IG5ldyBTY29w
ZSgpOworICAgICAgICAgIGNoaWxkLiRyb290ID0gdGhpcy4kcm9vdDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICBDaGlsZCA9IGZ1bmN0aW9uKCkge307IC8vIHNob3VsZCBiZSBhbm9ueW1v
dXM7IFRoaXMgaXMgc28gdGhhdCB3aGVuIHRoZSBtaW5pZmllciBtdW5nZXMKKyAgICAgICAgICAg
IC8vIHRoZSBuYW1lIGl0IGRvZXMgbm90IGJlY29tZSByYW5kb20gc2V0IG9mIGNoYXJzLiBUaGVz
ZSB3aWxsIHRoZW4gc2hvdyB1cCBhcyBjbGFzcworICAgICAgICAgICAgLy8gbmFtZSBpbiB0aGUg
ZGVidWdnZXIuCisgICAgICAgICAgQ2hpbGQucHJvdG90eXBlID0gdGhpczsKKyAgICAgICAgICBj
aGlsZCA9IG5ldyBDaGlsZCgpOworICAgICAgICAgIGNoaWxkLiRpZCA9IG5leHRVaWQoKTsKKyAg
ICAgICAgfQorICAgICAgICBjaGlsZFsndGhpcyddID0gY2hpbGQ7CisgICAgICAgIGNoaWxkLiQk
bGlzdGVuZXJzID0ge307CisgICAgICAgIGNoaWxkLiRwYXJlbnQgPSB0aGlzOworICAgICAgICBj
aGlsZC4kJGFzeW5jUXVldWUgPSBbXTsKKyAgICAgICAgY2hpbGQuJCR3YXRjaGVycyA9IGNoaWxk
LiQkbmV4dFNpYmxpbmcgPSBjaGlsZC4kJGNoaWxkSGVhZCA9IGNoaWxkLiQkY2hpbGRUYWlsID0g
bnVsbDsKKyAgICAgICAgY2hpbGQuJCRwcmV2U2libGluZyA9IHRoaXMuJCRjaGlsZFRhaWw7Cisg
ICAgICAgIGlmICh0aGlzLiQkY2hpbGRIZWFkKSB7CisgICAgICAgICAgdGhpcy4kJGNoaWxkVGFp
bC4kJG5leHRTaWJsaW5nID0gY2hpbGQ7CisgICAgICAgICAgdGhpcy4kJGNoaWxkVGFpbCA9IGNo
aWxkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuJCRjaGlsZEhlYWQgPSB0aGlz
LiQkY2hpbGRUYWlsID0gY2hpbGQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoaWxkOwor
ICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgZnVuY3Rpb24KKyAgICAgICAq
IEBuYW1lIG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNoCisgICAgICAgKiBAbWV0aG9kT2Ygbmcu
JHJvb3RTY29wZS5TY29wZQorICAgICAgICogQGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICog
QGRlc2NyaXB0aW9uCisgICAgICAgKiBSZWdpc3RlcnMgYSBgbGlzdGVuZXJgIGNhbGxiYWNrIHRv
IGJlIGV4ZWN1dGVkIHdoZW5ldmVyIHRoZSBgd2F0Y2hFeHByZXNzaW9uYCBjaGFuZ2VzLgorICAg
ICAgICoKKyAgICAgICAqIC0gVGhlIGB3YXRjaEV4cHJlc3Npb25gIGlzIGNhbGxlZCBvbiBldmVy
eSBjYWxsIHRvIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCgpfSBh
bmQKKyAgICAgICAqICAgc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgd2hpY2ggd2lsbCBiZSB3YXRj
aGVkLiAoU2luY2Uge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9
CisgICAgICAgKiAgIHJlcnVucyB3aGVuIGl0IGRldGVjdHMgY2hhbmdlcyB0aGUgYHdhdGNoRXhw
cmVzc2lvbmAgY2FuIGV4ZWN1dGUgbXVsdGlwbGUgdGltZXMgcGVyCisgICAgICAgKiAgIHtAbGlu
ayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCgpfSBhbmQgc2hvdWxkIGJlIGlk
ZW1wb3RlbnQuKQorICAgICAgICogLSBUaGUgYGxpc3RlbmVyYCBpcyBjYWxsZWQgb25seSB3aGVu
IHRoZSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGB3YXRjaEV4cHJlc3Npb25gIGFuZCB0aGUKKyAg
ICAgICAqICAgcHJldmlvdXMgY2FsbCB0byBgd2F0Y2hFeHByZXNzaW9uYCBhcmUgbm90IGVxdWFs
ICh3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGluaXRpYWwgcnVuLAorICAgICAgICogICBzZWUg
YmVsb3cpLiBUaGUgaW5lcXVhbGl0eSBpcyBkZXRlcm1pbmVkIGFjY29yZGluZyB0bworICAgICAg
ICogICB7QGxpbmsgYW5ndWxhci5lcXVhbHN9IGZ1bmN0aW9uLiBUbyBzYXZlIHRoZSB2YWx1ZSBv
ZiB0aGUgb2JqZWN0IGZvciBsYXRlciBjb21wYXJpc29uLCB0aGUKKyAgICAgICAqICAge0BsaW5r
IGFuZ3VsYXIuY29weX0gZnVuY3Rpb24gaXMgdXNlZC4gSXQgYWxzbyBtZWFucyB0aGF0IHdhdGNo
aW5nIGNvbXBsZXggb3B0aW9ucyB3aWxsCisgICAgICAgKiAgIGhhdmUgYWR2ZXJzZSBtZW1vcnkg
YW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KKyAgICAgICAqIC0gVGhlIHdhdGNoIGBsaXN0
ZW5lcmAgbWF5IGNoYW5nZSB0aGUgbW9kZWwsIHdoaWNoIG1heSB0cmlnZ2VyIG90aGVyIGBsaXN0
ZW5lcmBzIHRvIGZpcmUuIFRoaXMKKyAgICAgICAqICAgaXMgYWNoaWV2ZWQgYnkgcmVydW5uaW5n
IHRoZSB3YXRjaGVycyB1bnRpbCBubyBjaGFuZ2VzIGFyZSBkZXRlY3RlZC4gVGhlIHJlcnVuIGl0
ZXJhdGlvbgorICAgICAgICogICBsaW1pdCBpcyAxMCB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxv
b3AgZGVhZGxvY2suCisgICAgICAgKgorICAgICAgICoKKyAgICAgICAqIElmIHlvdSB3YW50IHRv
IGJlIG5vdGlmaWVkIHdoZW5ldmVyIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3Qg
JGRpZ2VzdH0gaXMgY2FsbGVkLAorICAgICAgICogeW91IGNhbiByZWdpc3RlciBhIGB3YXRjaEV4
cHJlc3Npb25gIGZ1bmN0aW9uIHdpdGggbm8gYGxpc3RlbmVyYC4gKFNpbmNlIGB3YXRjaEV4cHJl
c3Npb25gCisgICAgICAgKiBjYW4gZXhlY3V0ZSBtdWx0aXBsZSB0aW1lcyBwZXIge0BsaW5rIG5n
LiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0fSBjeWNsZSB3aGVuIGEgY2hhbmdlIGlz
CisgICAgICAgKiBkZXRlY3RlZCwgYmUgcHJlcGFyZWQgZm9yIG11bHRpcGxlIGNhbGxzIHRvIHlv
dXIgbGlzdGVuZXIuKQorICAgICAgICoKKyAgICAgICAqIEFmdGVyIGEgd2F0Y2hlciBpcyByZWdp
c3RlcmVkIHdpdGggdGhlIHNjb3BlLCB0aGUgYGxpc3RlbmVyYCBmbiBpcyBjYWxsZWQgYXN5bmNo
cm9ub3VzbHkKKyAgICAgICAqICh2aWEge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGV2YWxB
c3luYyAkZXZhbEFzeW5jfSkgdG8gaW5pdGlhbGl6ZSB0aGUKKyAgICAgICAqIHdhdGNoZXIuIElu
IHJhcmUgY2FzZXMsIHRoaXMgaXMgdW5kZXNpcmFibGUgYmVjYXVzZSB0aGUgbGlzdGVuZXIgaXMg
Y2FsbGVkIHdoZW4gdGhlIHJlc3VsdAorICAgICAgICogb2YgYHdhdGNoRXhwcmVzc2lvbmAgZGlk
bid0IGNoYW5nZS4gVG8gZGV0ZWN0IHRoaXMgc2NlbmFyaW8gd2l0aGluIHRoZSBgbGlzdGVuZXJg
IGZuLCB5b3UKKyAgICAgICAqIGNhbiBjb21wYXJlIHRoZSBgbmV3VmFsYCBhbmQgYG9sZFZhbGAu
IElmIHRoZXNlIHR3byB2YWx1ZXMgYXJlIGlkZW50aWNhbCAoYD09PWApIHRoZW4gdGhlCisgICAg
ICAgKiBsaXN0ZW5lciB3YXMgY2FsbGVkIGR1ZSB0byBpbml0aWFsaXphdGlvbi4KKyAgICAgICAq
CisgICAgICAgKgorICAgICAgICogIyBFeGFtcGxlCisgICAgICAgKiA8cHJlPgorICAgICAgICAg
ICAvLyBsZXQncyBhc3N1bWUgdGhhdCBzY29wZSB3YXMgZGVwZW5kZW5jeSBpbmplY3RlZCBhcyB0
aGUgJHJvb3RTY29wZQorICAgICAgICAgICB2YXIgc2NvcGUgPSAkcm9vdFNjb3BlOworICAgICAg
ICAgICBzY29wZS5uYW1lID0gJ21pc2tvJzsKKyAgICAgICAgICAgc2NvcGUuY291bnRlciA9IDA7
CisKKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMCk7CisgICAgICAg
ICAgIHNjb3BlLiR3YXRjaCgnbmFtZScsIGZ1bmN0aW9uKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgeyBz
Y29wZS5jb3VudGVyID0gc2NvcGUuY291bnRlciArIDE7IH0pOworICAgICAgICAgICBleHBlY3Qo
c2NvcGUuY291bnRlcikudG9FcXVhbCgwKTsKKworICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7
CisgICAgICAgICAgIC8vIG5vIHZhcmlhYmxlIGNoYW5nZQorICAgICAgICAgICBleHBlY3Qoc2Nv
cGUuY291bnRlcikudG9FcXVhbCgwKTsKKworICAgICAgICAgICBzY29wZS5uYW1lID0gJ2FkYW0n
OworICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7CisgICAgICAgICAgIGV4cGVjdChzY29wZS5j
b3VudGVyKS50b0VxdWFsKDEpOworICAgICAgICogPC9wcmU+CisgICAgICAgKgorICAgICAgICoK
KyAgICAgICAqCisgICAgICAgKiBAcGFyYW0geyhmdW5jdGlvbigpfHN0cmluZyl9IHdhdGNoRXhw
cmVzc2lvbiBFeHByZXNzaW9uIHRoYXQgaXMgZXZhbHVhdGVkIG9uIGVhY2gKKyAgICAgICAqICAg
IHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdH0gY3ljbGUuIEEgY2hh
bmdlIGluIHRoZSByZXR1cm4gdmFsdWUgdHJpZ2dlcnMgYQorICAgICAgICogICAgY2FsbCB0byB0
aGUgYGxpc3RlbmVyYC4KKyAgICAgICAqCisgICAgICAgKiAgICAtIGBzdHJpbmdgOiBFdmFsdWF0
ZWQgYXMge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0KKyAgICAgICAqICAgIC0g
YGZ1bmN0aW9uKHNjb3BlKWA6IGNhbGxlZCB3aXRoIGN1cnJlbnQgYHNjb3BlYCBhcyBhIHBhcmFt
ZXRlci4KKyAgICAgICAqIEBwYXJhbSB7KGZ1bmN0aW9uKCl8c3RyaW5nKT19IGxpc3RlbmVyIENh
bGxiYWNrIGNhbGxlZCB3aGVuZXZlciB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAgICAgKiAgIHRo
ZSBgd2F0Y2hFeHByZXNzaW9uYCBjaGFuZ2VzLgorICAgICAgICoKKyAgICAgICAqICAgIC0gYHN0
cmluZ2A6IEV2YWx1YXRlZCBhcyB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufQor
ICAgICAgICogICAgLSBgZnVuY3Rpb24obmV3VmFsdWUsIG9sZFZhbHVlLCBzY29wZSlgOiBjYWxs
ZWQgd2l0aCBjdXJyZW50IGFuZCBwcmV2aW91cyB2YWx1ZXMgYXMgcGFyYW1ldGVycy4KKyAgICAg
ICAqCisgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvYmplY3RFcXVhbGl0eSBDb21wYXJlIG9i
amVjdCBmb3IgZXF1YWxpdHkgcmF0aGVyIHRoYW4gZm9yIHJlZmVyZW5jZS4KKyAgICAgICAqIEBy
ZXR1cm5zIHtmdW5jdGlvbigpfSBSZXR1cm5zIGEgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb24gZm9y
IHRoaXMgbGlzdGVuZXIuCisgICAgICAgKi8KKyAgICAgICR3YXRjaDogZnVuY3Rpb24od2F0Y2hF
eHAsIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSkgeworICAgICAgICB2YXIgc2NvcGUgPSB0aGlz
LAorICAgICAgICAgICAgZ2V0ID0gY29tcGlsZVRvRm4od2F0Y2hFeHAsICd3YXRjaCcpLAorICAg
ICAgICAgICAgYXJyYXkgPSBzY29wZS4kJHdhdGNoZXJzLAorICAgICAgICAgICAgd2F0Y2hlciA9
IHsKKyAgICAgICAgICAgICAgZm46IGxpc3RlbmVyLAorICAgICAgICAgICAgICBsYXN0OiBpbml0
V2F0Y2hWYWwsCisgICAgICAgICAgICAgIGdldDogZ2V0LAorICAgICAgICAgICAgICBleHA6IHdh
dGNoRXhwLAorICAgICAgICAgICAgICBlcTogISFvYmplY3RFcXVhbGl0eQorICAgICAgICAgICAg
fTsKKworICAgICAgICAvLyBpbiB0aGUgY2FzZSB1c2VyIHBhc3Mgc3RyaW5nLCB3ZSBuZWVkIHRv
IGNvbXBpbGUgaXQsIGRvIHdlIHJlYWxseSBuZWVkIHRoaXMgPworICAgICAgICBpZiAoIWlzRnVu
Y3Rpb24obGlzdGVuZXIpKSB7CisgICAgICAgICAgdmFyIGxpc3RlbkZuID0gY29tcGlsZVRvRm4o
bGlzdGVuZXIgfHwgbm9vcCwgJ2xpc3RlbmVyJyk7CisgICAgICAgICAgd2F0Y2hlci5mbiA9IGZ1
bmN0aW9uKG5ld1ZhbCwgb2xkVmFsLCBzY29wZSkge2xpc3RlbkZuKHNjb3BlKTt9OworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFhcnJheSkgeworICAgICAgICAgIGFycmF5ID0gc2NvcGUuJCR3
YXRjaGVycyA9IFtdOworICAgICAgICB9CisgICAgICAgIC8vIHdlIHVzZSB1bnNoaWZ0IHNpbmNl
IHdlIHVzZSBhIHdoaWxlIGxvb3AgaW4gJGRpZ2VzdCBmb3Igc3BlZWQuCisgICAgICAgIC8vIHRo
ZSB3aGlsZSBsb29wIHJlYWRzIGluIHJldmVyc2Ugb3JkZXIuCisgICAgICAgIGFycmF5LnVuc2hp
ZnQod2F0Y2hlcik7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGFy
cmF5UmVtb3ZlKGFycmF5LCB3YXRjaGVyKTsKKyAgICAgICAgfTsKKyAgICAgIH0sCisKKyAgICAg
IC8qKgorICAgICAgICogQG5nZG9jIGZ1bmN0aW9uCisgICAgICAgKiBAbmFtZSBuZy4kcm9vdFNj
b3BlLlNjb3BlIyRkaWdlc3QKKyAgICAgICAqIEBtZXRob2RPZiBuZy4kcm9vdFNjb3BlLlNjb3Bl
CisgICAgICAgKiBAZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAg
ICAgICAqIFByb2Nlc3NlcyBhbGwgb2YgdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyR3
YXRjaCB3YXRjaGVyc30gb2YgdGhlIGN1cnJlbnQgc2NvcGUgYW5kIGl0cyBjaGlsZHJlbi4KKyAg
ICAgICAqIEJlY2F1c2UgYSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggd2F0Y2hl
cn0ncyBsaXN0ZW5lciBjYW4gY2hhbmdlIHRoZSBtb2RlbCwgdGhlCisgICAgICAgKiBgJGRpZ2Vz
dCgpYCBrZWVwcyBjYWxsaW5nIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2gg
d2F0Y2hlcnN9IHVudGlsIG5vIG1vcmUgbGlzdGVuZXJzIGFyZQorICAgICAgICogZmlyaW5nLiBU
aGlzIG1lYW5zIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9v
cC4gVGhpcyBmdW5jdGlvbiB3aWxsIHRocm93CisgICAgICAgKiBgJ01heGltdW0gaXRlcmF0aW9u
IGxpbWl0IGV4Y2VlZGVkLidgIGlmIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBleGNlZWRzIDEw
LgorICAgICAgICoKKyAgICAgICAqIFVzdWFsbHkgeW91IGRvbid0IGNhbGwgYCRkaWdlc3QoKWAg
ZGlyZWN0bHkgaW4KKyAgICAgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDb250cm9sbGVyIGNv
bnRyb2xsZXJzfSBvciBpbgorICAgICAgICoge0BsaW5rIG5nLiRjb21waWxlUHJvdmlkZXIjZGly
ZWN0aXZlIGRpcmVjdGl2ZXN9LgorICAgICAgICogSW5zdGVhZCBhIGNhbGwgdG8ge0BsaW5rIG5n
LiRyb290U2NvcGUuU2NvcGUjJGFwcGx5ICRhcHBseSgpfSAodHlwaWNhbGx5IGZyb20gd2l0aGlu
IGEKKyAgICAgICAqIHtAbGluayBuZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZSBkaXJlY3Rp
dmVzfSkgd2lsbCBmb3JjZSBhIGAkZGlnZXN0KClgLgorICAgICAgICoKKyAgICAgICAqIElmIHlv
dSB3YW50IHRvIGJlIG5vdGlmaWVkIHdoZW5ldmVyIGAkZGlnZXN0KClgIGlzIGNhbGxlZCwKKyAg
ICAgICAqIHlvdSBjYW4gcmVnaXN0ZXIgYSBgd2F0Y2hFeHByZXNzaW9uYCBmdW5jdGlvbiAgd2l0
aCB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggJHdhdGNoKCl9CisgICAgICAgKiB3
aXRoIG5vIGBsaXN0ZW5lcmAuCisgICAgICAgKgorICAgICAgICogWW91IG1heSBoYXZlIGEgbmVl
ZCB0byBjYWxsIGAkZGlnZXN0KClgIGZyb20gd2l0aGluIHVuaXQtdGVzdHMsIHRvIHNpbXVsYXRl
IHRoZSBzY29wZQorICAgICAgICogbGlmZS1jeWNsZS4KKyAgICAgICAqCisgICAgICAgKiAjIEV4
YW1wbGUKKyAgICAgICAqIDxwcmU+CisgICAgICAgICAgIHZhciBzY29wZSA9IC4uLjsKKyAgICAg
ICAgICAgc2NvcGUubmFtZSA9ICdtaXNrbyc7CisgICAgICAgICAgIHNjb3BlLmNvdW50ZXIgPSAw
OworCisgICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDApOworICAgICAg
ICAgICBzY29wZS4kd2F0Y2goJ25hbWUnLCBmdW5jdGlvbihuZXdWYWx1ZSwgb2xkVmFsdWUpIHsK
KyAgICAgICAgICAgICBzY29wZS5jb3VudGVyID0gc2NvcGUuY291bnRlciArIDE7CisgICAgICAg
ICAgIH0pOworICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgwKTsKKwor
ICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7CisgICAgICAgICAgIC8vIG5vIHZhcmlhYmxlIGNo
YW5nZQorICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgwKTsKKworICAg
ICAgICAgICBzY29wZS5uYW1lID0gJ2FkYW0nOworICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7
CisgICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDEpOworICAgICAgICog
PC9wcmU+CisgICAgICAgKgorICAgICAgICovCisgICAgICAkZGlnZXN0OiBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIHdhdGNoLCB2YWx1ZSwgbGFzdCwKKyAgICAgICAgICAgIHdhdGNoZXJzLAor
ICAgICAgICAgICAgYXN5bmNRdWV1ZSwKKyAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAg
IGRpcnR5LCB0dGwgPSBUVEwsCisgICAgICAgICAgICBuZXh0LCBjdXJyZW50LCB0YXJnZXQgPSB0
aGlzLAorICAgICAgICAgICAgd2F0Y2hMb2cgPSBbXSwKKyAgICAgICAgICAgIGxvZ0lkeCwgbG9n
TXNnOworCisgICAgICAgIGJlZ2luUGhhc2UoJyRkaWdlc3QnKTsKKworICAgICAgICBkbyB7Cisg
ICAgICAgICAgZGlydHkgPSBmYWxzZTsKKyAgICAgICAgICBjdXJyZW50ID0gdGFyZ2V0OworICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgIGFzeW5jUXVldWUgPSBjdXJyZW50LiQkYXN5bmNRdWV1
ZTsKKyAgICAgICAgICAgIHdoaWxlKGFzeW5jUXVldWUubGVuZ3RoKSB7CisgICAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgY3VycmVudC4kZXZhbChhc3luY1F1ZXVlLnNoaWZ0KCkp
OworICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgJGV4Y2VwdGlv
bkhhbmRsZXIoZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICgod2F0Y2hlcnMgPSBjdXJyZW50LiQkd2F0Y2hlcnMpKSB7CisgICAgICAgICAgICAgIC8v
IHByb2Nlc3Mgb3VyIHdhdGNoZXMKKyAgICAgICAgICAgICAgbGVuZ3RoID0gd2F0Y2hlcnMubGVu
Z3RoOworICAgICAgICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKKyAgICAgICAgICAgICAgICB0
cnkgeworICAgICAgICAgICAgICAgICAgd2F0Y2ggPSB3YXRjaGVyc1tsZW5ndGhdOworICAgICAg
ICAgICAgICAgICAgLy8gTW9zdCBjb21tb24gd2F0Y2hlcyBhcmUgb24gcHJpbWl0aXZlcywgaW4g
d2hpY2ggY2FzZSB3ZSBjYW4gc2hvcnQKKyAgICAgICAgICAgICAgICAgIC8vIGNpcmN1aXQgaXQg
d2l0aCA9PT0gb3BlcmF0b3IsIG9ubHkgd2hlbiA9PT0gZmFpbHMgZG8gd2UgdXNlIC5lcXVhbHMK
KyAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUgPSB3YXRjaC5nZXQoY3VycmVudCkpICE9PSAo
bGFzdCA9IHdhdGNoLmxhc3QpICYmCisgICAgICAgICAgICAgICAgICAgICAgISh3YXRjaC5lcQor
ICAgICAgICAgICAgICAgICAgICAgICAgICA/IGVxdWFscyh2YWx1ZSwgbGFzdCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIHR5cGVvZiBs
YXN0ID09ICdudW1iZXInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzTmFOKHZh
bHVlKSAmJiBpc05hTihsYXN0KSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgd2F0Y2gubGFzdCA9IHdhdGNoLmVxID8gY29weSh2YWx1
ZSkgOiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgd2F0Y2guZm4odmFsdWUsICgobGFzdCA9
PT0gaW5pdFdhdGNoVmFsKSA/IHZhbHVlIDogbGFzdCksIGN1cnJlbnQpOworICAgICAgICAgICAg
ICAgICAgICBpZiAodHRsIDwgNSkgeworICAgICAgICAgICAgICAgICAgICAgIGxvZ0lkeCA9IDQg
LSB0dGw7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3YXRjaExvZ1tsb2dJZHhdKSB3YXRj
aExvZ1tsb2dJZHhdID0gW107CisgICAgICAgICAgICAgICAgICAgICAgbG9nTXNnID0gKGlzRnVu
Y3Rpb24od2F0Y2guZXhwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZm46ICcgKyAo
d2F0Y2guZXhwLm5hbWUgfHwgd2F0Y2guZXhwLnRvU3RyaW5nKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogd2F0Y2guZXhwOworICAgICAgICAgICAgICAgICAgICAgIGxvZ01zZyArPSAn
OyBuZXdWYWw6ICcgKyB0b0pzb24odmFsdWUpICsgJzsgb2xkVmFsOiAnICsgdG9Kc29uKGxhc3Qp
OworICAgICAgICAgICAgICAgICAgICAgIHdhdGNoTG9nW2xvZ0lkeF0ucHVzaChsb2dNc2cpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEluc2FuaXR5IFdhcm5pbmc6IHNjb3BlIGRlcHRoLWZpcnN0IHRyYXZlcnNh
bAorICAgICAgICAgICAgLy8geWVzLCB0aGlzIGNvZGUgaXMgYSBiaXQgY3JhenksIGJ1dCBpdCB3
b3JrcyBhbmQgd2UgaGF2ZSB0ZXN0cyB0byBwcm92ZSBpdCEKKyAgICAgICAgICAgIC8vIHRoaXMg
cGllY2Ugc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSB0cmF2ZXJzYWwgaW4gJGJyb2Fk
Y2FzdAorICAgICAgICAgICAgaWYgKCEobmV4dCA9IChjdXJyZW50LiQkY2hpbGRIZWFkIHx8IChj
dXJyZW50ICE9PSB0YXJnZXQgJiYgY3VycmVudC4kJG5leHRTaWJsaW5nKSkpKSB7CisgICAgICAg
ICAgICAgIHdoaWxlKGN1cnJlbnQgIT09IHRhcmdldCAmJiAhKG5leHQgPSBjdXJyZW50LiQkbmV4
dFNpYmxpbmcpKSB7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuJHBhcmVudDsK
KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gd2hpbGUgKChjdXJy
ZW50ID0gbmV4dCkpOworCisgICAgICAgICAgaWYoZGlydHkgJiYgISh0dGwtLSkpIHsKKyAgICAg
ICAgICAgIGNsZWFyUGhhc2UoKTsKKyAgICAgICAgICAgIHRocm93IEVycm9yKFRUTCArICcgJGRp
Z2VzdCgpIGl0ZXJhdGlvbnMgcmVhY2hlZC4gQWJvcnRpbmchXG4nICsKKyAgICAgICAgICAgICAg
ICAnV2F0Y2hlcnMgZmlyZWQgaW4gdGhlIGxhc3QgNSBpdGVyYXRpb25zOiAnICsgdG9Kc29uKHdh
dGNoTG9nKSk7CisgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChkaXJ0eSB8fCBhc3luY1F1
ZXVlLmxlbmd0aCk7CisKKyAgICAgICAgY2xlYXJQaGFzZSgpOworICAgICAgfSwKKworCisgICAg
ICAvKioKKyAgICAgICAqIEBuZ2RvYyBldmVudAorICAgICAgICogQG5hbWUgbmcuJHJvb3RTY29w
ZS5TY29wZSMkZGVzdHJveQorICAgICAgICogQGV2ZW50T2YgbmcuJHJvb3RTY29wZS5TY29wZQor
ICAgICAgICogQGV2ZW50VHlwZSBicm9hZGNhc3Qgb24gc2NvcGUgYmVpbmcgZGVzdHJveWVkCisg
ICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBCcm9hZGNhc3RlZCB3aGVu
IGEgc2NvcGUgYW5kIGl0cyBjaGlsZHJlbiBhcmUgYmVpbmcgZGVzdHJveWVkLgorICAgICAgICov
CisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIGZ1bmN0aW9uCisgICAgICAgKiBAbmFtZSBu
Zy4kcm9vdFNjb3BlLlNjb3BlIyRkZXN0cm95CisgICAgICAgKiBAbWV0aG9kT2YgbmcuJHJvb3RT
Y29wZS5TY29wZQorICAgICAgICogQGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2Ny
aXB0aW9uCisgICAgICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50IHNjb3BlIChhbmQgYWxsIG9mIGl0
cyBjaGlsZHJlbikgZnJvbSB0aGUgcGFyZW50IHNjb3BlLiBSZW1vdmFsIGltcGxpZXMKKyAgICAg
ICAqIHRoYXQgY2FsbHMgdG8ge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGln
ZXN0KCl9IHdpbGwgbm8gbG9uZ2VyCisgICAgICAgKiBwcm9wYWdhdGUgdG8gdGhlIGN1cnJlbnQg
c2NvcGUgYW5kIGl0cyBjaGlsZHJlbi4gUmVtb3ZhbCBhbHNvIGltcGxpZXMgdGhhdCB0aGUgY3Vy
cmVudAorICAgICAgICogc2NvcGUgaXMgZWxpZ2libGUgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi4K
KyAgICAgICAqCisgICAgICAgKiBUaGUgYCRkZXN0cm95KClgIGlzIHVzdWFsbHkgdXNlZCBieSBk
aXJlY3RpdmVzIHN1Y2ggYXMKKyAgICAgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdSZXBlYXQg
bmdSZXBlYXR9IGZvciBtYW5hZ2luZyB0aGUKKyAgICAgICAqIHVucm9sbGluZyBvZiB0aGUgbG9v
cC4KKyAgICAgICAqCisgICAgICAgKiBKdXN0IGJlZm9yZSBhIHNjb3BlIGlzIGRlc3Ryb3llZCBh
IGAkZGVzdHJveWAgZXZlbnQgaXMgYnJvYWRjYXN0ZWQgb24gdGhpcyBzY29wZS4KKyAgICAgICAq
IEFwcGxpY2F0aW9uIGNvZGUgY2FuIHJlZ2lzdGVyIGEgYCRkZXN0cm95YCBldmVudCBoYW5kbGVy
IHRoYXQgd2lsbCBnaXZlIGl0IGNoYW5jZSB0bworICAgICAgICogcGVyZm9ybSBhbnkgbmVjZXNz
YXJ5IGNsZWFudXAuCisgICAgICAgKi8KKyAgICAgICRkZXN0cm95OiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgLy8gd2UgY2FuJ3QgZGVzdHJveSB0aGUgcm9vdCBzY29wZSBvciBhIHNjb3BlIHRoYXQg
aGFzIGJlZW4gYWxyZWFkeSBkZXN0cm95ZWQKKyAgICAgICAgaWYgKCRyb290U2NvcGUgPT0gdGhp
cyB8fCB0aGlzLiQkZGVzdHJveWVkKSByZXR1cm47CisgICAgICAgIHZhciBwYXJlbnQgPSB0aGlz
LiRwYXJlbnQ7CisKKyAgICAgICAgdGhpcy4kYnJvYWRjYXN0KCckZGVzdHJveScpOworICAgICAg
ICB0aGlzLiQkZGVzdHJveWVkID0gdHJ1ZTsKKworICAgICAgICBpZiAocGFyZW50LiQkY2hpbGRI
ZWFkID09IHRoaXMpIHBhcmVudC4kJGNoaWxkSGVhZCA9IHRoaXMuJCRuZXh0U2libGluZzsKKyAg
ICAgICAgaWYgKHBhcmVudC4kJGNoaWxkVGFpbCA9PSB0aGlzKSBwYXJlbnQuJCRjaGlsZFRhaWwg
PSB0aGlzLiQkcHJldlNpYmxpbmc7CisgICAgICAgIGlmICh0aGlzLiQkcHJldlNpYmxpbmcpIHRo
aXMuJCRwcmV2U2libGluZy4kJG5leHRTaWJsaW5nID0gdGhpcy4kJG5leHRTaWJsaW5nOworICAg
ICAgICBpZiAodGhpcy4kJG5leHRTaWJsaW5nKSB0aGlzLiQkbmV4dFNpYmxpbmcuJCRwcmV2U2li
bGluZyA9IHRoaXMuJCRwcmV2U2libGluZzsKKworICAgICAgICAvLyBUaGlzIGlzIGJvZ3VzIGNv
ZGUgdGhhdCB3b3JrcyBhcm91bmQgQ2hyb21lJ3MgR0MgbGVhaworICAgICAgICAvLyBzZWU6IGh0
dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvaXNzdWVzLzEzMTMjaXNzdWVjb21t
ZW50LTEwMzc4NDUxCisgICAgICAgIHRoaXMuJHBhcmVudCA9IHRoaXMuJCRuZXh0U2libGluZyA9
IHRoaXMuJCRwcmV2U2libGluZyA9IHRoaXMuJCRjaGlsZEhlYWQgPQorICAgICAgICAgICAgdGhp
cy4kJGNoaWxkVGFpbCA9IG51bGw7CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAgICAqIEBu
Z2RvYyBmdW5jdGlvbgorICAgICAgICogQG5hbWUgbmcuJHJvb3RTY29wZS5TY29wZSMkZXZhbAor
ICAgICAgICogQG1ldGhvZE9mIG5nLiRyb290U2NvcGUuU2NvcGUKKyAgICAgICAqIEBmdW5jdGlv
bgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICogRXhlY3V0ZXMgdGhl
IGBleHByZXNzaW9uYCBvbiB0aGUgY3VycmVudCBzY29wZSByZXR1cm5pbmcgdGhlIHJlc3VsdC4g
QW55IGV4Y2VwdGlvbnMgaW4gdGhlCisgICAgICAgKiBleHByZXNzaW9uIGFyZSBwcm9wYWdhdGVk
ICh1bmNhdWdodCkuIFRoaXMgaXMgdXNlZnVsIHdoZW4gZXZhbHVhdGluZyBBbmd1bGFyIGV4cHJl
c3Npb25zLgorICAgICAgICoKKyAgICAgICAqICMgRXhhbXBsZQorICAgICAgICogPHByZT4KKyAg
ICAgICAgICAgdmFyIHNjb3BlID0gbmcuJHJvb3RTY29wZS5TY29wZSgpOworICAgICAgICAgICBz
Y29wZS5hID0gMTsKKyAgICAgICAgICAgc2NvcGUuYiA9IDI7CisKKyAgICAgICAgICAgZXhwZWN0
KHNjb3BlLiRldmFsKCdhK2InKSkudG9FcXVhbCgzKTsKKyAgICAgICAgICAgZXhwZWN0KHNjb3Bl
LiRldmFsKGZ1bmN0aW9uKHNjb3BlKXsgcmV0dXJuIHNjb3BlLmEgKyBzY29wZS5iOyB9KSkudG9F
cXVhbCgzKTsKKyAgICAgICAqIDwvcHJlPgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7KHN0
cmluZ3xmdW5jdGlvbigpKT19IGV4cHJlc3Npb24gQW4gYW5ndWxhciBleHByZXNzaW9uIHRvIGJl
IGV4ZWN1dGVkLgorICAgICAgICoKKyAgICAgICAqICAgIC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNp
bmcgdGhlIHJ1bGVzIGFzIGRlZmluZWQgaW4gIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJl
c3Npb259LgorICAgICAgICogICAgLSBgZnVuY3Rpb24oc2NvcGUpYDogZXhlY3V0ZSB0aGUgZnVu
Y3Rpb24gd2l0aCB0aGUgY3VycmVudCBgc2NvcGVgIHBhcmFtZXRlci4KKyAgICAgICAqCisgICAg
ICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9u
LgorICAgICAgICovCisgICAgICAkZXZhbDogZnVuY3Rpb24oZXhwciwgbG9jYWxzKSB7CisgICAg
ICAgIHJldHVybiAkcGFyc2UoZXhwcikodGhpcywgbG9jYWxzKTsKKyAgICAgIH0sCisKKyAgICAg
IC8qKgorICAgICAgICogQG5nZG9jIGZ1bmN0aW9uCisgICAgICAgKiBAbmFtZSBuZy4kcm9vdFNj
b3BlLlNjb3BlIyRldmFsQXN5bmMKKyAgICAgICAqIEBtZXRob2RPZiBuZy4kcm9vdFNjb3BlLlNj
b3BlCisgICAgICAgKiBAZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24K
KyAgICAgICAqIEV4ZWN1dGVzIHRoZSBleHByZXNzaW9uIG9uIHRoZSBjdXJyZW50IHNjb3BlIGF0
IGEgbGF0ZXIgcG9pbnQgaW4gdGltZS4KKyAgICAgICAqCisgICAgICAgKiBUaGUgYCRldmFsQXN5
bmNgIG1ha2VzIG5vIGd1YXJhbnRlZXMgYXMgdG8gd2hlbiB0aGUgYGV4cHJlc3Npb25gIHdpbGwg
YmUgZXhlY3V0ZWQsIG9ubHkgdGhhdDoKKyAgICAgICAqCisgICAgICAgKiAgIC0gaXQgd2lsbCBl
eGVjdXRlIGluIHRoZSBjdXJyZW50IHNjcmlwdCBleGVjdXRpb24gY29udGV4dCAoYmVmb3JlIGFu
eSBET00gcmVuZGVyaW5nKS4KKyAgICAgICAqICAgLSBhdCBsZWFzdCBvbmUge0BsaW5rIG5nLiRy
b290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0IGN5Y2xlfSB3aWxsIGJlIHBlcmZvcm1lZCBh
ZnRlcgorICAgICAgICogICAgIGBleHByZXNzaW9uYCBleGVjdXRpb24uCisgICAgICAgKgorICAg
ICAgICogQW55IGV4Y2VwdGlvbnMgZnJvbSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBleHByZXNzaW9u
IGFyZSBmb3J3YXJkZWQgdG8gdGhlCisgICAgICAgKiB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRs
ZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuCisgICAgICAgKgorICAgICAgICogQHBhcmFt
IHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0gZXhwcmVzc2lvbiBBbiBhbmd1bGFyIGV4cHJlc3Npb24g
dG8gYmUgZXhlY3V0ZWQuCisgICAgICAgKgorICAgICAgICogICAgLSBgc3RyaW5nYDogZXhlY3V0
ZSB1c2luZyB0aGUgcnVsZXMgYXMgZGVmaW5lZCBpbiAge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24g
ZXhwcmVzc2lvbn0uCisgICAgICAgKiAgICAtIGBmdW5jdGlvbihzY29wZSlgOiBleGVjdXRlIHRo
ZSBmdW5jdGlvbiB3aXRoIHRoZSBjdXJyZW50IGBzY29wZWAgcGFyYW1ldGVyLgorICAgICAgICoK
KyAgICAgICAqLworICAgICAgJGV2YWxBc3luYzogZnVuY3Rpb24oZXhwcikgeworICAgICAgICB0
aGlzLiQkYXN5bmNRdWV1ZS5wdXNoKGV4cHIpOworICAgICAgfSwKKworICAgICAgLyoqCisgICAg
ICAgKiBAbmdkb2MgZnVuY3Rpb24KKyAgICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUuU2NvcGUj
JGFwcGx5CisgICAgICAgKiBAbWV0aG9kT2YgbmcuJHJvb3RTY29wZS5TY29wZQorICAgICAgICog
QGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBgJGFw
cGx5KClgIGlzIHVzZWQgdG8gZXhlY3V0ZSBhbiBleHByZXNzaW9uIGluIGFuZ3VsYXIgZnJvbSBv
dXRzaWRlIG9mIHRoZSBhbmd1bGFyIGZyYW1ld29yay4KKyAgICAgICAqIChGb3IgZXhhbXBsZSBm
cm9tIGJyb3dzZXIgRE9NIGV2ZW50cywgc2V0VGltZW91dCwgWEhSIG9yIHRoaXJkIHBhcnR5IGxp
YnJhcmllcykuCisgICAgICAgKiBCZWNhdXNlIHdlIGFyZSBjYWxsaW5nIGludG8gdGhlIGFuZ3Vs
YXIgZnJhbWV3b3JrIHdlIG5lZWQgdG8gcGVyZm9ybSBwcm9wZXIgc2NvcGUgbGlmZS1jeWNsZQor
ICAgICAgICogb2Yge0BsaW5rIG5nLiRleGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbiBoYW5kbGlu
Z30sCisgICAgICAgKiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0IGV4ZWN1dGlu
ZyB3YXRjaGVzfS4KKyAgICAgICAqCisgICAgICAgKiAjIyBMaWZlIGN5Y2xlCisgICAgICAgKgor
ICAgICAgICogIyBQc2V1ZG8tQ29kZSBvZiBgJGFwcGx5KClgCisgICAgICAgKiA8cHJlPgorICAg
ICAgICAgICBmdW5jdGlvbiAkYXBwbHkoZXhwcikgeworICAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICByZXR1cm4gJGV2YWwoZXhwcik7CisgICAgICAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7CisgICAgICAgICAgICAgfSBm
aW5hbGx5IHsKKyAgICAgICAgICAgICAgICRyb290LiRkaWdlc3QoKTsKKyAgICAgICAgICAgICB9
CisgICAgICAgICAgIH0KKyAgICAgICAqIDwvcHJlPgorICAgICAgICoKKyAgICAgICAqCisgICAg
ICAgKiBTY29wZSdzIGAkYXBwbHkoKWAgbWV0aG9kIHRyYW5zaXRpb25zIHRocm91Z2ggdGhlIGZv
bGxvd2luZyBzdGFnZXM6CisgICAgICAgKgorICAgICAgICogMS4gVGhlIHtAbGluayBndWlkZS9l
eHByZXNzaW9uIGV4cHJlc3Npb259IGlzIGV4ZWN1dGVkIHVzaW5nIHRoZQorICAgICAgICogICAg
e0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGV2YWwgJGV2YWwoKX0gbWV0aG9kLgorICAgICAg
ICogMi4gQW55IGV4Y2VwdGlvbnMgZnJvbSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBleHByZXNzaW9u
IGFyZSBmb3J3YXJkZWQgdG8gdGhlCisgICAgICAgKiAgICB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhh
bmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuCisgICAgICAgKiAzLiBUaGUge0BsaW5r
IG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNoIHdhdGNofSBsaXN0ZW5lcnMgYXJlIGZpcmVkIGlt
bWVkaWF0ZWx5IGFmdGVyIHRoZSBleHByZXNzaW9uCisgICAgICAgKiAgICB3YXMgZXhlY3V0ZWQg
dXNpbmcgdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCgpfSBt
ZXRob2QuCisgICAgICAgKgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7KHN0cmluZ3xmdW5j
dGlvbigpKT19IGV4cCBBbiBhbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQuCisgICAg
ICAgKgorICAgICAgICogICAgLSBgc3RyaW5nYDogZXhlY3V0ZSB1c2luZyB0aGUgcnVsZXMgYXMg
ZGVmaW5lZCBpbiB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufS4KKyAgICAgICAq
ICAgIC0gYGZ1bmN0aW9uKHNjb3BlKWA6IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggY3VycmVu
dCBgc2NvcGVgIHBhcmFtZXRlci4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB7Kn0gVGhl
IHJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uLgorICAgICAgICovCisgICAgICAk
YXBwbHk6IGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBiZWdpblBo
YXNlKCckYXBwbHknKTsKKyAgICAgICAgICByZXR1cm4gdGhpcy4kZXZhbChleHByKTsKKyAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAg
ICB9IGZpbmFsbHkgeworICAgICAgICAgIGNsZWFyUGhhc2UoKTsKKyAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgJHJvb3RTY29wZS4kZGlnZXN0KCk7CisgICAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7CisgICAgICAgICAgICB0aHJvdyBl
OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAg
KiBAbmdkb2MgZnVuY3Rpb24KKyAgICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUuU2NvcGUjJG9u
CisgICAgICAgKiBAbWV0aG9kT2YgbmcuJHJvb3RTY29wZS5TY29wZQorICAgICAgICogQGZ1bmN0
aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBMaXN0ZW5zIG9u
IGV2ZW50cyBvZiBhIGdpdmVuIHR5cGUuIFNlZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMk
ZW1pdCAkZW1pdH0gZm9yIGRpc2N1c3Npb24gb2YKKyAgICAgICAqIGV2ZW50IGxpZmUgY3ljbGUu
CisgICAgICAgKgorICAgICAgICogVGhlIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIGZvcm1hdCBp
czogYGZ1bmN0aW9uKGV2ZW50LCBhcmdzLi4uKWAuIFRoZSBgZXZlbnRgIG9iamVjdAorICAgICAg
ICogcGFzc2VkIGludG8gdGhlIGxpc3RlbmVyIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6
CisgICAgICAgKgorICAgICAgICogICAtIGB0YXJnZXRTY29wZWAgLSBge1Njb3BlfWA6IHRoZSBz
Y29wZSBvbiB3aGljaCB0aGUgZXZlbnQgd2FzIGAkZW1pdGAtZWQgb3IgYCRicm9hZGNhc3RgLWVk
LgorICAgICAgICogICAtIGBjdXJyZW50U2NvcGVgIC0gYHtTY29wZX1gOiB0aGUgY3VycmVudCBz
Y29wZSB3aGljaCBpcyBoYW5kbGluZyB0aGUgZXZlbnQuCisgICAgICAgKiAgIC0gYG5hbWVgIC0g
YHtzdHJpbmd9YDogTmFtZSBvZiB0aGUgZXZlbnQuCisgICAgICAgKiAgIC0gYHN0b3BQcm9wYWdh
dGlvbmAgLSBge2Z1bmN0aW9uPX1gOiBjYWxsaW5nIGBzdG9wUHJvcGFnYXRpb25gIGZ1bmN0aW9u
IHdpbGwgY2FuY2VsIGZ1cnRoZXIgZXZlbnQKKyAgICAgICAqICAgICBwcm9wYWdhdGlvbiAoYXZh
aWxhYmxlIG9ubHkgZm9yIGV2ZW50cyB0aGF0IHdlcmUgYCRlbWl0YC1lZCkuCisgICAgICAgKiAg
IC0gYHByZXZlbnREZWZhdWx0YCAtIGB7ZnVuY3Rpb259YDogY2FsbGluZyBgcHJldmVudERlZmF1
bHRgIHNldHMgYGRlZmF1bHRQcmV2ZW50ZWRgIGZsYWcgdG8gdHJ1ZS4KKyAgICAgICAqICAgLSBg
ZGVmYXVsdFByZXZlbnRlZGAgLSBge2Jvb2xlYW59YDogdHJ1ZSBpZiBgcHJldmVudERlZmF1bHRg
IHdhcyBjYWxsZWQuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXZl
bnQgbmFtZSB0byBsaXN0ZW4gb24uCisgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGV2ZW50LCBh
cmdzLi4uKX0gbGlzdGVuZXIgRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyBlbWl0
dGVkLgorICAgICAgICogQHJldHVybnMge2Z1bmN0aW9uKCl9IFJldHVybnMgYSBkZXJlZ2lzdHJh
dGlvbiBmdW5jdGlvbiBmb3IgdGhpcyBsaXN0ZW5lci4KKyAgICAgICAqLworICAgICAgJG9uOiBm
dW5jdGlvbihuYW1lLCBsaXN0ZW5lcikgeworICAgICAgICB2YXIgbmFtZWRMaXN0ZW5lcnMgPSB0
aGlzLiQkbGlzdGVuZXJzW25hbWVdOworICAgICAgICBpZiAoIW5hbWVkTGlzdGVuZXJzKSB7Cisg
ICAgICAgICAgdGhpcy4kJGxpc3RlbmVyc1tuYW1lXSA9IG5hbWVkTGlzdGVuZXJzID0gW107Cisg
ICAgICAgIH0KKyAgICAgICAgbmFtZWRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7CisKKyAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIG5hbWVkTGlzdGVuZXJzW2luZGV4T2Yo
bmFtZWRMaXN0ZW5lcnMsIGxpc3RlbmVyKV0gPSBudWxsOworICAgICAgICB9OworICAgICAgfSwK
KworCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBmdW5jdGlvbgorICAgICAgICogQG5hbWUg
bmcuJHJvb3RTY29wZS5TY29wZSMkZW1pdAorICAgICAgICogQG1ldGhvZE9mIG5nLiRyb290U2Nv
cGUuU2NvcGUKKyAgICAgICAqIEBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlw
dGlvbgorICAgICAgICogRGlzcGF0Y2hlcyBhbiBldmVudCBgbmFtZWAgdXB3YXJkcyB0aHJvdWdo
IHRoZSBzY29wZSBoaWVyYXJjaHkgbm90aWZ5aW5nIHRoZQorICAgICAgICogcmVnaXN0ZXJlZCB7
QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb259IGxpc3RlbmVycy4KKyAgICAgICAqCisgICAg
ICAgKiBUaGUgZXZlbnQgbGlmZSBjeWNsZSBzdGFydHMgYXQgdGhlIHNjb3BlIG9uIHdoaWNoIGAk
ZW1pdGAgd2FzIGNhbGxlZC4gQWxsCisgICAgICAgKiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29w
ZSMkb24gbGlzdGVuZXJzfSBsaXN0ZW5pbmcgZm9yIGBuYW1lYCBldmVudCBvbiB0aGlzIHNjb3Bl
IGdldCBub3RpZmllZC4KKyAgICAgICAqIEFmdGVyd2FyZHMsIHRoZSBldmVudCB0cmF2ZXJzZXMg
dXB3YXJkcyB0b3dhcmQgdGhlIHJvb3Qgc2NvcGUgYW5kIGNhbGxzIGFsbCByZWdpc3RlcmVkCisg
ICAgICAgKiBsaXN0ZW5lcnMgYWxvbmcgdGhlIHdheS4gVGhlIGV2ZW50IHdpbGwgc3RvcCBwcm9w
YWdhdGluZyBpZiBvbmUgb2YgdGhlIGxpc3RlbmVycyBjYW5jZWxzIGl0LgorICAgICAgICoKKyAg
ICAgICAqIEFueSBleGNlcHRpb24gZW1pdHRlZCBmcm9tIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29w
ZS5TY29wZSMkb24gbGlzdGVuZXJzfSB3aWxsIGJlIHBhc3NlZAorICAgICAgICogb250byB0aGUg
e0BsaW5rIG5nLiRleGNlcHRpb25IYW5kbGVyICRleGNlcHRpb25IYW5kbGVyfSBzZXJ2aWNlLgor
ICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEV2ZW50IG5hbWUgdG8gZW1p
dC4KKyAgICAgICAqIEBwYXJhbSB7Li4uKn0gYXJncyBPcHRpb25hbCBzZXQgb2YgYXJndW1lbnRz
IHdoaWNoIHdpbGwgYmUgcGFzc2VkIG9udG8gdGhlIGV2ZW50IGxpc3RlbmVycy4KKyAgICAgICAq
IEByZXR1cm4ge09iamVjdH0gRXZlbnQgb2JqZWN0LCBzZWUge0BsaW5rIG5nLiRyb290U2NvcGUu
U2NvcGUjJG9ufQorICAgICAgICovCisgICAgICAkZW1pdDogZnVuY3Rpb24obmFtZSwgYXJncykg
eworICAgICAgICB2YXIgZW1wdHkgPSBbXSwKKyAgICAgICAgICAgIG5hbWVkTGlzdGVuZXJzLAor
ICAgICAgICAgICAgc2NvcGUgPSB0aGlzLAorICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0g
ZmFsc2UsCisgICAgICAgICAgICBldmVudCA9IHsKKyAgICAgICAgICAgICAgbmFtZTogbmFtZSwK
KyAgICAgICAgICAgICAgdGFyZ2V0U2NvcGU6IHNjb3BlLAorICAgICAgICAgICAgICBzdG9wUHJv
cGFnYXRpb246IGZ1bmN0aW9uKCkge3N0b3BQcm9wYWdhdGlvbiA9IHRydWU7fSwKKyAgICAgICAg
ICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV2ZW50
LmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOworICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICBkZWZhdWx0UHJldmVudGVkOiBmYWxzZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGxp
c3RlbmVyQXJncyA9IGNvbmNhdChbZXZlbnRdLCBhcmd1bWVudHMsIDEpLAorICAgICAgICAgICAg
aSwgbGVuZ3RoOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICBuYW1lZExpc3RlbmVycyA9IHNj
b3BlLiQkbGlzdGVuZXJzW25hbWVdIHx8IGVtcHR5OworICAgICAgICAgIGV2ZW50LmN1cnJlbnRT
Y29wZSA9IHNjb3BlOworICAgICAgICAgIGZvciAoaT0wLCBsZW5ndGg9bmFtZWRMaXN0ZW5lcnMu
bGVuZ3RoOyBpPGxlbmd0aDsgaSsrKSB7CisKKyAgICAgICAgICAgIC8vIGlmIGxpc3RlbmVycyB3
ZXJlIGRlcmVnaXN0ZXJlZCwgZGVmcmFnbWVudCB0aGUgYXJyYXkKKyAgICAgICAgICAgIGlmICgh
bmFtZWRMaXN0ZW5lcnNbaV0pIHsKKyAgICAgICAgICAgICAgbmFtZWRMaXN0ZW5lcnMuc3BsaWNl
KGksIDEpOworICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICAgIGxlbmd0aC0tOworICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgIG5hbWVkTGlzdGVuZXJzW2ldLmFwcGx5KG51bGwsIGxpc3RlbmVyQXJncyk7
CisgICAgICAgICAgICAgIGlmIChzdG9wUHJvcGFnYXRpb24pIHJldHVybiBldmVudDsKKyAgICAg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIC8vdHJhdmVyc2UgdXB3YXJk
cworICAgICAgICAgIHNjb3BlID0gc2NvcGUuJHBhcmVudDsKKyAgICAgICAgfSB3aGlsZSAoc2Nv
cGUpOworCisgICAgICAgIHJldHVybiBldmVudDsKKyAgICAgIH0sCisKKworICAgICAgLyoqCisg
ICAgICAgKiBAbmdkb2MgZnVuY3Rpb24KKyAgICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUuU2Nv
cGUjJGJyb2FkY2FzdAorICAgICAgICogQG1ldGhvZE9mIG5nLiRyb290U2NvcGUuU2NvcGUKKyAg
ICAgICAqIEBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAg
ICogRGlzcGF0Y2hlcyBhbiBldmVudCBgbmFtZWAgZG93bndhcmRzIHRvIGFsbCBjaGlsZCBzY29w
ZXMgKGFuZCB0aGVpciBjaGlsZHJlbikgbm90aWZ5aW5nIHRoZQorICAgICAgICogcmVnaXN0ZXJl
ZCB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb259IGxpc3RlbmVycy4KKyAgICAgICAqCisg
ICAgICAgKiBUaGUgZXZlbnQgbGlmZSBjeWNsZSBzdGFydHMgYXQgdGhlIHNjb3BlIG9uIHdoaWNo
IGAkYnJvYWRjYXN0YCB3YXMgY2FsbGVkLiBBbGwKKyAgICAgICAqIHtAbGluayBuZy4kcm9vdFNj
b3BlLlNjb3BlIyRvbiBsaXN0ZW5lcnN9IGxpc3RlbmluZyBmb3IgYG5hbWVgIGV2ZW50IG9uIHRo
aXMgc2NvcGUgZ2V0IG5vdGlmaWVkLgorICAgICAgICogQWZ0ZXJ3YXJkcywgdGhlIGV2ZW50IHBy
b3BhZ2F0ZXMgdG8gYWxsIGRpcmVjdCBhbmQgaW5kaXJlY3Qgc2NvcGVzIG9mIHRoZSBjdXJyZW50
IHNjb3BlIGFuZAorICAgICAgICogY2FsbHMgYWxsIHJlZ2lzdGVyZWQgbGlzdGVuZXJzIGFsb25n
IHRoZSB3YXkuIFRoZSBldmVudCBjYW5ub3QgYmUgY2FuY2VsZWQuCisgICAgICAgKgorICAgICAg
ICogQW55IGV4Y2VwdGlvbiBlbW1pdGVkIGZyb20gdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNj
b3BlIyRvbiBsaXN0ZW5lcnN9IHdpbGwgYmUgcGFzc2VkCisgICAgICAgKiBvbnRvIHRoZSB7QGxp
bmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuCisgICAg
ICAgKgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXZlbnQgbmFtZSB0byBicm9hZGNh
c3QuCisgICAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MgT3B0aW9uYWwgc2V0IG9mIGFyZ3VtZW50
cyB3aGljaCB3aWxsIGJlIHBhc3NlZCBvbnRvIHRoZSBldmVudCBsaXN0ZW5lcnMuCisgICAgICAg
KiBAcmV0dXJuIHtPYmplY3R9IEV2ZW50IG9iamVjdCwgc2VlIHtAbGluayBuZy4kcm9vdFNjb3Bl
LlNjb3BlIyRvbn0KKyAgICAgICAqLworICAgICAgJGJyb2FkY2FzdDogZnVuY3Rpb24obmFtZSwg
YXJncykgeworICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcywKKyAgICAgICAgICAgIGN1cnJlbnQg
PSB0YXJnZXQsCisgICAgICAgICAgICBuZXh0ID0gdGFyZ2V0LAorICAgICAgICAgICAgZXZlbnQg
PSB7CisgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAgIHRhcmdldFNjb3Bl
OiB0YXJnZXQsCisgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBldmVudC5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogZmFsc2UKKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICBsaXN0ZW5lckFyZ3MgPSBjb25jYXQoW2V2ZW50XSwgYXJndW1lbnRz
LCAxKSwKKyAgICAgICAgICAgIGxpc3RlbmVycywgaSwgbGVuZ3RoOworCisgICAgICAgIC8vZG93
biB3aGlsZSB5b3UgY2FuLCB0aGVuIHVwIGFuZCBuZXh0IHNpYmxpbmcgb3IgdXAgYW5kIG5leHQg
c2libGluZyB1bnRpbCBiYWNrIGF0IHJvb3QKKyAgICAgICAgZG8geworICAgICAgICAgIGN1cnJl
bnQgPSBuZXh0OworICAgICAgICAgIGV2ZW50LmN1cnJlbnRTY29wZSA9IGN1cnJlbnQ7CisgICAg
ICAgICAgbGlzdGVuZXJzID0gY3VycmVudC4kJGxpc3RlbmVyc1tuYW1lXSB8fCBbXTsKKyAgICAg
ICAgICBmb3IgKGk9MCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaTxsZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgLy8gaWYgbGlzdGVuZXJzIHdlcmUgZGVyZWdpc3RlcmVkLCBkZWZyYWdt
ZW50IHRoZSBhcnJheQorICAgICAgICAgICAgaWYgKCFsaXN0ZW5lcnNbaV0pIHsKKyAgICAgICAg
ICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAgaS0tOworICAgICAg
ICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5hcHBseShu
dWxsLCBsaXN0ZW5lckFyZ3MpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAg
ICAgICRleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKwor
ICAgICAgICAgIC8vIEluc2FuaXR5IFdhcm5pbmc6IHNjb3BlIGRlcHRoLWZpcnN0IHRyYXZlcnNh
bAorICAgICAgICAgIC8vIHllcywgdGhpcyBjb2RlIGlzIGEgYml0IGNyYXp5LCBidXQgaXQgd29y
a3MgYW5kIHdlIGhhdmUgdGVzdHMgdG8gcHJvdmUgaXQhCisgICAgICAgICAgLy8gdGhpcyBwaWVj
ZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHRyYXZlcnNhbCBpbiAkZGlnZXN0Cisg
ICAgICAgICAgaWYgKCEobmV4dCA9IChjdXJyZW50LiQkY2hpbGRIZWFkIHx8IChjdXJyZW50ICE9
PSB0YXJnZXQgJiYgY3VycmVudC4kJG5leHRTaWJsaW5nKSkpKSB7CisgICAgICAgICAgICB3aGls
ZShjdXJyZW50ICE9PSB0YXJnZXQgJiYgIShuZXh0ID0gY3VycmVudC4kJG5leHRTaWJsaW5nKSkg
eworICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC4kcGFyZW50OworICAgICAgICAgICAg
fQorICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBuZXh0KSk7CisKKyAg
ICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgfQorICAgIH07CisKKyAgICB2YXIgJHJvb3RTY29w
ZSA9IG5ldyBTY29wZSgpOworCisgICAgcmV0dXJuICRyb290U2NvcGU7CisKKworICAgIGZ1bmN0
aW9uIGJlZ2luUGhhc2UocGhhc2UpIHsKKyAgICAgIGlmICgkcm9vdFNjb3BlLiQkcGhhc2UpIHsK
KyAgICAgICAgdGhyb3cgRXJyb3IoJHJvb3RTY29wZS4kJHBoYXNlICsgJyBhbHJlYWR5IGluIHBy
b2dyZXNzJyk7CisgICAgICB9CisKKyAgICAgICRyb290U2NvcGUuJCRwaGFzZSA9IHBoYXNlOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGNsZWFyUGhhc2UoKSB7CisgICAgICAkcm9vdFNjb3BlLiQk
cGhhc2UgPSBudWxsOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbXBpbGVUb0ZuKGV4cCwgbmFt
ZSkgeworICAgICAgdmFyIGZuID0gJHBhcnNlKGV4cCk7CisgICAgICBhc3NlcnRBcmdGbihmbiwg
bmFtZSk7CisgICAgICByZXR1cm4gZm47CisgICAgfQorCisgICAgLyoqCisgICAgICogZnVuY3Rp
b24gdXNlZCBhcyBhbiBpbml0aWFsIHZhbHVlIGZvciB3YXRjaGVycy4KKyAgICAgKiBiZWNhdXNl
IGl0J3MgdW5pcXVlIHdlIGNhbiBlYXNpbHkgdGVsbCBpdCBhcGFydCBmcm9tIG90aGVyIHZhbHVl
cworICAgICAqLworICAgIGZ1bmN0aW9uIGluaXRXYXRjaFZhbCgpIHt9CisgIH1dOworfQorCisv
KioKKyAqICEhISBUaGlzIGlzIGFuIHVuZG9jdW1lbnRlZCAicHJpdmF0ZSIgc2VydmljZSAhISEK
KyAqCisgKiBAbmFtZSBuZy4kc25pZmZlcgorICogQHJlcXVpcmVzICR3aW5kb3cKKyAqCisgKiBA
cHJvcGVydHkge2Jvb2xlYW59IGhpc3RvcnkgRG9lcyB0aGUgYnJvd3NlciBzdXBwb3J0IGh0bWw1
IGhpc3RvcnkgYXBpID8KKyAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaGFzaGNoYW5nZSBEb2VzIHRo
ZSBicm93c2VyIHN1cHBvcnQgaGFzaGNoYW5nZSBldmVudCA/CisgKgorICogQGRlc2NyaXB0aW9u
CisgKiBUaGlzIGlzIHZlcnkgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIHRlc3RpbmcgYnJvd3Nl
cidzIGZlYXR1cmVzLgorICovCitmdW5jdGlvbiAkU25pZmZlclByb3ZpZGVyKCkgeworICB0aGlz
LiRnZXQgPSBbJyR3aW5kb3cnLCBmdW5jdGlvbigkd2luZG93KSB7CisgICAgdmFyIGV2ZW50U3Vw
cG9ydCA9IHt9LAorICAgICAgICBhbmRyb2lkID0gaW50KCgvYW5kcm9pZCAoXGQrKS8uZXhlYyhs
b3dlcmNhc2UoJHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSkgfHwgW10pWzFdKTsKKworICAg
IHJldHVybiB7CisgICAgICAvLyBBbmRyb2lkIGhhcyBoaXN0b3J5LnB1c2hTdGF0ZSwgYnV0IGl0
IGRvZXMgbm90IHVwZGF0ZSBsb2NhdGlvbiBjb3JyZWN0bHkKKyAgICAgIC8vIHNvIGxldCdzIG5v
dCB1c2UgdGhlIGhpc3RvcnkgQVBJIGF0IGFsbC4KKyAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2ds
ZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MTc0NzEKKyAgICAgIC8vIGh0dHBzOi8v
Z2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvaXNzdWVzLzkwNAorICAgICAgaGlzdG9yeTog
ISEoJHdpbmRvdy5oaXN0b3J5ICYmICR3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgJiYgIShhbmRy
b2lkIDwgNCkpLAorICAgICAgaGFzaGNoYW5nZTogJ29uaGFzaGNoYW5nZScgaW4gJHdpbmRvdyAm
JgorICAgICAgICAgICAgICAgICAgLy8gSUU4IGNvbXBhdGlibGUgbW9kZSBsaWVzCisgICAgICAg
ICAgICAgICAgICAoISR3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8ICR3aW5kb3cuZG9j
dW1lbnQuZG9jdW1lbnRNb2RlID4gNyksCisgICAgICBoYXNFdmVudDogZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICAgICAgLy8gSUU5IGltcGxlbWVudHMgJ2lucHV0JyBldmVudCBpdCdzIHNvIGZ1YmFy
ZWQgdGhhdCB3ZSByYXRoZXIgcHJldGVuZCB0aGF0IGl0IGRvZXNuJ3QgaGF2ZQorICAgICAgICAv
LyBpdC4gSW4gcGFydGljdWxhciB0aGUgZXZlbnQgaXMgbm90IGZpcmVkIHdoZW4gYmFja3NwYWNl
IG9yIGRlbGV0ZSBrZXkgYXJlIHByZXNzZWQgb3IKKyAgICAgICAgLy8gd2hlbiBjdXQgb3BlcmF0
aW9uIGlzIHBlcmZvcm1lZC4KKyAgICAgICAgaWYgKGV2ZW50ID09ICdpbnB1dCcgJiYgbXNpZSA9
PSA5KSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGV2ZW50U3VwcG9y
dFtldmVudF0pKSB7CisgICAgICAgICAgdmFyIGRpdkVsbSA9ICR3aW5kb3cuZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgICAgZXZlbnRTdXBwb3J0W2V2ZW50XSA9ICdvbicg
KyBldmVudCBpbiBkaXZFbG07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXZlbnRTdXBw
b3J0W2V2ZW50XTsKKyAgICAgIH0sCisgICAgICAvLyBUT0RPKGkpOiBjdXJyZW50bHkgdGhlcmUg
aXMgbm8gd2F5IHRvIGZlYXR1cmUgZGV0ZWN0IENTUCB3aXRob3V0IHRyaWdnZXJpbmcgYWxlcnRz
CisgICAgICBjc3A6IGZhbHNlCisgICAgfTsKKyAgfV07Cit9CisKKy8qKgorICogQG5nZG9jIG9i
amVjdAorICogQG5hbWUgbmcuJHdpbmRvdworICoKKyAqIEBkZXNjcmlwdGlvbgorICogQSByZWZl
cmVuY2UgdG8gdGhlIGJyb3dzZXIncyBgd2luZG93YCBvYmplY3QuIFdoaWxlIGB3aW5kb3dgCisg
KiBpcyBnbG9iYWxseSBhdmFpbGFibGUgaW4gSmF2YVNjcmlwdCwgaXQgY2F1c2VzIHRlc3RhYmls
aXR5IHByb2JsZW1zLCBiZWNhdXNlCisgKiBpdCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gSW4gYW5n
dWxhciB3ZSBhbHdheXMgcmVmZXIgdG8gaXQgdGhyb3VnaCB0aGUKKyAqIGAkd2luZG93YCBzZXJ2
aWNlLCBzbyBpdCBtYXkgYmUgb3ZlcnJpZGVuLCByZW1vdmVkIG9yIG1vY2tlZCBmb3IgdGVzdGlu
Zy4KKyAqCisgKiBBbGwgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aXRoIHJlc3BlY3QgdG8g
Y3VycmVudCBzY29wZSBzbyB0aGV5IGRvbid0CisgKiBzdWZmZXIgZnJvbSB3aW5kb3cgZ2xvYmFs
aXR5LgorICoKKyAqIEBleGFtcGxlCisgICA8ZG9jOmV4YW1wbGU+CisgICAgIDxkb2M6c291cmNl
PgorICAgICAgIDxzY3JpcHQ+CisgICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSwgJHdpbmRv
dykgeworICAgICAgICAgICAkc2NvcGUuJHdpbmRvdyA9ICR3aW5kb3c7CisgICAgICAgICAgICRz
Y29wZS5ncmVldGluZyA9ICdIZWxsbywgV29ybGQhJzsKKyAgICAgICAgIH0KKyAgICAgICA8L3Nj
cmlwdD4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkN0cmwiPgorICAgICAgICAgPGlucHV0
IHR5cGU9InRleHQiIG5nLW1vZGVsPSJncmVldGluZyIgLz4KKyAgICAgICAgIDxidXR0b24gbmct
Y2xpY2s9IiR3aW5kb3cuYWxlcnQoZ3JlZXRpbmcpIj5BTEVSVDwvYnV0dG9uPgorICAgICAgIDwv
ZGl2PgorICAgICA8L2RvYzpzb3VyY2U+CisgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICBpdCgn
c2hvdWxkIGRpc3BsYXkgdGhlIGdyZWV0aW5nIGluIHRoZSBpbnB1dCBib3gnLCBmdW5jdGlvbigp
IHsKKyAgICAgICBpbnB1dCgnZ3JlZXRpbmcnKS5lbnRlcignSGVsbG8sIEUyRSBUZXN0cycpOwor
ICAgICAgIC8vIElmIHdlIGNsaWNrIHRoZSBidXR0b24gaXQgd2lsbCBibG9jayB0aGUgdGVzdCBy
dW5uZXIKKyAgICAgICAvLyBlbGVtZW50KCc6YnV0dG9uJykuY2xpY2soKTsKKyAgICAgIH0pOwor
ICAgICA8L2RvYzpzY2VuYXJpbz4KKyAgIDwvZG9jOmV4YW1wbGU+CisgKi8KK2Z1bmN0aW9uICRX
aW5kb3dQcm92aWRlcigpeworICB0aGlzLiRnZXQgPSB2YWx1ZUZuKHdpbmRvdyk7Cit9CisKKy8q
KgorICogUGFyc2UgaGVhZGVycyBpbnRvIGtleSB2YWx1ZSBvYmplY3QKKyAqCisgKiBAcGFyYW0g
e3N0cmluZ30gaGVhZGVycyBSYXcgaGVhZGVycyBhcyBhIHN0cmluZworICogQHJldHVybnMge09i
amVjdH0gUGFyc2VkIGhlYWRlcnMgYXMga2V5IHZhbHVlIG9iamVjdAorICovCitmdW5jdGlvbiBw
YXJzZUhlYWRlcnMoaGVhZGVycykgeworICB2YXIgcGFyc2VkID0ge30sIGtleSwgdmFsLCBpOwor
CisgIGlmICghaGVhZGVycykgcmV0dXJuIHBhcnNlZDsKKworICBmb3JFYWNoKGhlYWRlcnMuc3Bs
aXQoJ1xuJyksIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7Cisg
ICAga2V5ID0gbG93ZXJjYXNlKHRyaW0obGluZS5zdWJzdHIoMCwgaSkpKTsKKyAgICB2YWwgPSB0
cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7CisKKyAgICBpZiAoa2V5KSB7CisgICAgICBpZiAocGFy
c2VkW2tleV0pIHsKKyAgICAgICAgcGFyc2VkW2tleV0gKz0gJywgJyArIHZhbDsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIHBhcnNlZFtrZXldID0gdmFsOworICAgICAgfQorICAgIH0KKyAgfSk7
CisKKyAgcmV0dXJuIHBhcnNlZDsKK30KKworCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0
aGF0IHByb3ZpZGVzIGFjY2VzcyB0byBwYXJzZWQgaGVhZGVycy4KKyAqCisgKiBIZWFkZXJzIGFy
ZSBsYXp5IHBhcnNlZCB3aGVuIGZpcnN0IHJlcXVlc3RlZC4KKyAqIEBzZWUgcGFyc2VIZWFkZXJz
CisgKgorICogQHBhcmFtIHsoc3RyaW5nfE9iamVjdCl9IGhlYWRlcnMgSGVhZGVycyB0byBwcm92
aWRlIGFjY2VzcyB0by4KKyAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmc9KX0gUmV0dXJucyBh
IGdldHRlciBmdW5jdGlvbiB3aGljaCBpZiBjYWxsZWQgd2l0aDoKKyAqCisgKiAgIC0gaWYgY2Fs
bGVkIHdpdGggc2luZ2xlIGFuIGFyZ3VtZW50IHJldHVybnMgYSBzaW5nbGUgaGVhZGVyIHZhbHVl
IG9yIG51bGwKKyAqICAgLSBpZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMgcmV0dXJucyBhbiBv
YmplY3QgY29udGFpbmluZyBhbGwgaGVhZGVycy4KKyAqLworZnVuY3Rpb24gaGVhZGVyc0dldHRl
cihoZWFkZXJzKSB7CisgIHZhciBoZWFkZXJzT2JqID0gaXNPYmplY3QoaGVhZGVycykgPyBoZWFk
ZXJzIDogdW5kZWZpbmVkOworCisgIHJldHVybiBmdW5jdGlvbihuYW1lKSB7CisgICAgaWYgKCFo
ZWFkZXJzT2JqKSBoZWFkZXJzT2JqID0gIHBhcnNlSGVhZGVycyhoZWFkZXJzKTsKKworICAgIGlm
IChuYW1lKSB7CisgICAgICByZXR1cm4gaGVhZGVyc09ialtsb3dlcmNhc2UobmFtZSldIHx8IG51
bGw7CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRlcnNPYmo7CisgIH07Cit9CisKKworLyoqCisg
KiBDaGFpbiBhbGwgZ2l2ZW4gZnVuY3Rpb25zCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2Vk
IGZvciBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRyYW5zZm9ybWluZworICoKKyAqIEBwYXJh
bSB7Kn0gZGF0YSBEYXRhIHRvIHRyYW5zZm9ybS4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5n
PSl9IGhlYWRlcnMgSHR0cCBoZWFkZXJzIGdldHRlciBmbi4KKyAqIEBwYXJhbSB7KGZ1bmN0aW9u
fEFycmF5LjxmdW5jdGlvbj4pfSBmbnMgRnVuY3Rpb24gb3IgYW4gYXJyYXkgb2YgZnVuY3Rpb25z
LgorICogQHJldHVybnMgeyp9IFRyYW5zZm9ybWVkIGRhdGEuCisgKi8KK2Z1bmN0aW9uIHRyYW5z
Zm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7CisgIGlmIChpc0Z1bmN0aW9uKGZucykpCisg
ICAgcmV0dXJuIGZucyhkYXRhLCBoZWFkZXJzKTsKKworICBmb3JFYWNoKGZucywgZnVuY3Rpb24o
Zm4pIHsKKyAgICBkYXRhID0gZm4oZGF0YSwgaGVhZGVycyk7CisgIH0pOworCisgIHJldHVybiBk
YXRhOworfQorCisKK2Z1bmN0aW9uIGlzU3VjY2VzcyhzdGF0dXMpIHsKKyAgcmV0dXJuIDIwMCA8
PSBzdGF0dXMgJiYgc3RhdHVzIDwgMzAwOworfQorCisKK2Z1bmN0aW9uICRIdHRwUHJvdmlkZXIo
KSB7CisgIHZhciBKU09OX1NUQVJUID0gL15ccyooXFt8XHtbXlx7XSkvLAorICAgICAgSlNPTl9F
TkQgPSAvW1x9XF1dXHMqJC8sCisgICAgICBQUk9URUNUSU9OX1BSRUZJWCA9IC9eXClcXVx9Jyw/
XG4vOworCisgIHZhciAkY29uZmlnID0gdGhpcy5kZWZhdWx0cyA9IHsKKyAgICAvLyB0cmFuc2Zv
cm0gaW5jb21pbmcgcmVzcG9uc2UgZGF0YQorICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rp
b24oZGF0YSkgeworICAgICAgaWYgKGlzU3RyaW5nKGRhdGEpKSB7CisgICAgICAgIC8vIHN0cmlw
IGpzb24gdnVsbmVyYWJpbGl0eSBwcm90ZWN0aW9uIHByZWZpeAorICAgICAgICBkYXRhID0gZGF0
YS5yZXBsYWNlKFBST1RFQ1RJT05fUFJFRklYLCAnJyk7CisgICAgICAgIGlmIChKU09OX1NUQVJU
LnRlc3QoZGF0YSkgJiYgSlNPTl9FTkQudGVzdChkYXRhKSkKKyAgICAgICAgICBkYXRhID0gZnJv
bUpzb24oZGF0YSwgdHJ1ZSk7CisgICAgICB9CisgICAgICByZXR1cm4gZGF0YTsKKyAgICB9XSwK
KworICAgIC8vIHRyYW5zZm9ybSBvdXRnb2luZyByZXF1ZXN0IGRhdGEKKyAgICB0cmFuc2Zvcm1S
ZXF1ZXN0OiBbZnVuY3Rpb24oZCkgeworICAgICAgcmV0dXJuIGlzT2JqZWN0KGQpICYmICFpc0Zp
bGUoZCkgPyB0b0pzb24oZCkgOiBkOworICAgIH1dLAorCisgICAgLy8gZGVmYXVsdCBoZWFkZXJz
CisgICAgaGVhZGVyczogeworICAgICAgY29tbW9uOiB7CisgICAgICAgICdBY2NlcHQnOiAnYXBw
bGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJywKKyAgICAgICAgJ1gtUmVxdWVzdGVkLVdp
dGgnOiAnWE1MSHR0cFJlcXVlc3QnCisgICAgICB9LAorICAgICAgcG9zdDogeydDb250ZW50LVR5
cGUnOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04J30sCisgICAgICBwdXQ6ICB7J0Nv
bnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgnfQorICAgIH0KKyAg
fTsKKworICB2YXIgcHJvdmlkZXJSZXNwb25zZUludGVyY2VwdG9ycyA9IHRoaXMucmVzcG9uc2VJ
bnRlcmNlcHRvcnMgPSBbXTsKKworICB0aGlzLiRnZXQgPSBbJyRodHRwQmFja2VuZCcsICckYnJv
d3NlcicsICckY2FjaGVGYWN0b3J5JywgJyRyb290U2NvcGUnLCAnJHEnLCAnJGluamVjdG9yJywK
KyAgICAgIGZ1bmN0aW9uKCRodHRwQmFja2VuZCwgJGJyb3dzZXIsICRjYWNoZUZhY3RvcnksICRy
b290U2NvcGUsICRxLCAkaW5qZWN0b3IpIHsKKworICAgIHZhciBkZWZhdWx0Q2FjaGUgPSAkY2Fj
aGVGYWN0b3J5KCckaHR0cCcpLAorICAgICAgICByZXNwb25zZUludGVyY2VwdG9ycyA9IFtdOwor
CisgICAgZm9yRWFjaChwcm92aWRlclJlc3BvbnNlSW50ZXJjZXB0b3JzLCBmdW5jdGlvbihpbnRl
cmNlcHRvcikgeworICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvcnMucHVzaCgKKyAgICAgICAgICBp
c1N0cmluZyhpbnRlcmNlcHRvcikKKyAgICAgICAgICAgICAgPyAkaW5qZWN0b3IuZ2V0KGludGVy
Y2VwdG9yKQorICAgICAgICAgICAgICA6ICRpbmplY3Rvci5pbnZva2UoaW50ZXJjZXB0b3IpCisg
ICAgICApOworICAgIH0pOworCisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgZnVuY3Rpb24KKyAg
ICAgKiBAbmFtZSBuZy4kaHR0cAorICAgICAqIEByZXF1aXJlcyAkaHR0cEJhY2tlbmQKKyAgICAg
KiBAcmVxdWlyZXMgJGJyb3dzZXIKKyAgICAgKiBAcmVxdWlyZXMgJGNhY2hlRmFjdG9yeQorICAg
ICAqIEByZXF1aXJlcyAkcm9vdFNjb3BlCisgICAgICogQHJlcXVpcmVzICRxCisgICAgICogQHJl
cXVpcmVzICRpbmplY3RvcgorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogVGhl
IGAkaHR0cGAgc2VydmljZSBpcyBhIGNvcmUgQW5ndWxhciBzZXJ2aWNlIHRoYXQgZmFjaWxpdGF0
ZXMgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSByZW1vdGUKKyAgICAgKiBIVFRQIHNlcnZlcnMgdmlh
IHRoZSBicm93c2VyJ3Mge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL3ht
bGh0dHByZXF1ZXN0CisgICAgICogWE1MSHR0cFJlcXVlc3R9IG9iamVjdCBvciB2aWEge0BsaW5r
IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSlNPTlAgSlNPTlB9LgorICAgICAqCisgICAg
ICogRm9yIHVuaXQgdGVzdGluZyBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgYCRodHRwYCBzZXJ2aWNl
LCBzZWUKKyAgICAgKiB7QGxpbmsgbmdNb2NrLiRodHRwQmFja2VuZCAkaHR0cEJhY2tlbmQgbW9j
a30uCisgICAgICoKKyAgICAgKiBGb3IgYSBoaWdoZXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIHBs
ZWFzZSBjaGVjayBvdXQgdGhlIHtAbGluayBuZ1Jlc291cmNlLiRyZXNvdXJjZQorICAgICAqICRy
ZXNvdXJjZX0gc2VydmljZS4KKyAgICAgKgorICAgICAqIFRoZSAkaHR0cCBBUEkgaXMgYmFzZWQg
b24gdGhlIHtAbGluayBuZy4kcSBkZWZlcnJlZC9wcm9taXNlIEFQSXN9IGV4cG9zZWQgYnkKKyAg
ICAgKiB0aGUgJHEgc2VydmljZS4gV2hpbGUgZm9yIHNpbXBsZSB1c2FnZSBwYXR0ZXJucyB0aGlz
IGRvZXNuJ3QgbWF0dGVyIG11Y2gsIGZvciBhZHZhbmNlZCB1c2FnZQorICAgICAqIGl0IGlzIGlt
cG9ydGFudCB0byBmYW1pbGlhcml6ZSB5b3Vyc2VsZiB3aXRoIHRoZXNlIEFQSXMgYW5kIHRoZSBn
dWFyYW50ZWVzIHRoZXkgcHJvdmlkZS4KKyAgICAgKgorICAgICAqCisgICAgICogIyBHZW5lcmFs
IHVzYWdlCisgICAgICogVGhlIGAkaHR0cGAgc2VydmljZSBpcyBhIGZ1bmN0aW9uIHdoaWNoIHRh
a2VzIGEgc2luZ2xlIGFyZ3VtZW50IOKAlCBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IOKAlAorICAg
ICAqIHRoYXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBhbiBIVFRQIHJlcXVlc3QgYW5kIHJldHVybnMg
IGEge0BsaW5rIG5nLiRxIHByb21pc2V9CisgICAgICogd2l0aCB0d28gJGh0dHAgc3BlY2lmaWMg
bWV0aG9kczogYHN1Y2Nlc3NgIGFuZCBgZXJyb3JgLgorICAgICAqCisgICAgICogPHByZT4KKyAg
ICAgKiAgICRodHRwKHttZXRob2Q6ICdHRVQnLCB1cmw6ICcvc29tZVVybCd9KS4KKyAgICAgKiAg
ICAgc3VjY2VzcyhmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykgeworICAg
ICAqICAgICAgIC8vIHRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkK
KyAgICAgKiAgICAgICAvLyB3aGVuIHRoZSByZXNwb25zZSBpcyBhdmFpbGFibGUKKyAgICAgKiAg
ICAgfSkuCisgICAgICogICAgIGVycm9yKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycywg
Y29uZmlnKSB7CisgICAgICogICAgICAgLy8gY2FsbGVkIGFzeW5jaHJvbm91c2x5IGlmIGFuIGVy
cm9yIG9jY3VycworICAgICAqICAgICAgIC8vIG9yIHNlcnZlciByZXR1cm5zIHJlc3BvbnNlIHdp
dGggYW4gZXJyb3Igc3RhdHVzLgorICAgICAqICAgICB9KTsKKyAgICAgKiA8L3ByZT4KKyAgICAg
KgorICAgICAqIFNpbmNlIHRoZSByZXR1cm5lZCB2YWx1ZSBvZiBjYWxsaW5nIHRoZSAkaHR0cCBm
dW5jdGlvbiBpcyBhIGBwcm9taXNlYCwgeW91IGNhbiBhbHNvIHVzZQorICAgICAqIHRoZSBgdGhl
bmAgbWV0aG9kIHRvIHJlZ2lzdGVyIGNhbGxiYWNrcywgYW5kIHRoZXNlIGNhbGxiYWNrcyB3aWxs
IHJlY2VpdmUgYSBzaW5nbGUgYXJndW1lbnQg4oCTCisgICAgICogYW4gb2JqZWN0IHJlcHJlc2Vu
dGluZyB0aGUgcmVzcG9uc2UuIFNlZSB0aGUgQVBJIHNpZ25hdHVyZSBhbmQgdHlwZSBpbmZvIGJl
bG93IGZvciBtb3JlCisgICAgICogZGV0YWlscy4KKyAgICAgKgorICAgICAqIEEgcmVzcG9uc2Ug
c3RhdHVzIGNvZGUgYmV0d2VlbiAyMDAgYW5kIDI5OSBpcyBjb25zaWRlcmVkIGEgc3VjY2VzcyBz
dGF0dXMgYW5kCisgICAgICogd2lsbCByZXN1bHQgaW4gdGhlIHN1Y2Nlc3MgY2FsbGJhY2sgYmVp
bmcgY2FsbGVkLiBOb3RlIHRoYXQgaWYgdGhlIHJlc3BvbnNlIGlzIGEgcmVkaXJlY3QsCisgICAg
ICogWE1MSHR0cFJlcXVlc3Qgd2lsbCB0cmFuc3BhcmVudGx5IGZvbGxvdyBpdCwgbWVhbmluZyB0
aGF0IHRoZSBlcnJvciBjYWxsYmFjayB3aWxsIG5vdCBiZQorICAgICAqIGNhbGxlZCBmb3Igc3Vj
aCByZXNwb25zZXMuCisgICAgICoKKyAgICAgKiAjIFNob3J0Y3V0IG1ldGhvZHMKKyAgICAgKgor
ICAgICAqIFNpbmNlIGFsbCBpbnZvY2F0aW9ucyBvZiB0aGUgJGh0dHAgc2VydmljZSByZXF1aXJl
IHBhc3NpbmcgaW4gYW4gSFRUUCBtZXRob2QgYW5kIFVSTCwgYW5kCisgICAgICogUE9TVC9QVVQg
cmVxdWVzdHMgcmVxdWlyZSByZXF1ZXN0IGRhdGEgdG8gYmUgcHJvdmlkZWQgYXMgd2VsbCwgc2hv
cnRjdXQgbWV0aG9kcworICAgICAqIHdlcmUgY3JlYXRlZDoKKyAgICAgKgorICAgICAqIDxwcmU+
CisgICAgICogICAkaHR0cC5nZXQoJy9zb21lVXJsJykuc3VjY2VzcyhzdWNjZXNzQ2FsbGJhY2sp
OworICAgICAqICAgJGh0dHAucG9zdCgnL3NvbWVVcmwnLCBkYXRhKS5zdWNjZXNzKHN1Y2Nlc3ND
YWxsYmFjayk7CisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiBDb21wbGV0ZSBsaXN0IG9m
IHNob3J0Y3V0IG1ldGhvZHM6CisgICAgICoKKyAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNnZXQg
JGh0dHAuZ2V0fQorICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI2hlYWQgJGh0dHAuaGVhZH0KKyAg
ICAgKiAtIHtAbGluayBuZy4kaHR0cCNwb3N0ICRodHRwLnBvc3R9CisgICAgICogLSB7QGxpbmsg
bmcuJGh0dHAjcHV0ICRodHRwLnB1dH0KKyAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNkZWxldGUg
JGh0dHAuZGVsZXRlfQorICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI2pzb25wICRodHRwLmpzb25w
fQorICAgICAqCisgICAgICoKKyAgICAgKiAjIFNldHRpbmcgSFRUUCBIZWFkZXJzCisgICAgICoK
KyAgICAgKiBUaGUgJGh0dHAgc2VydmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIGNlcnRhaW4g
SFRUUCBoZWFkZXJzIHRvIGFsbCByZXF1ZXN0cy4gVGhlc2UgZGVmYXVsdHMKKyAgICAgKiBjYW4g
YmUgZnVsbHkgY29uZmlndXJlZCBieSBhY2Nlc3NpbmcgdGhlIGAkaHR0cFByb3ZpZGVyLmRlZmF1
bHRzLmhlYWRlcnNgIGNvbmZpZ3VyYXRpb24KKyAgICAgKiBvYmplY3QsIHdoaWNoIGN1cnJlbnRs
eSBjb250YWlucyB0aGlzIGRlZmF1bHQgY29uZmlndXJhdGlvbjoKKyAgICAgKgorICAgICAqIC0g
YCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVhZGVycy5jb21tb25gIChoZWFkZXJzIHRoYXQgYXJl
IGNvbW1vbiBmb3IgYWxsIHJlcXVlc3RzKToKKyAgICAgKiAgIC0gYEFjY2VwdDogYXBwbGljYXRp
b24vanNvbiwgdGV4dC9wbGFpbiwgKiAvICpgCisgICAgICogICAtIGBYLVJlcXVlc3RlZC1XaXRo
OiBYTUxIdHRwUmVxdWVzdGAKKyAgICAgKiAtIGAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzLmhlYWRl
cnMucG9zdGA6IChoZWFkZXIgZGVmYXVsdHMgZm9yIFBPU1QgcmVxdWVzdHMpCisgICAgICogICAt
IGBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25gCisgICAgICogLSBgJGh0dHBQcm92aWRl
ci5kZWZhdWx0cy5oZWFkZXJzLnB1dGAgKGhlYWRlciBkZWZhdWx0cyBmb3IgUFVUIHJlcXVlc3Rz
KQorICAgICAqICAgLSBgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uYAorICAgICAqCisg
ICAgICogVG8gYWRkIG9yIG92ZXJ3cml0ZSB0aGVzZSBkZWZhdWx0cywgc2ltcGx5IGFkZCBvciBy
ZW1vdmUgYSBwcm9wZXJ0eSBmcm9tIHRoZXNlIGNvbmZpZ3VyYXRpb24KKyAgICAgKiBvYmplY3Rz
LiBUbyBhZGQgaGVhZGVycyBmb3IgYW4gSFRUUCBtZXRob2Qgb3RoZXIgdGhhbiBQT1NUIG9yIFBV
VCwgc2ltcGx5IGFkZCBhIG5ldyBvYmplY3QKKyAgICAgKiB3aXRoIHRoZSBsb3dlcmNhc2VkIEhU
VFAgbWV0aG9kIG5hbWUgYXMgdGhlIGtleSwgZS5nLgorICAgICAqIGAkaHR0cFByb3ZpZGVyLmRl
ZmF1bHRzLmhlYWRlcnMuZ2V0WydNeS1IZWFkZXInXT0ndmFsdWUnYC4KKyAgICAgKgorICAgICAq
IEFkZGl0aW9uYWxseSwgdGhlIGRlZmF1bHRzIGNhbiBiZSBzZXQgYXQgcnVudGltZSB2aWEgdGhl
IGAkaHR0cC5kZWZhdWx0c2Agb2JqZWN0IGluIHRoZSBzYW1lCisgICAgICogZmFzaGlvbi4KKyAg
ICAgKgorICAgICAqCisgICAgICogIyBUcmFuc2Zvcm1pbmcgUmVxdWVzdHMgYW5kIFJlc3BvbnNl
cworICAgICAqCisgICAgICogQm90aCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzIGNhbiBiZSB0cmFu
c2Zvcm1lZCB1c2luZyB0cmFuc2Zvcm0gZnVuY3Rpb25zLiBCeSBkZWZhdWx0LCBBbmd1bGFyCisg
ICAgICogYXBwbGllcyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnM6CisgICAgICoKKyAgICAgKiBSZXF1
ZXN0IHRyYW5zZm9ybWF0aW9uczoKKyAgICAgKgorICAgICAqIC0gSWYgdGhlIGBkYXRhYCBwcm9w
ZXJ0eSBvZiB0aGUgcmVxdWVzdCBjb25maWd1cmF0aW9uIG9iamVjdCBjb250YWlucyBhbiBvYmpl
Y3QsIHNlcmlhbGl6ZSBpdCBpbnRvCisgICAgICogICBKU09OIGZvcm1hdC4KKyAgICAgKgorICAg
ICAqIFJlc3BvbnNlIHRyYW5zZm9ybWF0aW9uczoKKyAgICAgKgorICAgICAqICAtIElmIFhTUkYg
cHJlZml4IGlzIGRldGVjdGVkLCBzdHJpcCBpdCAoc2VlIFNlY3VyaXR5IENvbnNpZGVyYXRpb25z
IHNlY3Rpb24gYmVsb3cpLgorICAgICAqICAtIElmIEpTT04gcmVzcG9uc2UgaXMgZGV0ZWN0ZWQs
IGRlc2VyaWFsaXplIGl0IHVzaW5nIGEgSlNPTiBwYXJzZXIuCisgICAgICoKKyAgICAgKiBUbyBn
bG9iYWxseSBhdWdtZW50IG9yIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHRyYW5zZm9ybXMsIG1vZGlm
eSB0aGUgYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMudHJhbnNmb3JtUmVxdWVzdGAgYW5kCisgICAg
ICogYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMudHJhbnNmb3JtUmVzcG9uc2VgIHByb3BlcnRpZXMu
IFRoZXNlIHByb3BlcnRpZXMgYXJlIGJ5IGRlZmF1bHQgYW4KKyAgICAgKiBhcnJheSBvZiB0cmFu
c2Zvcm0gZnVuY3Rpb25zLCB3aGljaCBhbGxvd3MgeW91IHRvIGBwdXNoYCBvciBgdW5zaGlmdGAg
YSBuZXcgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gaW50byB0aGUKKyAgICAgKiB0cmFuc2Zvcm1h
dGlvbiBjaGFpbi4gWW91IGNhbiBhbHNvIGRlY2lkZSB0byBjb21wbGV0ZWx5IG92ZXJyaWRlIGFu
eSBkZWZhdWx0IHRyYW5zZm9ybWF0aW9ucyBieSBhc3NpZ25pbmcgeW91cgorICAgICAqIHRyYW5z
Zm9ybWF0aW9uIGZ1bmN0aW9ucyB0byB0aGVzZSBwcm9wZXJ0aWVzIGRpcmVjdGx5IHdpdGhvdXQg
dGhlIGFycmF5IHdyYXBwZXIuCisgICAgICoKKyAgICAgKiBTaW1pbGFybHksIHRvIGxvY2FsbHkg
b3ZlcnJpZGUgdGhlIHJlcXVlc3QvcmVzcG9uc2UgdHJhbnNmb3JtcywgYXVnbWVudCB0aGUgYHRy
YW5zZm9ybVJlcXVlc3RgIGFuZC9vcgorICAgICAqIGB0cmFuc2Zvcm1SZXNwb25zZWAgcHJvcGVy
dGllcyBvZiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgcGFzc2VkIGludG8gYCRodHRwYC4KKyAg
ICAgKgorICAgICAqCisgICAgICogIyBDYWNoaW5nCisgICAgICoKKyAgICAgKiBUbyBlbmFibGUg
Y2FjaGluZywgc2V0IHRoZSBjb25maWd1cmF0aW9uIHByb3BlcnR5IGBjYWNoZWAgdG8gYHRydWVg
LiBXaGVuIHRoZSBjYWNoZSBpcworICAgICAqIGVuYWJsZWQsIGAkaHR0cGAgc3RvcmVzIHRoZSBy
ZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gbG9jYWwgY2FjaGUuIE5leHQgdGltZSB0aGUKKyAg
ICAgKiByZXNwb25zZSBpcyBzZXJ2ZWQgZnJvbSB0aGUgY2FjaGUgd2l0aG91dCBzZW5kaW5nIGEg
cmVxdWVzdCB0byB0aGUgc2VydmVyLgorICAgICAqCisgICAgICogTm90ZSB0aGF0IGV2ZW4gaWYg
dGhlIHJlc3BvbnNlIGlzIHNlcnZlZCBmcm9tIGNhY2hlLCBkZWxpdmVyeSBvZiB0aGUgZGF0YSBp
cyBhc3luY2hyb25vdXMgaW4KKyAgICAgKiB0aGUgc2FtZSB3YXkgdGhhdCByZWFsIHJlcXVlc3Rz
IGFyZS4KKyAgICAgKgorICAgICAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBHRVQgcmVxdWVzdHMg
Zm9yIHRoZSBzYW1lIFVSTCB0aGF0IHNob3VsZCBiZSBjYWNoZWQgdXNpbmcgdGhlIHNhbWUKKyAg
ICAgKiBjYWNoZSwgYnV0IHRoZSBjYWNoZSBpcyBub3QgcG9wdWxhdGVkIHlldCwgb25seSBvbmUg
cmVxdWVzdCB0byB0aGUgc2VydmVyIHdpbGwgYmUgbWFkZSBhbmQKKyAgICAgKiB0aGUgcmVtYWlu
aW5nIHJlcXVlc3RzIHdpbGwgYmUgZnVsZmlsbGVkIHVzaW5nIHRoZSByZXNwb25zZSBmcm9tIHRo
ZSBmaXJzdCByZXF1ZXN0LgorICAgICAqCisgICAgICoKKyAgICAgKiAjIFJlc3BvbnNlIGludGVy
Y2VwdG9ycworICAgICAqCisgICAgICogQmVmb3JlIHlvdSBzdGFydCBjcmVhdGluZyBpbnRlcmNl
cHRvcnMsIGJlIHN1cmUgdG8gdW5kZXJzdGFuZCB0aGUKKyAgICAgKiB7QGxpbmsgbmcuJHEgJHEg
YW5kIGRlZmVycmVkL3Byb21pc2UgQVBJc30uCisgICAgICoKKyAgICAgKiBGb3IgcHVycG9zZXMg
b2YgZ2xvYmFsIGVycm9yIGhhbmRsaW5nLCBhdXRoZW50aWNhdGlvbiBvciBhbnkga2luZCBvZiBz
eW5jaHJvbm91cyBvcgorICAgICAqIGFzeW5jaHJvbm91cyBwcmVwcm9jZXNzaW5nIG9mIHJlY2Vp
dmVkIHJlc3BvbnNlcywgaXQgaXMgZGVzaXJhYmxlIHRvIGJlIGFibGUgdG8gaW50ZXJjZXB0Cisg
ICAgICogcmVzcG9uc2VzIGZvciBodHRwIHJlcXVlc3RzIGJlZm9yZSB0aGV5IGFyZSBoYW5kZWQg
b3ZlciB0byB0aGUgYXBwbGljYXRpb24gY29kZSB0aGF0CisgICAgICogaW5pdGlhdGVkIHRoZXNl
IHJlcXVlc3RzLiBUaGUgcmVzcG9uc2UgaW50ZXJjZXB0b3JzIGxldmVyYWdlIHRoZSB7QGxpbmsg
bmcuJHEKKyAgICAgKiBwcm9taXNlIGFwaXN9IHRvIGZ1bGZpbCB0aGlzIG5lZWQgZm9yIGJvdGgg
c3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBwcmVwcm9jZXNzaW5nLgorICAgICAqCisgICAg
ICogVGhlIGludGVyY2VwdG9ycyBhcmUgc2VydmljZSBmYWN0b3JpZXMgdGhhdCBhcmUgcmVnaXN0
ZXJlZCB3aXRoIHRoZSAkaHR0cFByb3ZpZGVyIGJ5CisgICAgICogYWRkaW5nIHRoZW0gdG8gdGhl
IGAkaHR0cFByb3ZpZGVyLnJlc3BvbnNlSW50ZXJjZXB0b3JzYCBhcnJheS4gVGhlIGZhY3Rvcnkg
aXMgY2FsbGVkIGFuZAorICAgICAqIGluamVjdGVkIHdpdGggZGVwZW5kZW5jaWVzIChpZiBzcGVj
aWZpZWQpIGFuZCByZXR1cm5zIHRoZSBpbnRlcmNlcHRvciAg4oCUIGEgZnVuY3Rpb24gdGhhdAor
ICAgICAqIHRha2VzIGEge0BsaW5rIG5nLiRxIHByb21pc2V9IGFuZCByZXR1cm5zIHRoZSBvcmln
aW5hbCBvciBhIG5ldyBwcm9taXNlLgorICAgICAqCisgICAgICogPHByZT4KKyAgICAgKiAgIC8v
IHJlZ2lzdGVyIHRoZSBpbnRlcmNlcHRvciBhcyBhIHNlcnZpY2UKKyAgICAgKiAgICRwcm92aWRl
LmZhY3RvcnkoJ215SHR0cEludGVyY2VwdG9yJywgZnVuY3Rpb24oJHEsIGRlcGVuZGVuY3kxLCBk
ZXBlbmRlbmN5MikgeworICAgICAqICAgICByZXR1cm4gZnVuY3Rpb24ocHJvbWlzZSkgeworICAg
ICAqICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAg
KiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyBvbiBzdWNjZXNzCisgICAgICogICAgICAgfSwgZnVu
Y3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyBvbiBlcnJv
cgorICAgICAqICAgICAgICAgaWYgKGNhblJlY292ZXIocmVzcG9uc2UpKSB7CisgICAgICogICAg
ICAgICAgIHJldHVybiByZXNwb25zZU9yTmV3UHJvbWlzZQorICAgICAqICAgICAgICAgfQorICAg
ICAqICAgICAgICAgcmV0dXJuICRxLnJlamVjdChyZXNwb25zZSk7CisgICAgICogICAgICAgfSk7
CisgICAgICogICAgIH0KKyAgICAgKiAgIH0pOworICAgICAqCisgICAgICogICAkaHR0cFByb3Zp
ZGVyLnJlc3BvbnNlSW50ZXJjZXB0b3JzLnB1c2goJ215SHR0cEludGVyY2VwdG9yJyk7CisgICAg
ICoKKyAgICAgKgorICAgICAqICAgLy8gcmVnaXN0ZXIgdGhlIGludGVyY2VwdG9yIHZpYSBhbiBh
bm9ueW1vdXMgZmFjdG9yeQorICAgICAqICAgJGh0dHBQcm92aWRlci5yZXNwb25zZUludGVyY2Vw
dG9ycy5wdXNoKGZ1bmN0aW9uKCRxLCBkZXBlbmRlbmN5MSwgZGVwZW5kZW5jeTIpIHsKKyAgICAg
KiAgICAgcmV0dXJuIGZ1bmN0aW9uKHByb21pc2UpIHsKKyAgICAgKiAgICAgICAvLyBzYW1lIGFz
IGFib3ZlCisgICAgICogICAgIH0KKyAgICAgKiAgIH0pOworICAgICAqIDwvcHJlPgorICAgICAq
CisgICAgICoKKyAgICAgKiAjIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zCisgICAgICoKKyAgICAg
KiBXaGVuIGRlc2lnbmluZyB3ZWIgYXBwbGljYXRpb25zLCBjb25zaWRlciBzZWN1cml0eSB0aHJl
YXRzIGZyb206CisgICAgICoKKyAgICAgKiAtIHtAbGluayBodHRwOi8vaGFhY2tlZC5jb20vYXJj
aGl2ZS8yMDA4LzExLzIwL2FuYXRvbXktb2YtYS1zdWJ0bGUtanNvbi12dWxuZXJhYmlsaXR5LmFz
cHgKKyAgICAgKiAgIEpTT04gdnVsbmVyYWJpbGl0eX0KKyAgICAgKiAtIHtAbGluayBodHRwOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL0Nyb3NzLXNpdGVfcmVxdWVzdF9mb3JnZXJ5IFhTUkZ9Cisg
ICAgICoKKyAgICAgKiBCb3RoIHNlcnZlciBhbmQgdGhlIGNsaWVudCBtdXN0IGNvb3BlcmF0ZSBp
biBvcmRlciB0byBlbGltaW5hdGUgdGhlc2UgdGhyZWF0cy4gQW5ndWxhciBjb21lcworICAgICAq
IHByZS1jb25maWd1cmVkIHdpdGggc3RyYXRlZ2llcyB0aGF0IGFkZHJlc3MgdGhlc2UgaXNzdWVz
LCBidXQgZm9yIHRoaXMgdG8gd29yayBiYWNrZW5kIHNlcnZlcgorICAgICAqIGNvb3BlcmF0aW9u
IGlzIHJlcXVpcmVkLgorICAgICAqCisgICAgICogIyMgSlNPTiBWdWxuZXJhYmlsaXR5IFByb3Rl
Y3Rpb24KKyAgICAgKgorICAgICAqIEEge0BsaW5rIGh0dHA6Ly9oYWFja2VkLmNvbS9hcmNoaXZl
LzIwMDgvMTEvMjAvYW5hdG9teS1vZi1hLXN1YnRsZS1qc29uLXZ1bG5lcmFiaWxpdHkuYXNweAor
ICAgICAqIEpTT04gdnVsbmVyYWJpbGl0eX0gYWxsb3dzIHRoaXJkIHBhcnR5IHdlYnNpdGUgdG8g
dHVybiB5b3VyIEpTT04gcmVzb3VyY2UgVVJMIGludG8KKyAgICAgKiB7QGxpbmsgaHR0cDovL2Vu
Lndpa2lwZWRpYS5vcmcvd2lraS9KU09OUCBKU09OUH0gcmVxdWVzdCB1bmRlciBzb21lIGNvbmRp
dGlvbnMuIFRvCisgICAgICogY291bnRlciB0aGlzIHlvdXIgc2VydmVyIGNhbiBwcmVmaXggYWxs
IEpTT04gcmVxdWVzdHMgd2l0aCBmb2xsb3dpbmcgc3RyaW5nIGAiKV19JyxcbiJgLgorICAgICAq
IEFuZ3VsYXIgd2lsbCBhdXRvbWF0aWNhbGx5IHN0cmlwIHRoZSBwcmVmaXggYmVmb3JlIHByb2Nl
c3NpbmcgaXQgYXMgSlNPTi4KKyAgICAgKgorICAgICAqIEZvciBleGFtcGxlIGlmIHlvdXIgc2Vy
dmVyIG5lZWRzIHRvIHJldHVybjoKKyAgICAgKiA8cHJlPgorICAgICAqIFsnb25lJywndHdvJ10K
KyAgICAgKiA8L3ByZT4KKyAgICAgKgorICAgICAqIHdoaWNoIGlzIHZ1bG5lcmFibGUgdG8gYXR0
YWNrLCB5b3VyIHNlcnZlciBjYW4gcmV0dXJuOgorICAgICAqIDxwcmU+CisgICAgICogKV19JywK
KyAgICAgKiBbJ29uZScsJ3R3byddCisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiBBbmd1
bGFyIHdpbGwgc3RyaXAgdGhlIHByZWZpeCwgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIEpTT04uCisg
ICAgICoKKyAgICAgKgorICAgICAqICMjIENyb3NzIFNpdGUgUmVxdWVzdCBGb3JnZXJ5IChYU1JG
KSBQcm90ZWN0aW9uCisgICAgICoKKyAgICAgKiB7QGxpbmsgaHR0cDovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9Dcm9zcy1zaXRlX3JlcXVlc3RfZm9yZ2VyeSBYU1JGfSBpcyBhIHRlY2huaXF1ZSBi
eSB3aGljaAorICAgICAqIGFuIHVuYXV0aG9yaXplZCBzaXRlIGNhbiBnYWluIHlvdXIgdXNlcidz
IHByaXZhdGUgZGF0YS4gQW5ndWxhciBwcm92aWRlcyBhIG1lY2hhbmlzbQorICAgICAqIHRvIGNv
dW50ZXIgWFNSRi4gV2hlbiBwZXJmb3JtaW5nIFhIUiByZXF1ZXN0cywgdGhlICRodHRwIHNlcnZp
Y2UgcmVhZHMgYSB0b2tlbiBmcm9tIGEgY29va2llCisgICAgICogY2FsbGVkIGBYU1JGLVRPS0VO
YCBhbmQgc2V0cyBpdCBhcyB0aGUgSFRUUCBoZWFkZXIgYFgtWFNSRi1UT0tFTmAuIFNpbmNlIG9u
bHkgSmF2YVNjcmlwdCB0aGF0CisgICAgICogcnVucyBvbiB5b3VyIGRvbWFpbiBjb3VsZCByZWFk
IHRoZSBjb29raWUsIHlvdXIgc2VydmVyIGNhbiBiZSBhc3N1cmVkIHRoYXQgdGhlIFhIUiBjYW1l
IGZyb20KKyAgICAgKiBKYXZhU2NyaXB0IHJ1bm5pbmcgb24geW91ciBkb21haW4uCisgICAgICoK
KyAgICAgKiBUbyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzLCB5b3VyIHNlcnZlciBuZWVkcyB0byBz
ZXQgYSB0b2tlbiBpbiBhIEphdmFTY3JpcHQgcmVhZGFibGUgc2Vzc2lvbgorICAgICAqIGNvb2tp
ZSBjYWxsZWQgYFhTUkYtVE9LRU5gIG9uIHRoZSBmaXJzdCBIVFRQIEdFVCByZXF1ZXN0LiBPbiBz
dWJzZXF1ZW50IFhIUiByZXF1ZXN0cyB0aGUKKyAgICAgKiBzZXJ2ZXIgY2FuIHZlcmlmeSB0aGF0
IHRoZSBjb29raWUgbWF0Y2hlcyBgWC1YU1JGLVRPS0VOYCBIVFRQIGhlYWRlciwgYW5kIHRoZXJl
Zm9yZSBiZSBzdXJlCisgICAgICogdGhhdCBvbmx5IEphdmFTY3JpcHQgcnVubmluZyBvbiB5b3Vy
IGRvbWFpbiBjb3VsZCBoYXZlIHNlbnQgdGhlIHJlcXVlc3QuIFRoZSB0b2tlbiBtdXN0IGJlCisg
ICAgICogdW5pcXVlIGZvciBlYWNoIHVzZXIgYW5kIG11c3QgYmUgdmVyaWZpYWJsZSBieSB0aGUg
c2VydmVyICh0byBwcmV2ZW50IHRoZSBKYXZhU2NyaXB0IGZyb20gbWFraW5nCisgICAgICogdXAg
aXRzIG93biB0b2tlbnMpLiBXZSByZWNvbW1lbmQgdGhhdCB0aGUgdG9rZW4gaXMgYSBkaWdlc3Qg
b2YgeW91ciBzaXRlJ3MgYXV0aGVudGljYXRpb24KKyAgICAgKiBjb29raWUgd2l0aCBhIHtAbGlu
ayBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TYWx0XyhjcnlwdG9ncmFwaHkpIHNhbHR9
IGZvciBhZGRlZCBzZWN1cml0eS4KKyAgICAgKgorICAgICAqCisgICAgICogQHBhcmFtIHtvYmpl
Y3R9IGNvbmZpZyBPYmplY3QgZGVzY3JpYmluZyB0aGUgcmVxdWVzdCB0byBiZSBtYWRlIGFuZCBo
b3cgaXQgc2hvdWxkIGJlCisgICAgICogICAgcHJvY2Vzc2VkLiBUaGUgb2JqZWN0IGhhcyBmb2xs
b3dpbmcgcHJvcGVydGllczoKKyAgICAgKgorICAgICAqICAgIC0gKiptZXRob2QqKiDigJMgYHtz
dHJpbmd9YCDigJMgSFRUUCBtZXRob2QgKGUuZy4gJ0dFVCcsICdQT1NUJywgZXRjKQorICAgICAq
ICAgIC0gKip1cmwqKiDigJMgYHtzdHJpbmd9YCDigJMgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJM
IG9mIHRoZSByZXNvdXJjZSB0aGF0IGlzIGJlaW5nIHJlcXVlc3RlZC4KKyAgICAgKiAgICAtICoq
cGFyYW1zKiog4oCTIGB7T2JqZWN0LjxzdHJpbmd8T2JqZWN0Pn1gIOKAkyBNYXAgb2Ygc3RyaW5n
cyBvciBvYmplY3RzIHdoaWNoIHdpbGwgYmUgdHVybmVkIHRvCisgICAgICogICAgICBgP2tleTE9
dmFsdWUxJmtleTI9dmFsdWUyYCBhZnRlciB0aGUgdXJsLiBJZiB0aGUgdmFsdWUgaXMgbm90IGEg
c3RyaW5nLCBpdCB3aWxsIGJlIEpTT05pZmllZC4KKyAgICAgKiAgICAtICoqZGF0YSoqIOKAkyBg
e3N0cmluZ3xPYmplY3R9YCDigJMgRGF0YSB0byBiZSBzZW50IGFzIHRoZSByZXF1ZXN0IG1lc3Nh
Z2UgZGF0YS4KKyAgICAgKiAgICAtICoqaGVhZGVycyoqIOKAkyBge09iamVjdH1gIOKAkyBNYXAg
b2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgSFRUUCBoZWFkZXJzIHRvIHNlbmQgdG8gdGhlIHNlcnZl
ci4KKyAgICAgKiAgICAtICoqdHJhbnNmb3JtUmVxdWVzdCoqIOKAkyBge2Z1bmN0aW9uKGRhdGEs
IGhlYWRlcnNHZXR0ZXIpfEFycmF5LjxmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyKT59YCDi
gJMKKyAgICAgKiAgICAgIHRyYW5zZm9ybSBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiBzdWNoIGZ1
bmN0aW9ucy4gVGhlIHRyYW5zZm9ybSBmdW5jdGlvbiB0YWtlcyB0aGUgaHR0cAorICAgICAqICAg
ICAgcmVxdWVzdCBib2R5IGFuZCBoZWFkZXJzIGFuZCByZXR1cm5zIGl0cyB0cmFuc2Zvcm1lZCAo
dHlwaWNhbGx5IHNlcmlhbGl6ZWQpIHZlcnNpb24uCisgICAgICogICAgLSAqKnRyYW5zZm9ybVJl
c3BvbnNlKiog4oCTIGB7ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcil8QXJyYXkuPGZ1bmN0
aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpPn1gIOKAkworICAgICAqICAgICAgdHJhbnNmb3JtIGZ1
bmN0aW9uIG9yIGFuIGFycmF5IG9mIHN1Y2ggZnVuY3Rpb25zLiBUaGUgdHJhbnNmb3JtIGZ1bmN0
aW9uIHRha2VzIHRoZSBodHRwCisgICAgICogICAgICByZXNwb25zZSBib2R5IGFuZCBoZWFkZXJz
IGFuZCByZXR1cm5zIGl0cyB0cmFuc2Zvcm1lZCAodHlwaWNhbGx5IGRlc2VyaWFsaXplZCkgdmVy
c2lvbi4KKyAgICAgKiAgICAtICoqY2FjaGUqKiDigJMgYHtib29sZWFufENhY2hlfWAg4oCTIElm
IHRydWUsIGEgZGVmYXVsdCAkaHR0cCBjYWNoZSB3aWxsIGJlIHVzZWQgdG8gY2FjaGUgdGhlCisg
ICAgICogICAgICBHRVQgcmVxdWVzdCwgb3RoZXJ3aXNlIGlmIGEgY2FjaGUgaW5zdGFuY2UgYnVp
bHQgd2l0aAorICAgICAqICAgICAge0BsaW5rIG5nLiRjYWNoZUZhY3RvcnkgJGNhY2hlRmFjdG9y
eX0sIHRoaXMgY2FjaGUgd2lsbCBiZSB1c2VkIGZvcgorICAgICAqICAgICAgY2FjaGluZy4KKyAg
ICAgKiAgICAtICoqdGltZW91dCoqIOKAkyBge251bWJlcn1gIOKAkyB0aW1lb3V0IGluIG1pbGxp
c2Vjb25kcy4KKyAgICAgKiAgICAtICoqd2l0aENyZWRlbnRpYWxzKiogLSBge2Jvb2xlYW59YCAt
IHdoZXRoZXIgdG8gdG8gc2V0IHRoZSBgd2l0aENyZWRlbnRpYWxzYCBmbGFnIG9uIHRoZQorICAg
ICAqICAgICAgWEhSIG9iamVjdC4gU2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi9odHRwX2FjY2Vzc19jb250cm9sI3NlY3Rpb25fNQorICAgICAqICAgICAgcmVxdWVz
dHMgd2l0aCBjcmVkZW50aWFsc30gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAg
KiBAcmV0dXJucyB7SHR0cFByb21pc2V9IFJldHVybnMgYSB7QGxpbmsgbmcuJHEgcHJvbWlzZX0g
b2JqZWN0IHdpdGggdGhlCisgICAgICogICBzdGFuZGFyZCBgdGhlbmAgbWV0aG9kIGFuZCB0d28g
aHR0cCBzcGVjaWZpYyBtZXRob2RzOiBgc3VjY2Vzc2AgYW5kIGBlcnJvcmAuIFRoZSBgdGhlbmAK
KyAgICAgKiAgIG1ldGhvZCB0YWtlcyB0d28gYXJndW1lbnRzIGEgc3VjY2VzcyBhbmQgYW4gZXJy
b3IgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2l0aCBhCisgICAgICogICByZXNwb25z
ZSBvYmplY3QuIFRoZSBgc3VjY2Vzc2AgYW5kIGBlcnJvcmAgbWV0aG9kcyB0YWtlIGEgc2luZ2xl
IGFyZ3VtZW50IC0gYSBmdW5jdGlvbiB0aGF0CisgICAgICogICB3aWxsIGJlIGNhbGxlZCB3aGVu
IHRoZSByZXF1ZXN0IHN1Y2NlZWRzIG9yIGZhaWxzIHJlc3BlY3RpdmVseS4gVGhlIGFyZ3VtZW50
cyBwYXNzZWQgaW50bworICAgICAqICAgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZXN0cnVjdHVyZWQg
cmVwcmVzZW50YXRpb24gb2YgdGhlIHJlc3BvbnNlIG9iamVjdCBwYXNzZWQgaW50byB0aGUKKyAg
ICAgKiAgIGB0aGVuYCBtZXRob2QuIFRoZSByZXNwb25zZSBvYmplY3QgaGFzIHRoZXNlIHByb3Bl
cnRpZXM6CisgICAgICoKKyAgICAgKiAgIC0gKipkYXRhKiog4oCTIGB7c3RyaW5nfE9iamVjdH1g
IOKAkyBUaGUgcmVzcG9uc2UgYm9keSB0cmFuc2Zvcm1lZCB3aXRoIHRoZSB0cmFuc2Zvcm0gZnVu
Y3Rpb25zLgorICAgICAqICAgLSAqKnN0YXR1cyoqIOKAkyBge251bWJlcn1gIOKAkyBIVFRQIHN0
YXR1cyBjb2RlIG9mIHRoZSByZXNwb25zZS4KKyAgICAgKiAgIC0gKipoZWFkZXJzKiog4oCTIGB7
ZnVuY3Rpb24oW2hlYWRlck5hbWVdKX1gIOKAkyBIZWFkZXIgZ2V0dGVyIGZ1bmN0aW9uLgorICAg
ICAqICAgLSAqKmNvbmZpZyoqIOKAkyBge09iamVjdH1gIOKAkyBUaGUgY29uZmlndXJhdGlvbiBv
YmplY3QgdGhhdCB3YXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcmVxdWVzdC4KKyAgICAgKgorICAg
ICAqIEBwcm9wZXJ0eSB7QXJyYXkuPE9iamVjdD59IHBlbmRpbmdSZXF1ZXN0cyBBcnJheSBvZiBj
b25maWcgb2JqZWN0cyBmb3IgY3VycmVudGx5IHBlbmRpbmcKKyAgICAgKiAgIHJlcXVlc3RzLiBU
aGlzIGlzIHByaW1hcmlseSBtZWFudCB0byBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMu
CisgICAgICoKKyAgICAgKgorICAgICAqIEBleGFtcGxlCisgICAgICA8ZXhhbXBsZT4KKyAgICAg
ICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgICAgPGRpdiBuZy1jb250cm9sbGVy
PSJGZXRjaEN0cmwiPgorICAgICAgICAgICAgPHNlbGVjdCBuZy1tb2RlbD0ibWV0aG9kIj4KKyAg
ICAgICAgICAgICAgPG9wdGlvbj5HRVQ8L29wdGlvbj4KKyAgICAgICAgICAgICAgPG9wdGlvbj5K
U09OUDwvb3B0aW9uPgorICAgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgICAgICA8aW5wdXQg
dHlwZT0idGV4dCIgbmctbW9kZWw9InVybCIgc2l6ZT0iODAiLz4KKyAgICAgICAgICAgIDxidXR0
b24gbmctY2xpY2s9ImZldGNoKCkiPmZldGNoPC9idXR0b24+PGJyPgorICAgICAgICAgICAgPGJ1
dHRvbiBuZy1jbGljaz0idXBkYXRlTW9kZWwoJ0dFVCcsICdodHRwLWhlbGxvLmh0bWwnKSI+U2Ft
cGxlIEdFVDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0idXBkYXRlTW9k
ZWwoJ0pTT05QJywgJ2h0dHA6Ly9hbmd1bGFyanMub3JnL2dyZWV0LnBocD9jYWxsYmFjaz1KU09O
X0NBTExCQUNLJm5hbWU9U3VwZXIlMjBIZXJvJykiPlNhbXBsZSBKU09OUDwvYnV0dG9uPgorICAg
ICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0idXBkYXRlTW9kZWwoJ0pTT05QJywgJ2h0dHA6Ly9h
bmd1bGFyanMub3JnL2RvZXNudGV4aXN0JmNhbGxiYWNrPUpTT05fQ0FMTEJBQ0snKSI+SW52YWxp
ZCBKU09OUDwvYnV0dG9uPgorICAgICAgICAgICAgPHByZT5odHRwIHN0YXR1cyBjb2RlOiB7e3N0
YXR1c319PC9wcmU+CisgICAgICAgICAgICA8cHJlPmh0dHAgcmVzcG9uc2UgZGF0YToge3tkYXRh
fX08L3ByZT4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8Zmls
ZSBuYW1lPSJzY3JpcHQuanMiPgorICAgICAgICAgIGZ1bmN0aW9uIEZldGNoQ3RybCgkc2NvcGUs
ICRodHRwLCAkdGVtcGxhdGVDYWNoZSkgeworICAgICAgICAgICAgJHNjb3BlLm1ldGhvZCA9ICdH
RVQnOworICAgICAgICAgICAgJHNjb3BlLnVybCA9ICdodHRwLWhlbGxvLmh0bWwnOworCisgICAg
ICAgICAgICAkc2NvcGUuZmV0Y2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgJHNjb3Bl
LmNvZGUgPSBudWxsOworICAgICAgICAgICAgICAkc2NvcGUucmVzcG9uc2UgPSBudWxsOworCisg
ICAgICAgICAgICAgICRodHRwKHttZXRob2Q6ICRzY29wZS5tZXRob2QsIHVybDogJHNjb3BlLnVy
bCwgY2FjaGU6ICR0ZW1wbGF0ZUNhY2hlfSkuCisgICAgICAgICAgICAgICAgc3VjY2VzcyhmdW5j
dGlvbihkYXRhLCBzdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAgICRzY29wZS5zdGF0dXMgPSBz
dGF0dXM7CisgICAgICAgICAgICAgICAgICAkc2NvcGUuZGF0YSA9IGRhdGE7CisgICAgICAgICAg
ICAgICAgfSkuCisgICAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24oZGF0YSwgc3RhdHVzKSB7
CisgICAgICAgICAgICAgICAgICAkc2NvcGUuZGF0YSA9IGRhdGEgfHwgIlJlcXVlc3QgZmFpbGVk
IjsKKyAgICAgICAgICAgICAgICAgICRzY29wZS5zdGF0dXMgPSBzdGF0dXM7CisgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgJHNjb3BlLnVwZGF0ZU1vZGVs
ID0gZnVuY3Rpb24obWV0aG9kLCB1cmwpIHsKKyAgICAgICAgICAgICAgJHNjb3BlLm1ldGhvZCA9
IG1ldGhvZDsKKyAgICAgICAgICAgICAgJHNjb3BlLnVybCA9IHVybDsKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgfQorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlIG5hbWU9Imh0dHAt
aGVsbG8uaHRtbCI+CisgICAgICAgICAgSGVsbG8sICRodHRwIQorICAgICAgICA8L2ZpbGU+Cisg
ICAgICAgIDxmaWxlIG5hbWU9InNjZW5hcmlvLmpzIj4KKyAgICAgICAgICBpdCgnc2hvdWxkIG1h
a2UgYW4geGhyIEdFVCByZXF1ZXN0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBlbGVtZW50
KCc6YnV0dG9uOmNvbnRhaW5zKCJTYW1wbGUgR0VUIiknKS5jbGljaygpOworICAgICAgICAgICAg
ZWxlbWVudCgnOmJ1dHRvbjpjb250YWlucygiZmV0Y2giKScpLmNsaWNrKCk7CisgICAgICAgICAg
ICBleHBlY3QoYmluZGluZygnc3RhdHVzJykpLnRvQmUoJzIwMCcpOworICAgICAgICAgICAgZXhw
ZWN0KGJpbmRpbmcoJ2RhdGEnKSkudG9NYXRjaCgvSGVsbG8sIFwkaHR0cCEvKTsKKyAgICAgICAg
ICB9KTsKKworICAgICAgICAgIGl0KCdzaG91bGQgbWFrZSBhIEpTT05QIHJlcXVlc3QgdG8gYW5n
dWxhcmpzLm9yZycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZWxlbWVudCgnOmJ1dHRvbjpj
b250YWlucygiU2FtcGxlIEpTT05QIiknKS5jbGljaygpOworICAgICAgICAgICAgZWxlbWVudCgn
OmJ1dHRvbjpjb250YWlucygiZmV0Y2giKScpLmNsaWNrKCk7CisgICAgICAgICAgICBleHBlY3Qo
YmluZGluZygnc3RhdHVzJykpLnRvQmUoJzIwMCcpOworICAgICAgICAgICAgZXhwZWN0KGJpbmRp
bmcoJ2RhdGEnKSkudG9NYXRjaCgvU3VwZXIgSGVybyEvKTsKKyAgICAgICAgICB9KTsKKworICAg
ICAgICAgIGl0KCdzaG91bGQgbWFrZSBKU09OUCByZXF1ZXN0IHRvIGludmFsaWQgVVJMIGFuZCBp
bnZva2UgdGhlIGVycm9yIGhhbmRsZXInLAorICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGVsZW1lbnQoJzpidXR0b246Y29udGFpbnMoIkludmFsaWQgSlNPTlAiKScpLmNs
aWNrKCk7CisgICAgICAgICAgICBlbGVtZW50KCc6YnV0dG9uOmNvbnRhaW5zKCJmZXRjaCIpJyku
Y2xpY2soKTsKKyAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdzdGF0dXMnKSkudG9CZSgnMCcp
OworICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ2RhdGEnKSkudG9CZSgnUmVxdWVzdCBmYWls
ZWQnKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgPC9maWxlPgorICAgICAgPC9leGFtcGxlPgor
ICAgICAqLworICAgIGZ1bmN0aW9uICRodHRwKGNvbmZpZykgeworICAgICAgY29uZmlnLm1ldGhv
ZCA9IHVwcGVyY2FzZShjb25maWcubWV0aG9kKTsKKworICAgICAgdmFyIHJlcVRyYW5zZm9ybUZu
ID0gY29uZmlnLnRyYW5zZm9ybVJlcXVlc3QgfHwgJGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0LAor
ICAgICAgICAgIHJlc3BUcmFuc2Zvcm1GbiA9IGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSB8fCAk
Y29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLAorICAgICAgICAgIGRlZkhlYWRlcnMgPSAkY29uZmln
LmhlYWRlcnMsCisgICAgICAgICAgcmVxSGVhZGVycyA9IGV4dGVuZCh7J1gtWFNSRi1UT0tFTic6
ICRicm93c2VyLmNvb2tpZXMoKVsnWFNSRi1UT0tFTiddfSwKKyAgICAgICAgICAgICAgZGVmSGVh
ZGVycy5jb21tb24sIGRlZkhlYWRlcnNbbG93ZXJjYXNlKGNvbmZpZy5tZXRob2QpXSwgY29uZmln
LmhlYWRlcnMpLAorICAgICAgICAgIHJlcURhdGEgPSB0cmFuc2Zvcm1EYXRhKGNvbmZpZy5kYXRh
LCBoZWFkZXJzR2V0dGVyKHJlcUhlYWRlcnMpLCByZXFUcmFuc2Zvcm1GbiksCisgICAgICAgICAg
cHJvbWlzZTsKKworICAgICAgLy8gc3RyaXAgY29udGVudC10eXBlIGlmIGRhdGEgaXMgdW5kZWZp
bmVkCisgICAgICBpZiAoaXNVbmRlZmluZWQoY29uZmlnLmRhdGEpKSB7CisgICAgICAgIGRlbGV0
ZSByZXFIZWFkZXJzWydDb250ZW50LVR5cGUnXTsKKyAgICAgIH0KKworICAgICAgLy8gc2VuZCBy
ZXF1ZXN0CisgICAgICBwcm9taXNlID0gc2VuZFJlcShjb25maWcsIHJlcURhdGEsIHJlcUhlYWRl
cnMpOworCisKKyAgICAgIC8vIHRyYW5zZm9ybSBmdXR1cmUgcmVzcG9uc2UKKyAgICAgIHByb21p
c2UgPSBwcm9taXNlLnRoZW4odHJhbnNmb3JtUmVzcG9uc2UsIHRyYW5zZm9ybVJlc3BvbnNlKTsK
KworICAgICAgLy8gYXBwbHkgaW50ZXJjZXB0b3JzCisgICAgICBmb3JFYWNoKHJlc3BvbnNlSW50
ZXJjZXB0b3JzLCBmdW5jdGlvbihpbnRlcmNlcHRvcikgeworICAgICAgICBwcm9taXNlID0gaW50
ZXJjZXB0b3IocHJvbWlzZSk7CisgICAgICB9KTsKKworICAgICAgcHJvbWlzZS5zdWNjZXNzID0g
ZnVuY3Rpb24oZm4pIHsKKyAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7
CisgICAgICAgICAgZm4ocmVzcG9uc2UuZGF0YSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5o
ZWFkZXJzLCBjb25maWcpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHByb21pc2U7Cisg
ICAgICB9OworCisgICAgICBwcm9taXNlLmVycm9yID0gZnVuY3Rpb24oZm4pIHsKKyAgICAgICAg
cHJvbWlzZS50aGVuKG51bGwsIGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgICAgZm4ocmVz
cG9uc2UuZGF0YSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLCBjb25maWcpOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgICB9OworCisgICAgICBy
ZXR1cm4gcHJvbWlzZTsKKworICAgICAgZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UocmVzcG9u
c2UpIHsKKyAgICAgICAgLy8gbWFrZSBhIGNvcHkgc2luY2UgdGhlIHJlc3BvbnNlIG11c3QgYmUg
Y2FjaGVhYmxlCisgICAgICAgIHZhciByZXNwID0gZXh0ZW5kKHt9LCByZXNwb25zZSwgeworICAg
ICAgICAgIGRhdGE6IHRyYW5zZm9ybURhdGEocmVzcG9uc2UuZGF0YSwgcmVzcG9uc2UuaGVhZGVy
cywgcmVzcFRyYW5zZm9ybUZuKQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIChpc1N1Y2Nl
c3MocmVzcG9uc2Uuc3RhdHVzKSkKKyAgICAgICAgICA/IHJlc3AKKyAgICAgICAgICA6ICRxLnJl
amVjdChyZXNwKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAkaHR0cC5wZW5kaW5nUmVxdWVzdHMg
PSBbXTsKKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSBuZy4k
aHR0cCNnZXQKKyAgICAgKiBAbWV0aG9kT2YgbmcuJGh0dHAKKyAgICAgKgorICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBHRVRgIHJlcXVlc3Qu
CisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRl
IFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdAorICAgICAqIEBw
YXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0CisgICAg
ICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0CisgICAgICovCisKKyAgICAv
KioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICogQG5hbWUgbmcuJGh0dHAjZGVsZXRlCisg
ICAgICogQG1ldGhvZE9mIG5nLiRodHRwCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAg
ICAgKiBTaG9ydGN1dCBtZXRob2QgdG8gcGVyZm9ybSBgREVMRVRFYCByZXF1ZXN0LgorICAgICAq
CisgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3Bl
Y2lmeWluZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVlc3QKKyAgICAgKiBAcGFyYW0ge09i
amVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdAorICAgICAqIEByZXR1
cm5zIHtIdHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdAorICAgICAqLworCisgICAgLyoqCisgICAg
ICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lIG5nLiRodHRwI2hlYWQKKyAgICAgKiBAbWV0
aG9kT2YgbmcuJGh0dHAKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0
Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBIRUFEYCByZXF1ZXN0LgorICAgICAqCisgICAgICogQHBh
cmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWluZyB0aGUg
ZGVzdGluYXRpb24gb2YgdGhlIHJlcXVlc3QKKyAgICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZp
ZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdAorICAgICAqIEByZXR1cm5zIHtIdHRwUHJv
bWlzZX0gRnV0dXJlIG9iamVjdAorICAgICAqLworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAqIEBuYW1lIG5nLiRodHRwI2pzb25wCisgICAgICogQG1ldGhvZE9mIG5nLiRo
dHRwCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBTaG9ydGN1dCBtZXRob2Qg
dG8gcGVyZm9ybSBgSlNPTlBgIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlv
biBvZiB0aGUgcmVxdWVzdC4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIFNob3VsZCBjb250
YWluIGBKU09OX0NBTExCQUNLYCBzdHJpbmcuCisgICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25m
aWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QKKyAgICAgKiBAcmV0dXJucyB7SHR0cFBy
b21pc2V9IEZ1dHVyZSBvYmplY3QKKyAgICAgKi8KKyAgICBjcmVhdGVTaG9ydE1ldGhvZHMoJ2dl
dCcsICdkZWxldGUnLCAnaGVhZCcsICdqc29ucCcpOworCisgICAgLyoqCisgICAgICogQG5nZG9j
IG1ldGhvZAorICAgICAqIEBuYW1lIG5nLiRodHRwI3Bvc3QKKyAgICAgKiBAbWV0aG9kT2Ygbmcu
JGh0dHAKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0Y3V0IG1ldGhv
ZCB0byBwZXJmb3JtIGBQT1NUYCByZXF1ZXN0LgorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJp
bmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWluZyB0aGUgZGVzdGluYXRp
b24gb2YgdGhlIHJlcXVlc3QKKyAgICAgKiBAcGFyYW0geyp9IGRhdGEgUmVxdWVzdCBjb250ZW50
CisgICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBv
YmplY3QKKyAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBvYmplY3QKKyAgICAg
Ki8KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSBuZy4kaHR0
cCNwdXQKKyAgICAgKiBAbWV0aG9kT2YgbmcuJGh0dHAKKyAgICAgKgorICAgICAqIEBkZXNjcmlw
dGlvbgorICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBQVVRgIHJlcXVlc3QuCisg
ICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRlIFVS
TCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdAorICAgICAqIEBwYXJh
bSB7Kn0gZGF0YSBSZXF1ZXN0IGNvbnRlbnQKKyAgICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZp
ZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdAorICAgICAqIEByZXR1cm5zIHtIdHRwUHJv
bWlzZX0gRnV0dXJlIG9iamVjdAorICAgICAqLworICAgIGNyZWF0ZVNob3J0TWV0aG9kc1dpdGhE
YXRhKCdwb3N0JywgJ3B1dCcpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBAbmdkb2MgcHJv
cGVydHkKKyAgICAgICAgICogQG5hbWUgbmcuJGh0dHAjZGVmYXVsdHMKKyAgICAgICAgICogQHBy
b3BlcnR5T2YgbmcuJGh0dHAKKyAgICAgICAgICoKKyAgICAgICAgICogQGRlc2NyaXB0aW9uCisg
ICAgICAgICAqIFJ1bnRpbWUgZXF1aXZhbGVudCBvZiB0aGUgYCRodHRwUHJvdmlkZXIuZGVmYXVs
dHNgIHByb3BlcnR5LiBBbGxvd3MgY29uZmlndXJhdGlvbiBvZgorICAgICAgICAgKiBkZWZhdWx0
IGhlYWRlcnMgYXMgd2VsbCBhcyByZXF1ZXN0IGFuZCByZXNwb25zZSB0cmFuc2Zvcm1hdGlvbnMu
CisgICAgICAgICAqCisgICAgICAgICAqIFNlZSAiU2V0dGluZyBIVFRQIEhlYWRlcnMiIGFuZCAi
VHJhbnNmb3JtaW5nIFJlcXVlc3RzIGFuZCBSZXNwb25zZXMiIHNlY3Rpb25zIGFib3ZlLgorICAg
ICAgICAgKi8KKyAgICAkaHR0cC5kZWZhdWx0cyA9ICRjb25maWc7CisKKworICAgIHJldHVybiAk
aHR0cDsKKworCisgICAgZnVuY3Rpb24gY3JlYXRlU2hvcnRNZXRob2RzKG5hbWVzKSB7CisgICAg
ICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24obmFtZSkgeworICAgICAgICAkaHR0cFtuYW1l
XSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7CisgICAgICAgICAgcmV0dXJuICRodHRwKGV4dGVu
ZChjb25maWcgfHwge30sIHsKKyAgICAgICAgICAgIG1ldGhvZDogbmFtZSwKKyAgICAgICAgICAg
IHVybDogdXJsCisgICAgICAgICAgfSkpOworICAgICAgICB9OworICAgICAgfSk7CisgICAgfQor
CisKKyAgICBmdW5jdGlvbiBjcmVhdGVTaG9ydE1ldGhvZHNXaXRoRGF0YShuYW1lKSB7CisgICAg
ICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24obmFtZSkgeworICAgICAgICAkaHR0cFtuYW1l
XSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7CisgICAgICAgICAgcmV0dXJuICRodHRw
KGV4dGVuZChjb25maWcgfHwge30sIHsKKyAgICAgICAgICAgIG1ldGhvZDogbmFtZSwKKyAgICAg
ICAgICAgIHVybDogdXJsLAorICAgICAgICAgICAgZGF0YTogZGF0YQorICAgICAgICAgIH0pKTsK
KyAgICAgICAgfTsKKyAgICAgIH0pOworICAgIH0KKworCisgICAgLyoqCisgICAgICogTWFrZXMg
dGhlIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiAhISEgQUNDRVNTRVMgQ0xPU1VSRSBWQVJTOgor
ICAgICAqICRodHRwQmFja2VuZCwgJGNvbmZpZywgJGxvZywgJHJvb3RTY29wZSwgZGVmYXVsdENh
Y2hlLCAkaHR0cC5wZW5kaW5nUmVxdWVzdHMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBzZW5kUmVx
KGNvbmZpZywgcmVxRGF0YSwgcmVxSGVhZGVycykgeworICAgICAgdmFyIGRlZmVycmVkID0gJHEu
ZGVmZXIoKSwKKyAgICAgICAgICBwcm9taXNlID0gZGVmZXJyZWQucHJvbWlzZSwKKyAgICAgICAg
ICBjYWNoZSwKKyAgICAgICAgICBjYWNoZWRSZXNwLAorICAgICAgICAgIHVybCA9IGJ1aWxkVXJs
KGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbXMpOworCisgICAgICAkaHR0cC5wZW5kaW5nUmVxdWVz
dHMucHVzaChjb25maWcpOworICAgICAgcHJvbWlzZS50aGVuKHJlbW92ZVBlbmRpbmdSZXEsIHJl
bW92ZVBlbmRpbmdSZXEpOworCisKKyAgICAgIGlmIChjb25maWcuY2FjaGUgJiYgY29uZmlnLm1l
dGhvZCA9PSAnR0VUJykgeworICAgICAgICBjYWNoZSA9IGlzT2JqZWN0KGNvbmZpZy5jYWNoZSkg
PyBjb25maWcuY2FjaGUgOiBkZWZhdWx0Q2FjaGU7CisgICAgICB9CisKKyAgICAgIGlmIChjYWNo
ZSkgeworICAgICAgICBjYWNoZWRSZXNwID0gY2FjaGUuZ2V0KHVybCk7CisgICAgICAgIGlmIChj
YWNoZWRSZXNwKSB7CisgICAgICAgICAgaWYgKGNhY2hlZFJlc3AudGhlbikgeworICAgICAgICAg
ICAgLy8gY2FjaGVkIHJlcXVlc3QgaGFzIGFscmVhZHkgYmVlbiBzZW50LCBidXQgdGhlcmUgaXMg
bm8gcmVzcG9uc2UgeWV0CisgICAgICAgICAgICBjYWNoZWRSZXNwLnRoZW4ocmVtb3ZlUGVuZGlu
Z1JlcSwgcmVtb3ZlUGVuZGluZ1JlcSk7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVkUmVzcDsK
KyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gc2VydmluZyBmcm9tIGNhY2hlCisg
ICAgICAgICAgICBpZiAoaXNBcnJheShjYWNoZWRSZXNwKSkgeworICAgICAgICAgICAgICByZXNv
bHZlUHJvbWlzZShjYWNoZWRSZXNwWzFdLCBjYWNoZWRSZXNwWzBdLCBjb3B5KGNhY2hlZFJlc3Bb
Ml0pKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJlc29sdmVQcm9taXNl
KGNhY2hlZFJlc3AsIDIwMCwge30pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBwdXQgdGhlIHByb21pc2UgZm9yIHRoZSBub24tdHJh
bnNmb3JtZWQgcmVzcG9uc2UgaW50byBjYWNoZSBhcyBhIHBsYWNlaG9sZGVyCisgICAgICAgICAg
Y2FjaGUucHV0KHVybCwgcHJvbWlzZSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8g
aWYgd2Ugd29uJ3QgaGF2ZSB0aGUgcmVzcG9uc2UgaW4gY2FjaGUsIHNlbmQgdGhlIHJlcXVlc3Qg
dG8gdGhlIGJhY2tlbmQKKyAgICAgIGlmICghY2FjaGVkUmVzcCkgeworICAgICAgICAkaHR0cEJh
Y2tlbmQoY29uZmlnLm1ldGhvZCwgdXJsLCByZXFEYXRhLCBkb25lLCByZXFIZWFkZXJzLCBjb25m
aWcudGltZW91dCwKKyAgICAgICAgICAgIGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpOworICAgICAg
fQorCisgICAgICByZXR1cm4gcHJvbWlzZTsKKworCisgICAgICAvKioKKyAgICAgICAqIENhbGxi
YWNrIHJlZ2lzdGVyZWQgdG8gJGh0dHBCYWNrZW5kKCk6CisgICAgICAgKiAgLSBjYWNoZXMgdGhl
IHJlc3BvbnNlIGlmIGRlc2lyZWQKKyAgICAgICAqICAtIHJlc29sdmVzIHRoZSByYXcgJGh0dHAg
cHJvbWlzZQorICAgICAgICogIC0gY2FsbHMgJGFwcGx5CisgICAgICAgKi8KKyAgICAgIGZ1bmN0
aW9uIGRvbmUoc3RhdHVzLCByZXNwb25zZSwgaGVhZGVyc1N0cmluZykgeworICAgICAgICBpZiAo
Y2FjaGUpIHsKKyAgICAgICAgICBpZiAoaXNTdWNjZXNzKHN0YXR1cykpIHsKKyAgICAgICAgICAg
IGNhY2hlLnB1dCh1cmwsIFtzdGF0dXMsIHJlc3BvbnNlLCBwYXJzZUhlYWRlcnMoaGVhZGVyc1N0
cmluZyldKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gcmVtb3ZlIHByb21p
c2UgZnJvbSB0aGUgY2FjaGUKKyAgICAgICAgICAgIGNhY2hlLnJlbW92ZSh1cmwpOworICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc29sdmVQcm9taXNlKHJlc3BvbnNlLCBzdGF0
dXMsIGhlYWRlcnNTdHJpbmcpOworICAgICAgICAkcm9vdFNjb3BlLiRhcHBseSgpOworICAgICAg
fQorCisKKyAgICAgIC8qKgorICAgICAgICogUmVzb2x2ZXMgdGhlIHJhdyAkaHR0cCBwcm9taXNl
LgorICAgICAgICovCisgICAgICBmdW5jdGlvbiByZXNvbHZlUHJvbWlzZShyZXNwb25zZSwgc3Rh
dHVzLCBoZWFkZXJzKSB7CisgICAgICAgIC8vIG5vcm1hbGl6ZSBpbnRlcm5hbCBzdGF0dXNlcyB0
byAwCisgICAgICAgIHN0YXR1cyA9IE1hdGgubWF4KHN0YXR1cywgMCk7CisKKyAgICAgICAgKGlz
U3VjY2VzcyhzdGF0dXMpID8gZGVmZXJyZWQucmVzb2x2ZSA6IGRlZmVycmVkLnJlamVjdCkoewor
ICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLAorICAgICAgICAgIHN0YXR1czogc3RhdHVzLAorICAg
ICAgICAgIGhlYWRlcnM6IGhlYWRlcnNHZXR0ZXIoaGVhZGVycyksCisgICAgICAgICAgY29uZmln
OiBjb25maWcKKyAgICAgICAgfSk7CisgICAgICB9CisKKworICAgICAgZnVuY3Rpb24gcmVtb3Zl
UGVuZGluZ1JlcSgpIHsKKyAgICAgICAgdmFyIGlkeCA9IGluZGV4T2YoJGh0dHAucGVuZGluZ1Jl
cXVlc3RzLCBjb25maWcpOworICAgICAgICBpZiAoaWR4ICE9PSAtMSkgJGh0dHAucGVuZGluZ1Jl
cXVlc3RzLnNwbGljZShpZHgsIDEpOworICAgICAgfQorICAgIH0KKworCisgICAgZnVuY3Rpb24g
YnVpbGRVcmwodXJsLCBwYXJhbXMpIHsKKyAgICAgICAgICBpZiAoIXBhcmFtcykgcmV0dXJuIHVy
bDsKKyAgICAgICAgICB2YXIgcGFydHMgPSBbXTsKKyAgICAgICAgICBmb3JFYWNoU29ydGVkKHBh
cmFtcywgZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAgICAgICAgaWYgKHZhbHVlID09IG51
bGwgfHwgdmFsdWUgPT0gdW5kZWZpbmVkKSByZXR1cm47CisgICAgICAgICAgICBpZiAoaXNPYmpl
Y3QodmFsdWUpKSB7CisgICAgICAgICAgICAgIHZhbHVlID0gdG9Kc29uKHZhbHVlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHBhcnRzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGtleSkg
KyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTsKKyAgICAgICAgICB9KTsKKyAgICAg
ICAgICByZXR1cm4gdXJsICsgKCh1cmwuaW5kZXhPZignPycpID09IC0xKSA/ICc/JyA6ICcmJykg
KyBwYXJ0cy5qb2luKCcmJyk7CisgICAgICAgIH0KKworCisgIH1dOworfQorCit2YXIgWEhSID0g
d2luZG93LlhNTEh0dHBSZXF1ZXN0IHx8IGZ1bmN0aW9uKCkgeworICB0cnkgeyByZXR1cm4gbmV3
IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQLjYuMCIpOyB9IGNhdGNoIChlMSkge30KKyAg
dHJ5IHsgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUC4zLjAiKTsgfSBj
YXRjaCAoZTIpIHt9CisgIHRyeSB7IHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhN
TEhUVFAiKTsgfSBjYXRjaCAoZTMpIHt9CisgIHRocm93IG5ldyBFcnJvcigiVGhpcyBicm93c2Vy
IGRvZXMgbm90IHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QuIik7Cit9OworCisKKy8qKgorICogQG5n
ZG9jIG9iamVjdAorICogQG5hbWUgbmcuJGh0dHBCYWNrZW5kCisgKiBAcmVxdWlyZXMgJGJyb3dz
ZXIKKyAqIEByZXF1aXJlcyAkd2luZG93CisgKiBAcmVxdWlyZXMgJGRvY3VtZW50CisgKgorICog
QGRlc2NyaXB0aW9uCisgKiBIVFRQIGJhY2tlbmQgdXNlZCBieSB0aGUge0BsaW5rIG5nLiRodHRw
IHNlcnZpY2V9IHRoYXQgZGVsZWdhdGVzIHRvCisgKiBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgb3Ig
SlNPTlAgYW5kIGRlYWxzIHdpdGggYnJvd3NlciBpbmNvbXBhdGliaWxpdGllcy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gdXNlIHRoaXMgc2VydmljZSBkaXJlY3RseSwgaW5zdGVh
ZCB1c2UgdGhlIGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbnM6CisgKiB7QGxpbmsgbmcuJGh0dHAg
JGh0dHB9IG9yIHtAbGluayBuZ1Jlc291cmNlLiRyZXNvdXJjZSAkcmVzb3VyY2V9LgorICoKKyAq
IER1cmluZyB0ZXN0aW5nIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgc3dhcHBlZCB3aXRoIHtAbGlu
ayBuZ01vY2suJGh0dHBCYWNrZW5kIG1vY2sKKyAqICRodHRwQmFja2VuZH0gd2hpY2ggY2FuIGJl
IHRyYWluZWQgd2l0aCByZXNwb25zZXMuCisgKi8KK2Z1bmN0aW9uICRIdHRwQmFja2VuZFByb3Zp
ZGVyKCkgeworICB0aGlzLiRnZXQgPSBbJyRicm93c2VyJywgJyR3aW5kb3cnLCAnJGRvY3VtZW50
JywgZnVuY3Rpb24oJGJyb3dzZXIsICR3aW5kb3csICRkb2N1bWVudCkgeworICAgIHJldHVybiBj
cmVhdGVIdHRwQmFja2VuZCgkYnJvd3NlciwgWEhSLCAkYnJvd3Nlci5kZWZlciwgJHdpbmRvdy5h
bmd1bGFyLmNhbGxiYWNrcywKKyAgICAgICAgJGRvY3VtZW50WzBdLCAkd2luZG93LmxvY2F0aW9u
LnByb3RvY29sLnJlcGxhY2UoJzonLCAnJykpOworICB9XTsKK30KKworZnVuY3Rpb24gY3JlYXRl
SHR0cEJhY2tlbmQoJGJyb3dzZXIsIFhIUiwgJGJyb3dzZXJEZWZlciwgY2FsbGJhY2tzLCByYXdE
b2N1bWVudCwgbG9jYXRpb25Qcm90b2NvbCkgeworICAvLyBUT0RPKHZvanRhKTogZml4IHRoZSBz
aWduYXR1cmUKKyAgcmV0dXJuIGZ1bmN0aW9uKG1ldGhvZCwgdXJsLCBwb3N0LCBjYWxsYmFjaywg
aGVhZGVycywgdGltZW91dCwgd2l0aENyZWRlbnRpYWxzKSB7CisgICAgJGJyb3dzZXIuJCRpbmNP
dXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpOworICAgIHVybCA9IHVybCB8fCAkYnJvd3Nlci51cmwo
KTsKKworICAgIGlmIChsb3dlcmNhc2UobWV0aG9kKSA9PSAnanNvbnAnKSB7CisgICAgICB2YXIg
Y2FsbGJhY2tJZCA9ICdfJyArIChjYWxsYmFja3MuY291bnRlcisrKS50b1N0cmluZygzNik7Cisg
ICAgICBjYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgIGNh
bGxiYWNrc1tjYWxsYmFja0lkXS5kYXRhID0gZGF0YTsKKyAgICAgIH07CisKKyAgICAgIGpzb25w
UmVxKHVybC5yZXBsYWNlKCdKU09OX0NBTExCQUNLJywgJ2FuZ3VsYXIuY2FsbGJhY2tzLicgKyBj
YWxsYmFja0lkKSwKKyAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGNhbGxiYWNr
c1tjYWxsYmFja0lkXS5kYXRhKSB7CisgICAgICAgICAgY29tcGxldGVSZXF1ZXN0KGNhbGxiYWNr
LCAyMDAsIGNhbGxiYWNrc1tjYWxsYmFja0lkXS5kYXRhKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIC0yKTsKKyAgICAgICAgfQorICAgICAg
ICBkZWxldGUgY2FsbGJhY2tzW2NhbGxiYWNrSWRdOworICAgICAgfSk7CisgICAgfSBlbHNlIHsK
KyAgICAgIHZhciB4aHIgPSBuZXcgWEhSKCk7CisgICAgICB4aHIub3BlbihtZXRob2QsIHVybCwg
dHJ1ZSk7CisgICAgICBmb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKKyAg
ICAgICAgaWYgKHZhbHVlKSB4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbHVlKTsKKyAgICAg
IH0pOworCisgICAgICB2YXIgc3RhdHVzOworCisgICAgICAvLyBJbiBJRTYgYW5kIDcsIHRoaXMg
bWlnaHQgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgd2hlbiB4aHIuc2VuZCBiZWxvdyBpcyBjYWxs
ZWQgYW5kIHRoZQorICAgICAgLy8gcmVzcG9uc2UgaXMgaW4gdGhlIGNhY2hlLiB0aGUgcHJvbWlz
ZSBhcGkgd2lsbCBlbnN1cmUgdGhhdCB0byB0aGUgYXBwIGNvZGUgdGhlIGFwaSBpcworICAgICAg
Ly8gYWx3YXlzIGFzeW5jCisgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgdmFyIHJl
c3BvbnNlSGVhZGVycyA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKKworICAgICAgICAg
IC8vIFRPRE8odm9qdGEpOiByZW1vdmUgb25jZSBGaXJlZm94IDIxIGdldHMgcmVsZWFzZWQuCisg
ICAgICAgICAgLy8gYmVnaW46IHdvcmthcm91bmQgdG8gb3ZlcmNvbWUgRmlyZWZveCBDT1JTIGh0
dHAgcmVzcG9uc2UgaGVhZGVycyBidWcKKyAgICAgICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1v
emlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02MDg3MzUKKyAgICAgICAgICAvLyBGaXJlZm94IGFs
cmVhZHkgcGF0Y2hlZCBpbiBuaWdodGx5LiBTaG91bGQgbGFuZCBpbiBGaXJlZm94IDIxLgorCisg
ICAgICAgICAgLy8gQ09SUyAic2ltcGxlIHJlc3BvbnNlIGhlYWRlcnMiIGh0dHA6Ly93d3cudzMu
b3JnL1RSL2NvcnMvCisgICAgICAgICAgdmFyIHZhbHVlLAorICAgICAgICAgICAgICBzaW1wbGVI
ZWFkZXJzID0gWyJDYWNoZS1Db250cm9sIiwgIkNvbnRlbnQtTGFuZ3VhZ2UiLCAiQ29udGVudC1U
eXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwaXJlcyIsICJMYXN0
LU1vZGlmaWVkIiwgIlByYWdtYSJdOworICAgICAgICAgIGlmICghcmVzcG9uc2VIZWFkZXJzKSB7
CisgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgPSAiIjsKKyAgICAgICAgICAgIGZvckVhY2go
c2ltcGxlSGVhZGVycywgZnVuY3Rpb24gKGhlYWRlcikgeworICAgICAgICAgICAgICB2YXIgdmFs
dWUgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoaGVhZGVyKTsKKyAgICAgICAgICAgICAgaWYgKHZh
bHVlKSB7CisgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgKz0gaGVhZGVyICsgIjog
IiArIHZhbHVlICsgIlxuIjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgfQorICAgICAgICAgIC8vIGVuZCBvZiB0aGUgd29ya2Fyb3VuZC4KKworICAgICAgICAg
IGNvbXBsZXRlUmVxdWVzdChjYWxsYmFjaywgc3RhdHVzIHx8IHhoci5zdGF0dXMsIHhoci5yZXNw
b25zZVRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyk7Cisg
ICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIGlmICh3aXRoQ3JlZGVudGlhbHMpIHsKKyAgICAg
ICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7CisgICAgICB9CisKKyAgICAgIHhoci5zZW5k
KHBvc3QgfHwgJycpOworCisgICAgICBpZiAodGltZW91dCA+IDApIHsKKyAgICAgICAgJGJyb3dz
ZXJEZWZlcihmdW5jdGlvbigpIHsKKyAgICAgICAgICBzdGF0dXMgPSAtMTsKKyAgICAgICAgICB4
aHIuYWJvcnQoKTsKKyAgICAgICAgfSwgdGltZW91dCk7CisgICAgICB9CisgICAgfQorCisKKyAg
ICBmdW5jdGlvbiBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIHN0YXR1cywgcmVzcG9uc2UsIGhl
YWRlcnNTdHJpbmcpIHsKKyAgICAgIC8vIFVSTF9NQVRDSCBpcyBkZWZpbmVkIGluIHNyYy9zZXJ2
aWNlL2xvY2F0aW9uLmpzCisgICAgICB2YXIgcHJvdG9jb2wgPSAodXJsLm1hdGNoKFVSTF9NQVRD
SCkgfHwgWycnLCBsb2NhdGlvblByb3RvY29sXSlbMV07CisKKyAgICAgIC8vIGZpeCBzdGF0dXMg
Y29kZSBmb3IgZmlsZSBwcm90b2NvbCAoaXQncyBhbHdheXMgMCkKKyAgICAgIHN0YXR1cyA9IChw
cm90b2NvbCA9PSAnZmlsZScpID8gKHJlc3BvbnNlID8gMjAwIDogNDA0KSA6IHN0YXR1czsKKwor
ICAgICAgLy8gbm9ybWFsaXplIElFIGJ1ZyAoaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQv
MTQ1MCkKKyAgICAgIHN0YXR1cyA9IHN0YXR1cyA9PSAxMjIzID8gMjA0IDogc3RhdHVzOworCisg
ICAgICBjYWxsYmFjayhzdGF0dXMsIHJlc3BvbnNlLCBoZWFkZXJzU3RyaW5nKTsKKyAgICAgICRi
cm93c2VyLiQkY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3Qobm9vcCk7CisgICAgfQorICB9Owor
CisgIGZ1bmN0aW9uIGpzb25wUmVxKHVybCwgZG9uZSkgeworICAgIC8vIHdlIGNhbid0IHVzZSBq
UXVlcnkvanFMaXRlIGhlcmUgYmVjYXVzZSBqUXVlcnkgZG9lcyBjcmF6eSBzaGl0IHdpdGggc2Ny
aXB0IGVsZW1lbnRzLCBlLmcuOgorICAgIC8vIC0gZmV0Y2hlcyBsb2NhbCBzY3JpcHRzIHZpYSBY
SFIgYW5kIGV2YWxzIHRoZW0KKyAgICAvLyAtIGFkZHMgYW5kIGltbWVkaWF0ZWx5IHJlbW92ZXMg
c2NyaXB0IGVsZW1lbnRzIGZyb20gdGhlIGRvY3VtZW50CisgICAgdmFyIHNjcmlwdCA9IHJhd0Rv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLAorICAgICAgICBkb25lV3JhcHBlciA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgIHJhd0RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2NyaXB0
KTsKKyAgICAgICAgICBpZiAoZG9uZSkgZG9uZSgpOworICAgICAgICB9OworCisgICAgc2NyaXB0
LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKKyAgICBzY3JpcHQuc3JjID0gdXJsOworCisgICAg
aWYgKG1zaWUpIHsKKyAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKC9sb2FkZWR8Y29tcGxldGUvLnRlc3Qoc2NyaXB0LnJlYWR5U3RhdGUp
KSBkb25lV3JhcHBlcigpOworICAgICAgfTsKKyAgICB9IGVsc2UgeworICAgICAgc2NyaXB0Lm9u
bG9hZCA9IHNjcmlwdC5vbmVycm9yID0gZG9uZVdyYXBwZXI7CisgICAgfQorCisgICAgcmF3RG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpOworICB9Cit9CisKKy8qKgorICogQG5nZG9j
IG9iamVjdAorICogQG5hbWUgbmcuJGxvY2FsZQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogJGxv
Y2FsZSBzZXJ2aWNlIHByb3ZpZGVzIGxvY2FsaXphdGlvbiBydWxlcyBmb3IgdmFyaW91cyBBbmd1
bGFyIGNvbXBvbmVudHMuIEFzIG9mIHJpZ2h0IG5vdyB0aGUKKyAqIG9ubHkgcHVibGljIGFwaSBp
czoKKyAqCisgKiAqIGBpZGAg4oCTIGB7c3RyaW5nfWAg4oCTIGxvY2FsZSBpZCBmb3JtYXR0ZWQg
YXMgYGxhbmd1YWdlSWQtY291bnRyeUlkYCAoZS5nLiBgZW4tdXNgKQorICovCitmdW5jdGlvbiAk
TG9jYWxlUHJvdmlkZXIoKXsKKyAgdGhpcy4kZ2V0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
IHsKKyAgICAgIGlkOiAnZW4tdXMnLAorCisgICAgICBOVU1CRVJfRk9STUFUUzogeworICAgICAg
ICBERUNJTUFMX1NFUDogJy4nLAorICAgICAgICBHUk9VUF9TRVA6ICcsJywKKyAgICAgICAgUEFU
VEVSTlM6IFsKKyAgICAgICAgICB7IC8vIERlY2ltYWwgUGF0dGVybgorICAgICAgICAgICAgbWlu
SW50OiAxLAorICAgICAgICAgICAgbWluRnJhYzogMCwKKyAgICAgICAgICAgIG1heEZyYWM6IDMs
CisgICAgICAgICAgICBwb3NQcmU6ICcnLAorICAgICAgICAgICAgcG9zU3VmOiAnJywKKyAgICAg
ICAgICAgIG5lZ1ByZTogJy0nLAorICAgICAgICAgICAgbmVnU3VmOiAnJywKKyAgICAgICAgICAg
IGdTaXplOiAzLAorICAgICAgICAgICAgbGdTaXplOiAzCisgICAgICAgICAgfSx7IC8vQ3VycmVu
Y3kgUGF0dGVybgorICAgICAgICAgICAgbWluSW50OiAxLAorICAgICAgICAgICAgbWluRnJhYzog
MiwKKyAgICAgICAgICAgIG1heEZyYWM6IDIsCisgICAgICAgICAgICBwb3NQcmU6ICdcdTAwQTQn
LAorICAgICAgICAgICAgcG9zU3VmOiAnJywKKyAgICAgICAgICAgIG5lZ1ByZTogJyhcdTAwQTQn
LAorICAgICAgICAgICAgbmVnU3VmOiAnKScsCisgICAgICAgICAgICBnU2l6ZTogMywKKyAgICAg
ICAgICAgIGxnU2l6ZTogMworICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgQ1VSUkVO
Q1lfU1lNOiAnJCcKKyAgICAgIH0sCisKKyAgICAgIERBVEVUSU1FX0ZPUk1BVFM6IHsKKyAgICAg
ICAgTU9OVEg6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVn
dXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJworICAgICAgICAgICAgICAg
IC5zcGxpdCgnLCcpLAorICAgICAgICBTSE9SVE1PTlRIOiAgJ0phbixGZWIsTWFyLEFwcixNYXks
SnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLAorICAgICAgICBEQVk6ICdT
dW5kYXksTW9uZGF5LFR1ZXNkYXksV2VkbmVzZGF5LFRodXJzZGF5LEZyaWRheSxTYXR1cmRheScu
c3BsaXQoJywnKSwKKyAgICAgICAgU0hPUlREQVk6ICdTdW4sTW9uLFR1ZSxXZWQsVGh1LEZyaSxT
YXQnLnNwbGl0KCcsJyksCisgICAgICAgIEFNUE1TOiBbJ0FNJywnUE0nXSwKKyAgICAgICAgbWVk
aXVtOiAnTU1NIGQsIHkgaDptbTpzcyBhJywKKyAgICAgICAgc2hvcnQ6ICdNL2QveXkgaDptbSBh
JywKKyAgICAgICAgZnVsbERhdGU6ICdFRUVFLCBNTU1NIGQsIHknLAorICAgICAgICBsb25nRGF0
ZTogJ01NTU0gZCwgeScsCisgICAgICAgIG1lZGl1bURhdGU6ICdNTU0gZCwgeScsCisgICAgICAg
IHNob3J0RGF0ZTogJ00vZC95eScsCisgICAgICAgIG1lZGl1bVRpbWU6ICdoOm1tOnNzIGEnLAor
ICAgICAgICBzaG9ydFRpbWU6ICdoOm1tIGEnCisgICAgICB9LAorCisgICAgICBwbHVyYWxDYXQ6
IGZ1bmN0aW9uKG51bSkgeworICAgICAgICBpZiAobnVtID09PSAxKSB7CisgICAgICAgICAgcmV0
dXJuICdvbmUnOworICAgICAgICB9CisgICAgICAgIHJldHVybiAnb3RoZXInOworICAgICAgfQor
ICAgIH07CisgIH07Cit9CisKK2Z1bmN0aW9uICRUaW1lb3V0UHJvdmlkZXIoKSB7CisgIHRoaXMu
JGdldCA9IFsnJHJvb3RTY29wZScsICckYnJvd3NlcicsICckcScsICckZXhjZXB0aW9uSGFuZGxl
cicsCisgICAgICAgZnVuY3Rpb24oJHJvb3RTY29wZSwgICAkYnJvd3NlciwgICAkcSwgICAkZXhj
ZXB0aW9uSGFuZGxlcikgeworICAgIHZhciBkZWZlcnJlZHMgPSB7fTsKKworCisgICAgIC8qKgor
ICAgICAgKiBAbmdkb2MgZnVuY3Rpb24KKyAgICAgICogQG5hbWUgbmcuJHRpbWVvdXQKKyAgICAg
ICogQHJlcXVpcmVzICRicm93c2VyCisgICAgICAqCisgICAgICAqIEBkZXNjcmlwdGlvbgorICAg
ICAgKiBBbmd1bGFyJ3Mgd3JhcHBlciBmb3IgYHdpbmRvdy5zZXRUaW1lb3V0YC4gVGhlIGBmbmAg
ZnVuY3Rpb24gaXMgd3JhcHBlZCBpbnRvIGEgdHJ5L2NhdGNoCisgICAgICAqIGJsb2NrIGFuZCBk
ZWxlZ2F0ZXMgYW55IGV4Y2VwdGlvbnMgdG8KKyAgICAgICoge0BsaW5rIG5nLiRleGNlcHRpb25I
YW5kbGVyICRleGNlcHRpb25IYW5kbGVyfSBzZXJ2aWNlLgorICAgICAgKgorICAgICAgKiBUaGUg
cmV0dXJuIHZhbHVlIG9mIHJlZ2lzdGVyaW5nIGEgdGltZW91dCBmdW5jdGlvbiBpcyBhIHByb21p
c2UsIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2hlbgorICAgICAgKiB0aGUgdGltZW91dCBpcyBy
ZWFjaGVkIGFuZCB0aGUgdGltZW91dCBmdW5jdGlvbiBpcyBleGVjdXRlZC4KKyAgICAgICoKKyAg
ICAgICogVG8gY2FuY2VsIGEgdGltZW91dCByZXF1ZXN0LCBjYWxsIGAkdGltZW91dC5jYW5jZWwo
cHJvbWlzZSlgLgorICAgICAgKgorICAgICAgKiBJbiB0ZXN0cyB5b3UgY2FuIHVzZSB7QGxpbmsg
bmdNb2NrLiR0aW1lb3V0IGAkdGltZW91dC5mbHVzaCgpYH0gdG8KKyAgICAgICogc3luY2hyb25v
dXNseSBmbHVzaCB0aGUgcXVldWUgb2YgZGVmZXJyZWQgZnVuY3Rpb25zLgorICAgICAgKgorICAg
ICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGZuIEEgZnVuY3Rpb24sIHdob3NlIGV4ZWN1dGlvbiBz
aG91bGQgYmUgZGVsYXllZC4KKyAgICAgICogQHBhcmFtIHtudW1iZXI9fSBbZGVsYXk9MF0gRGVs
YXkgaW4gbWlsbGlzZWNvbmRzLgorICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBbaW52b2tlQXBw
bHk9dHJ1ZV0gSWYgc2V0IHRvIGBmYWxzZWAgc2tpcHMgbW9kZWwgZGlydHkgY2hlY2tpbmcsIG90
aGVyd2lzZQorICAgICAgKiAgIHdpbGwgaW52b2tlIGBmbmAgd2l0aGluIHRoZSB7QGxpbmsgbmcu
JHJvb3RTY29wZS5TY29wZSMkYXBwbHkgJGFwcGx5fSBibG9jay4KKyAgICAgICogQHJldHVybnMg
e1Byb21pc2V9IFByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIHdoZW4gdGhlIHRpbWVvdXQg
aXMgcmVhY2hlZC4gVGhlIHZhbHVlIHRoaXMKKyAgICAgICogICBwcm9taXNlIHdpbGwgYmUgcmVz
b2x2ZWQgd2l0aCBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgZm5gIGZ1bmN0aW9uLgorICAg
ICAgKi8KKyAgICBmdW5jdGlvbiB0aW1lb3V0KGZuLCBkZWxheSwgaW52b2tlQXBwbHkpIHsKKyAg
ICAgIHZhciBkZWZlcnJlZCA9ICRxLmRlZmVyKCksCisgICAgICAgICAgcHJvbWlzZSA9IGRlZmVy
cmVkLnByb21pc2UsCisgICAgICAgICAgc2tpcEFwcGx5ID0gKGlzRGVmaW5lZChpbnZva2VBcHBs
eSkgJiYgIWludm9rZUFwcGx5KSwKKyAgICAgICAgICB0aW1lb3V0SWQsIGNsZWFudXA7CisKKyAg
ICAgIHRpbWVvdXRJZCA9ICRicm93c2VyLmRlZmVyKGZ1bmN0aW9uKCkgeworICAgICAgICB0cnkg
eworICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoZm4oKSk7CisgICAgICAgIH0gY2F0Y2goZSkg
eworICAgICAgICAgIGRlZmVycmVkLnJlamVjdChlKTsKKyAgICAgICAgICAkZXhjZXB0aW9uSGFu
ZGxlcihlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc2tpcEFwcGx5KSAkcm9vdFNjb3Bl
LiRhcHBseSgpOworICAgICAgfSwgZGVsYXkpOworCisgICAgICBjbGVhbnVwID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGRlbGV0ZSBkZWZlcnJlZHNbcHJvbWlzZS4kJHRpbWVvdXRJZF07CisgICAg
ICB9OworCisgICAgICBwcm9taXNlLiQkdGltZW91dElkID0gdGltZW91dElkOworICAgICAgZGVm
ZXJyZWRzW3RpbWVvdXRJZF0gPSBkZWZlcnJlZDsKKyAgICAgIHByb21pc2UudGhlbihjbGVhbnVw
LCBjbGVhbnVwKTsKKworICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgfQorCisKKyAgICAgLyoq
CisgICAgICAqIEBuZ2RvYyBmdW5jdGlvbgorICAgICAgKiBAbmFtZSBuZy4kdGltZW91dCNjYW5j
ZWwKKyAgICAgICogQG1ldGhvZE9mIG5nLiR0aW1lb3V0CisgICAgICAqCisgICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAgKiBDYW5jZWxzIGEgdGFzayBhc3NvY2lhdGVkIHdpdGggdGhlIGBwcm9t
aXNlYC4gQXMgYSByZXN1bHQgb2YgdGhpcywgdGhlIHByb21pc2Ugd2lsbCBiZQorICAgICAgKiBy
ZXNvbHZlZCB3aXRoIGEgcmVqZWN0aW9uLgorICAgICAgKgorICAgICAgKiBAcGFyYW0ge1Byb21p
c2U9fSBwcm9taXNlIFByb21pc2UgcmV0dXJuZWQgYnkgdGhlIGAkdGltZW91dGAgZnVuY3Rpb24u
CisgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFzayBo
YXNuJ3QgZXhlY3V0ZWQgeWV0IGFuZCB3YXMgc3VjY2Vzc2Z1bGx5CisgICAgICAqICAgY2FuY2Vs
ZWQuCisgICAgICAqLworICAgIHRpbWVvdXQuY2FuY2VsID0gZnVuY3Rpb24ocHJvbWlzZSkgewor
ICAgICAgaWYgKHByb21pc2UgJiYgcHJvbWlzZS4kJHRpbWVvdXRJZCBpbiBkZWZlcnJlZHMpIHsK
KyAgICAgICAgZGVmZXJyZWRzW3Byb21pc2UuJCR0aW1lb3V0SWRdLnJlamVjdCgnY2FuY2VsZWQn
KTsKKyAgICAgICAgcmV0dXJuICRicm93c2VyLmRlZmVyLmNhbmNlbChwcm9taXNlLiQkdGltZW91
dElkKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgcmV0dXJu
IHRpbWVvdXQ7CisgIH1dOworfQorCisvKioKKyAqIEBuZ2RvYyBvYmplY3QKKyAqIEBuYW1lIG5n
LiRmaWx0ZXJQcm92aWRlcgorICogQGRlc2NyaXB0aW9uCisgKgorICogRmlsdGVycyBhcmUganVz
dCBmdW5jdGlvbnMgd2hpY2ggdHJhbnNmb3JtIGlucHV0IHRvIGFuIG91dHB1dC4gSG93ZXZlciBm
aWx0ZXJzIG5lZWQgdG8gYmUgRGVwZW5kZW5jeSBJbmplY3RlZC4gVG8KKyAqIGFjaGlldmUgdGhp
cyBhIGZpbHRlciBkZWZpbml0aW9uIGNvbnNpc3RzIG9mIGEgZmFjdG9yeSBmdW5jdGlvbiB3aGlj
aCBpcyBhbm5vdGF0ZWQgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGlzCisgKiByZXNwb25zaWJsZSBm
b3IgY3JlYXRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uCisgKgorICogPHByZT4KKyAqICAgLy8gRmls
dGVyIHJlZ2lzdHJhdGlvbgorICogICBmdW5jdGlvbiBNeU1vZHVsZSgkcHJvdmlkZSwgJGZpbHRl
clByb3ZpZGVyKSB7CisgKiAgICAgLy8gY3JlYXRlIGEgc2VydmljZSB0byBkZW1vbnN0cmF0ZSBp
bmplY3Rpb24gKG5vdCBhbHdheXMgbmVlZGVkKQorICogICAgICRwcm92aWRlLnZhbHVlKCdncmVl
dCcsIGZ1bmN0aW9uKG5hbWUpeworICogICAgICAgcmV0dXJuICdIZWxsbyAnICsgbmFtZSArICch
JzsKKyAqICAgICB9KTsKKyAqCisgKiAgICAgLy8gcmVnaXN0ZXIgYSBmaWx0ZXIgZmFjdG9yeSB3
aGljaCB1c2VzIHRoZQorICogICAgIC8vIGdyZWV0IHNlcnZpY2UgdG8gZGVtb25zdHJhdGUgREku
CisgKiAgICAgJGZpbHRlclByb3ZpZGVyLnJlZ2lzdGVyKCdncmVldCcsIGZ1bmN0aW9uKGdyZWV0
KXsKKyAqICAgICAgIC8vIHJldHVybiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHdoaWNoIHVzZXMgdGhl
IGdyZWV0IHNlcnZpY2UKKyAqICAgICAgIC8vIHRvIGdlbmVyYXRlIHNhbHV0YXRpb24KKyAqICAg
ICAgIHJldHVybiBmdW5jdGlvbih0ZXh0KSB7CisgKiAgICAgICAgIC8vIGZpbHRlcnMgbmVlZCB0
byBiZSBmb3JnaXZpbmcgc28gY2hlY2sgaW5wdXQgdmFsaWRpdHkKKyAqICAgICAgICAgcmV0dXJu
IHRleHQgJiYgZ3JlZXQodGV4dCkgfHwgdGV4dDsKKyAqICAgICAgIH07CisgKiAgICAgfSk7Cisg
KiAgIH0KKyAqIDwvcHJlPgorICoKKyAqIFRoZSBmaWx0ZXIgZnVuY3Rpb24gaXMgcmVnaXN0ZXJl
ZCB3aXRoIHRoZSBgJGluamVjdG9yYCB1bmRlciB0aGUgZmlsdGVyIG5hbWUgc3VmZml4ZSB3aXRo
IGBGaWx0ZXJgLgorICogPHByZT4KKyAqICAgaXQoJ3Nob3VsZCBiZSB0aGUgc2FtZSBpbnN0YW5j
ZScsIGluamVjdCgKKyAqICAgICBmdW5jdGlvbigkZmlsdGVyUHJvdmlkZXIpIHsKKyAqICAgICAg
ICRmaWx0ZXJQcm92aWRlci5yZWdpc3RlcigncmV2ZXJzZScsIGZ1bmN0aW9uKCl7CisgKiAgICAg
ICAgIHJldHVybiAuLi47CisgKiAgICAgICB9KTsKKyAqICAgICB9LAorICogICAgIGZ1bmN0aW9u
KCRmaWx0ZXIsIHJldmVyc2VGaWx0ZXIpIHsKKyAqICAgICAgIGV4cGVjdCgkZmlsdGVyKCdyZXZl
cnNlJykpLnRvQmUocmV2ZXJzZUZpbHRlcik7CisgKiAgICAgfSk7CisgKiA8L3ByZT4KKyAqCisg
KgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IGFuZ3VsYXIgZmlsdGVycyB3b3Jr
LCBhbmQgaG93IHRvIGNyZWF0ZSB5b3VyIG93biBmaWx0ZXJzLCBzZWUKKyAqIHtAbGluayBndWlk
ZS9kZXZfZ3VpZGUudGVtcGxhdGVzLmZpbHRlcnMgVW5kZXJzdGFuZGluZyBBbmd1bGFyIEZpbHRl
cnN9IGluIHRoZSBhbmd1bGFyIERldmVsb3BlcgorICogR3VpZGUuCisgKi8KKy8qKgorICogQG5n
ZG9jIG1ldGhvZAorICogQG5hbWUgbmcuJGZpbHRlclByb3ZpZGVyI3JlZ2lzdGVyCisgKiBAbWV0
aG9kT2YgbmcuJGZpbHRlclByb3ZpZGVyCisgKiBAZGVzY3JpcHRpb24KKyAqIFJlZ2lzdGVyIGZp
bHRlciBmYWN0b3J5IGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUg
b2YgdGhlIGZpbHRlci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIFRoZSBmaWx0ZXIgZmFjdG9y
eSBmdW5jdGlvbiB3aGljaCBpcyBpbmplY3RhYmxlLgorICovCisKKworLyoqCisgKiBAbmdkb2Mg
ZnVuY3Rpb24KKyAqIEBuYW1lIG5nLiRmaWx0ZXIKKyAqIEBmdW5jdGlvbgorICogQGRlc2NyaXB0
aW9uCisgKiBGaWx0ZXJzIGFyZSB1c2VkIGZvciBmb3JtYXR0aW5nIGRhdGEgZGlzcGxheWVkIHRv
IHRoZSB1c2VyLgorICoKKyAqIFRoZSBnZW5lcmFsIHN5bnRheCBpbiB0ZW1wbGF0ZXMgaXMgYXMg
Zm9sbG93czoKKyAqCisgKiAgICAgICAgIHt7IGV4cHJlc3Npb24gW3wgZmlsdGVyX25hbWVbOnBh
cmFtZXRlcl92YWx1ZV0gLi4uIF0gfX0KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1l
IG9mIHRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUKKyAqIEByZXR1cm4ge0Z1bmN0aW9u
fSB0aGUgZmlsdGVyIGZ1bmN0aW9uCisgKi8KKyRGaWx0ZXJQcm92aWRlci4kaW5qZWN0ID0gWyck
cHJvdmlkZSddOworZnVuY3Rpb24gJEZpbHRlclByb3ZpZGVyKCRwcm92aWRlKSB7CisgIHZhciBz
dWZmaXggPSAnRmlsdGVyJzsKKworICBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCBmYWN0b3J5KSB7
CisgICAgcmV0dXJuICRwcm92aWRlLmZhY3RvcnkobmFtZSArIHN1ZmZpeCwgZmFjdG9yeSk7Cisg
IH0KKyAgdGhpcy5yZWdpc3RlciA9IHJlZ2lzdGVyOworCisgIHRoaXMuJGdldCA9IFsnJGluamVj
dG9yJywgZnVuY3Rpb24oJGluamVjdG9yKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHsK
KyAgICAgIHJldHVybiAkaW5qZWN0b3IuZ2V0KG5hbWUgKyBzdWZmaXgpOworICAgIH0KKyAgfV07
CisKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgIHJlZ2lz
dGVyKCdjdXJyZW5jeScsIGN1cnJlbmN5RmlsdGVyKTsKKyAgcmVnaXN0ZXIoJ2RhdGUnLCBkYXRl
RmlsdGVyKTsKKyAgcmVnaXN0ZXIoJ2ZpbHRlcicsIGZpbHRlckZpbHRlcik7CisgIHJlZ2lzdGVy
KCdqc29uJywganNvbkZpbHRlcik7CisgIHJlZ2lzdGVyKCdsaW1pdFRvJywgbGltaXRUb0ZpbHRl
cik7CisgIHJlZ2lzdGVyKCdsb3dlcmNhc2UnLCBsb3dlcmNhc2VGaWx0ZXIpOworICByZWdpc3Rl
cignbnVtYmVyJywgbnVtYmVyRmlsdGVyKTsKKyAgcmVnaXN0ZXIoJ29yZGVyQnknLCBvcmRlckJ5
RmlsdGVyKTsKKyAgcmVnaXN0ZXIoJ3VwcGVyY2FzZScsIHVwcGVyY2FzZUZpbHRlcik7Cit9CisK
Ky8qKgorICogQG5nZG9jIGZpbHRlcgorICogQG5hbWUgbmcuZmlsdGVyOmZpbHRlcgorICogQGZ1
bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBTZWxlY3RzIGEgc3Vic2V0IG9mIGl0ZW1z
IGZyb20gYGFycmF5YCBhbmQgcmV0dXJucyBpdCBhcyBhIG5ldyBhcnJheS4KKyAqCisgKiBOb3Rl
OiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYXVnbWVudCB0aGUgYEFycmF5YCB0eXBlIGluIEFu
Z3VsYXIgZXhwcmVzc2lvbnMuIFNlZQorICoge0BsaW5rIG5nLiRmaWx0ZXJ9IGZvciBtb3JlIGlu
Zm9ybWF0aW9uIGFib3V0IEFuZ3VsYXIgYXJyYXlzLgorICoKKyAqIEBwYXJhbSB7QXJyYXl9IGFy
cmF5IFRoZSBzb3VyY2UgYXJyYXkuCisgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R8ZnVuY3Rpb24o
KX0gZXhwcmVzc2lvbiBUaGUgcHJlZGljYXRlIHRvIGJlIHVzZWQgZm9yIHNlbGVjdGluZyBpdGVt
cyBmcm9tCisgKiAgIGBhcnJheWAuCisgKgorICogICBDYW4gYmUgb25lIG9mOgorICoKKyAqICAg
LSBgc3RyaW5nYDogUHJlZGljYXRlIHRoYXQgcmVzdWx0cyBpbiBhIHN1YnN0cmluZyBtYXRjaCB1
c2luZyB0aGUgdmFsdWUgb2YgYGV4cHJlc3Npb25gCisgKiAgICAgc3RyaW5nLiBBbGwgc3RyaW5n
cyBvciBvYmplY3RzIHdpdGggc3RyaW5nIHByb3BlcnRpZXMgaW4gYGFycmF5YCB0aGF0IGNvbnRh
aW4gdGhpcyBzdHJpbmcKKyAqICAgICB3aWxsIGJlIHJldHVybmVkLiBUaGUgcHJlZGljYXRlIGNh
biBiZSBuZWdhdGVkIGJ5IHByZWZpeGluZyB0aGUgc3RyaW5nIHdpdGggYCFgLgorICoKKyAqICAg
LSBgT2JqZWN0YDogQSBwYXR0ZXJuIG9iamVjdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgc3BlY2lm
aWMgcHJvcGVydGllcyBvbiBvYmplY3RzIGNvbnRhaW5lZAorICogICAgIGJ5IGBhcnJheWAuIEZv
ciBleGFtcGxlIGB7bmFtZToiTSIsIHBob25lOiIxIn1gIHByZWRpY2F0ZSB3aWxsIHJldHVybiBh
biBhcnJheSBvZiBpdGVtcworICogICAgIHdoaWNoIGhhdmUgcHJvcGVydHkgYG5hbWVgIGNvbnRh
aW5pbmcgIk0iIGFuZCBwcm9wZXJ0eSBgcGhvbmVgIGNvbnRhaW5pbmcgIjEiLiBBIHNwZWNpYWwK
KyAqICAgICBwcm9wZXJ0eSBuYW1lIGAkYCBjYW4gYmUgdXNlZCAoYXMgaW4gYHskOiJ0ZXh0In1g
KSB0byBhY2NlcHQgYSBtYXRjaCBhZ2FpbnN0IGFueQorICogICAgIHByb3BlcnR5IG9mIHRoZSBv
YmplY3QuIFRoYXQncyBlcXVpdmFsZW50IHRvIHRoZSBzaW1wbGUgc3Vic3RyaW5nIG1hdGNoIHdp
dGggYSBgc3RyaW5nYAorICogICAgIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqCisgKiAgIC0gYGZ1
bmN0aW9uYDogQSBwcmVkaWNhdGUgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gd3JpdGUgYXJiaXRy
YXJ5IGZpbHRlcnMuIFRoZSBmdW5jdGlvbiBpcworICogICAgIGNhbGxlZCBmb3IgZWFjaCBlbGVt
ZW50IG9mIGBhcnJheWAuIFRoZSBmaW5hbCByZXN1bHQgaXMgYW4gYXJyYXkgb2YgdGhvc2UgZWxl
bWVudHMgdGhhdAorICogICAgIHRoZSBwcmVkaWNhdGUgcmV0dXJuZWQgdHJ1ZSBmb3IuCisgKgor
ICogQGV4YW1wbGUKKyAgIDxkb2M6ZXhhbXBsZT4KKyAgICAgPGRvYzpzb3VyY2U+CisgICAgICAg
PGRpdiBuZy1pbml0PSJmcmllbmRzID0gW3tuYW1lOidKb2huJywgcGhvbmU6JzU1NS0xMjc2J30s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOidNYXJ5JywgcGhvbmU6Jzgw
MC1CSUctTUFSWSd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmFtZTonTWlr
ZScsIHBob25lOic1NTUtNDMyMSd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
bmFtZTonQWRhbScsIHBob25lOic1NTUtNTY3OCd9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7bmFtZTonSnVsaWUnLCBwaG9uZTonNTU1LTg3NjUnfV0iPjwvZGl2PgorCisgICAg
ICAgU2VhcmNoOiA8aW5wdXQgbmctbW9kZWw9InNlYXJjaFRleHQiPgorICAgICAgIDx0YWJsZSBp
ZD0ic2VhcmNoVGV4dFJlc3VsdHMiPgorICAgICAgICAgPHRyPjx0aD5OYW1lPC90aD48dGg+UGhv
bmU8L3RoPjwvdHI+CisgICAgICAgICA8dHIgbmctcmVwZWF0PSJmcmllbmQgaW4gZnJpZW5kcyB8
IGZpbHRlcjpzZWFyY2hUZXh0Ij4KKyAgICAgICAgICAgPHRkPnt7ZnJpZW5kLm5hbWV9fTwvdGQ+
CisgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5waG9uZX19PC90ZD4KKyAgICAgICAgIDwvdHI+Cisg
ICAgICAgPC90YWJsZT4KKyAgICAgICA8aHI+CisgICAgICAgQW55OiA8aW5wdXQgbmctbW9kZWw9
InNlYXJjaC4kIj4gPGJyPgorICAgICAgIE5hbWUgb25seSA8aW5wdXQgbmctbW9kZWw9InNlYXJj
aC5uYW1lIj48YnI+CisgICAgICAgUGhvbmUgb25seSA8aW5wdXQgbmctbW9kZWw9InNlYXJjaC5w
aG9uZSI+PGJyPgorICAgICAgIDx0YWJsZSBpZD0ic2VhcmNoT2JqUmVzdWx0cyI+CisgICAgICAg
ICA8dHI+PHRoPk5hbWU8L3RoPjx0aD5QaG9uZTwvdGg+PC90cj4KKyAgICAgICAgIDx0ciBuZy1y
ZXBlYXQ9ImZyaWVuZCBpbiBmcmllbmRzIHwgZmlsdGVyOnNlYXJjaCI+CisgICAgICAgICAgIDx0
ZD57e2ZyaWVuZC5uYW1lfX08L3RkPgorICAgICAgICAgICA8dGQ+e3tmcmllbmQucGhvbmV9fTwv
dGQ+CisgICAgICAgICA8L3RyPgorICAgICAgIDwvdGFibGU+CisgICAgIDwvZG9jOnNvdXJjZT4K
KyAgICAgPGRvYzpzY2VuYXJpbz4KKyAgICAgICBpdCgnc2hvdWxkIHNlYXJjaCBhY3Jvc3MgYWxs
IGZpZWxkcyB3aGVuIGZpbHRlcmluZyB3aXRoIGEgc3RyaW5nJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICBpbnB1dCgnc2VhcmNoVGV4dCcpLmVudGVyKCdtJyk7CisgICAgICAgICBleHBlY3QocmVw
ZWF0ZXIoJyNzZWFyY2hUZXh0UmVzdWx0cyB0cicsICdmcmllbmQgaW4gZnJpZW5kcycpLmNvbHVt
bignZnJpZW5kLm5hbWUnKSkuCisgICAgICAgICAgIHRvRXF1YWwoWydNYXJ5JywgJ01pa2UnLCAn
QWRhbSddKTsKKworICAgICAgICAgaW5wdXQoJ3NlYXJjaFRleHQnKS5lbnRlcignNzYnKTsKKyAg
ICAgICAgIGV4cGVjdChyZXBlYXRlcignI3NlYXJjaFRleHRSZXN1bHRzIHRyJywgJ2ZyaWVuZCBp
biBmcmllbmRzJykuY29sdW1uKCdmcmllbmQubmFtZScpKS4KKyAgICAgICAgICAgdG9FcXVhbChb
J0pvaG4nLCAnSnVsaWUnXSk7CisgICAgICAgfSk7CisKKyAgICAgICBpdCgnc2hvdWxkIHNlYXJj
aCBpbiBzcGVjaWZpYyBmaWVsZHMgd2hlbiBmaWx0ZXJpbmcgd2l0aCBhIHByZWRpY2F0ZSBvYmpl
Y3QnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGlucHV0KCdzZWFyY2guJCcpLmVudGVyKCdpJyk7
CisgICAgICAgICBleHBlY3QocmVwZWF0ZXIoJyNzZWFyY2hPYmpSZXN1bHRzIHRyJywgJ2ZyaWVu
ZCBpbiBmcmllbmRzJykuY29sdW1uKCdmcmllbmQubmFtZScpKS4KKyAgICAgICAgICAgdG9FcXVh
bChbJ01hcnknLCAnTWlrZScsICdKdWxpZSddKTsKKyAgICAgICB9KTsKKyAgICAgPC9kb2M6c2Nl
bmFyaW8+CisgICA8L2RvYzpleGFtcGxlPgorICovCitmdW5jdGlvbiBmaWx0ZXJGaWx0ZXIoKSB7
CisgIHJldHVybiBmdW5jdGlvbihhcnJheSwgZXhwcmVzc2lvbikgeworICAgIGlmICghaXNBcnJh
eShhcnJheSkpIHJldHVybiBhcnJheTsKKyAgICB2YXIgcHJlZGljYXRlcyA9IFtdOworICAgIHBy
ZWRpY2F0ZXMuY2hlY2sgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBwcmVkaWNhdGVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgIGlmKCFwcmVkaWNhdGVzW2pd
KHZhbHVlKSkgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgfQor
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICB2YXIgc2VhcmNoID0gZnVuY3Rpb24ob2Jq
LCB0ZXh0KXsKKyAgICAgIGlmICh0ZXh0LmNoYXJBdCgwKSA9PT0gJyEnKSB7CisgICAgICAgIHJl
dHVybiAhc2VhcmNoKG9iaiwgdGV4dC5zdWJzdHIoMSkpOworICAgICAgfQorICAgICAgc3dpdGNo
ICh0eXBlb2Ygb2JqKSB7CisgICAgICAgIGNhc2UgImJvb2xlYW4iOgorICAgICAgICBjYXNlICJu
dW1iZXIiOgorICAgICAgICBjYXNlICJzdHJpbmciOgorICAgICAgICAgIHJldHVybiAoJycgKyBv
YmopLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXh0KSA+IC0xOworICAgICAgICBjYXNlICJvYmpl
Y3QiOgorICAgICAgICAgIGZvciAoIHZhciBvYmpLZXkgaW4gb2JqKSB7CisgICAgICAgICAgICBp
ZiAob2JqS2V5LmNoYXJBdCgwKSAhPT0gJyQnICYmIHNlYXJjaChvYmpbb2JqS2V5XSwgdGV4dCkp
IHsKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
fQorICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSAiYXJyYXkiOgorICAgICAg
ICAgIGZvciAoIHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
aWYgKHNlYXJjaChvYmpbaV0sIHRleHQpKSB7CisgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH07Cisg
ICAgc3dpdGNoICh0eXBlb2YgZXhwcmVzc2lvbikgeworICAgICAgY2FzZSAiYm9vbGVhbiI6Cisg
ICAgICBjYXNlICJudW1iZXIiOgorICAgICAgY2FzZSAic3RyaW5nIjoKKyAgICAgICAgZXhwcmVz
c2lvbiA9IHskOmV4cHJlc3Npb259OworICAgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgZm9y
ICh2YXIga2V5IGluIGV4cHJlc3Npb24pIHsKKyAgICAgICAgICBpZiAoa2V5ID09ICckJykgewor
ICAgICAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICB2YXIgdGV4dCA9ICgnJytl
eHByZXNzaW9uW2tleV0pLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgIGlmICghdGV4dCkg
cmV0dXJuOworICAgICAgICAgICAgICBwcmVkaWNhdGVzLnB1c2goZnVuY3Rpb24odmFsdWUpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gc2VhcmNoKHZhbHVlLCB0ZXh0KTsKKyAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9KSgpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHZhciBwYXRoID0ga2V5OworICAgICAgICAg
ICAgICB2YXIgdGV4dCA9ICgnJytleHByZXNzaW9uW2tleV0pLnRvTG93ZXJDYXNlKCk7CisgICAg
ICAgICAgICAgIGlmICghdGV4dCkgcmV0dXJuOworICAgICAgICAgICAgICBwcmVkaWNhdGVzLnB1
c2goZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VhcmNoKGdldHRl
cih2YWx1ZSwgcGF0aCksIHRleHQpOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0p
KCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAn
ZnVuY3Rpb24nOgorICAgICAgICBwcmVkaWNhdGVzLnB1c2goZXhwcmVzc2lvbik7CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKyAg
ICB2YXIgZmlsdGVyZWQgPSBbXTsKKyAgICBmb3IgKCB2YXIgaiA9IDA7IGogPCBhcnJheS5sZW5n
dGg7IGorKykgeworICAgICAgdmFyIHZhbHVlID0gYXJyYXlbal07CisgICAgICBpZiAocHJlZGlj
YXRlcy5jaGVjayh2YWx1ZSkpIHsKKyAgICAgICAgZmlsdGVyZWQucHVzaCh2YWx1ZSk7CisgICAg
ICB9CisgICAgfQorICAgIHJldHVybiBmaWx0ZXJlZDsKKyAgfQorfQorCisvKioKKyAqIEBuZ2Rv
YyBmaWx0ZXIKKyAqIEBuYW1lIG5nLmZpbHRlcjpjdXJyZW5jeQorICogQGZ1bmN0aW9uCisgKgor
ICogQGRlc2NyaXB0aW9uCisgKiBGb3JtYXRzIGEgbnVtYmVyIGFzIGEgY3VycmVuY3kgKGllICQx
LDIzNC41NikuIFdoZW4gbm8gY3VycmVuY3kgc3ltYm9sIGlzIHByb3ZpZGVkLCBkZWZhdWx0Cisg
KiBzeW1ib2wgZm9yIGN1cnJlbnQgbG9jYWxlIGlzIHVzZWQuCisgKgorICogQHBhcmFtIHtudW1i
ZXJ9IGFtb3VudCBJbnB1dCB0byBmaWx0ZXIuCisgKiBAcGFyYW0ge3N0cmluZz19IHN5bWJvbCBD
dXJyZW5jeSBzeW1ib2wgb3IgaWRlbnRpZmllciB0byBiZSBkaXNwbGF5ZWQuCisgKiBAcmV0dXJu
cyB7c3RyaW5nfSBGb3JtYXR0ZWQgbnVtYmVyLgorICoKKyAqCisgKiBAZXhhbXBsZQorICAgPGRv
YzpleGFtcGxlPgorICAgICA8ZG9jOnNvdXJjZT4KKyAgICAgICA8c2NyaXB0PgorICAgICAgICAg
ZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKKyAgICAgICAgICAgJHNjb3BlLmFtb3VudCA9IDEyMzQu
NTY7CisgICAgICAgICB9CisgICAgICAgPC9zY3JpcHQ+CisgICAgICAgPGRpdiBuZy1jb250cm9s
bGVyPSJDdHJsIj4KKyAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5nLW1vZGVsPSJhbW91
bnQiPiA8YnI+CisgICAgICAgICBkZWZhdWx0IGN1cnJlbmN5IHN5bWJvbCAoJCk6IHt7YW1vdW50
IHwgY3VycmVuY3l9fTxicj4KKyAgICAgICAgIGN1c3RvbSBjdXJyZW5jeSBpZGVudGlmaWVyIChV
U0QkKToge3thbW91bnQgfCBjdXJyZW5jeToiVVNEJCJ9fQorICAgICAgIDwvZGl2PgorICAgICA8
L2RvYzpzb3VyY2U+CisgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgaXQoJ3Nob3VsZCBpbml0
IHdpdGggMTIzNC41NicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ2Ft
b3VudCB8IGN1cnJlbmN5JykpLnRvQmUoJyQxLDIzNC41NicpOworICAgICAgICAgZXhwZWN0KGJp
bmRpbmcoJ2Ftb3VudCB8IGN1cnJlbmN5OiJVU0QkIicpKS50b0JlKCdVU0QkMSwyMzQuNTYnKTsK
KyAgICAgICB9KTsKKyAgICAgICBpdCgnc2hvdWxkIHVwZGF0ZScsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgaW5wdXQoJ2Ftb3VudCcpLmVudGVyKCctMTIzNCcpOworICAgICAgICAgZXhwZWN0KGJp
bmRpbmcoJ2Ftb3VudCB8IGN1cnJlbmN5JykpLnRvQmUoJygkMSwyMzQuMDApJyk7CisgICAgICAg
ICBleHBlY3QoYmluZGluZygnYW1vdW50IHwgY3VycmVuY3k6IlVTRCQiJykpLnRvQmUoJyhVU0Qk
MSwyMzQuMDApJyk7CisgICAgICAgfSk7CisgICAgIDwvZG9jOnNjZW5hcmlvPgorICAgPC9kb2M6
ZXhhbXBsZT4KKyAqLworY3VycmVuY3lGaWx0ZXIuJGluamVjdCA9IFsnJGxvY2FsZSddOworZnVu
Y3Rpb24gY3VycmVuY3lGaWx0ZXIoJGxvY2FsZSkgeworICB2YXIgZm9ybWF0cyA9ICRsb2NhbGUu
TlVNQkVSX0ZPUk1BVFM7CisgIHJldHVybiBmdW5jdGlvbihhbW91bnQsIGN1cnJlbmN5U3ltYm9s
KXsKKyAgICBpZiAoaXNVbmRlZmluZWQoY3VycmVuY3lTeW1ib2wpKSBjdXJyZW5jeVN5bWJvbCA9
IGZvcm1hdHMuQ1VSUkVOQ1lfU1lNOworICAgIHJldHVybiBmb3JtYXROdW1iZXIoYW1vdW50LCBm
b3JtYXRzLlBBVFRFUk5TWzFdLCBmb3JtYXRzLkdST1VQX1NFUCwgZm9ybWF0cy5ERUNJTUFMX1NF
UCwgMikuCisgICAgICAgICAgICAgICAgcmVwbGFjZSgvXHUwMEE0L2csIGN1cnJlbmN5U3ltYm9s
KTsKKyAgfTsKK30KKworLyoqCisgKiBAbmdkb2MgZmlsdGVyCisgKiBAbmFtZSBuZy5maWx0ZXI6
bnVtYmVyCisgKiBAZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEZvcm1hdHMgYSBu
dW1iZXIgYXMgdGV4dC4KKyAqCisgKiBJZiB0aGUgaW5wdXQgaXMgbm90IGEgbnVtYmVyIGFuIGVt
cHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKyAqCisgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IG51
bWJlciBOdW1iZXIgdG8gZm9ybWF0LgorICogQHBhcmFtIHsobnVtYmVyfHN0cmluZyk9fSBbZnJh
Y3Rpb25TaXplPTJdIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0aGUgbnVtYmVy
IHRvLgorICogQHJldHVybnMge3N0cmluZ30gTnVtYmVyIHJvdW5kZWQgdG8gZGVjaW1hbFBsYWNl
cyBhbmQgcGxhY2VzIGEg4oCcLOKAnSBhZnRlciBlYWNoIHRoaXJkIGRpZ2l0LgorICoKKyAqIEBl
eGFtcGxlCisgICA8ZG9jOmV4YW1wbGU+CisgICAgIDxkb2M6c291cmNlPgorICAgICAgIDxzY3Jp
cHQ+CisgICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgeworICAgICAgICAgICAkc2NvcGUu
dmFsID0gMTIzNC41Njc4OTsKKyAgICAgICAgIH0KKyAgICAgICA8L3NjcmlwdD4KKyAgICAgICA8
ZGl2IG5nLWNvbnRyb2xsZXI9IkN0cmwiPgorICAgICAgICAgRW50ZXIgbnVtYmVyOiA8aW5wdXQg
bmctbW9kZWw9J3ZhbCc+PGJyPgorICAgICAgICAgRGVmYXVsdCBmb3JtYXR0aW5nOiB7e3ZhbCB8
IG51bWJlcn19PGJyPgorICAgICAgICAgTm8gZnJhY3Rpb25zOiB7e3ZhbCB8IG51bWJlcjowfX08
YnI+CisgICAgICAgICBOZWdhdGl2ZSBudW1iZXI6IHt7LXZhbCB8IG51bWJlcjo0fX0KKyAgICAg
ICA8L2Rpdj4KKyAgICAgPC9kb2M6c291cmNlPgorICAgICA8ZG9jOnNjZW5hcmlvPgorICAgICAg
IGl0KCdzaG91bGQgZm9ybWF0IG51bWJlcnMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVj
dChiaW5kaW5nKCd2YWwgfCBudW1iZXInKSkudG9CZSgnMSwyMzQuNTY4Jyk7CisgICAgICAgICBl
eHBlY3QoYmluZGluZygndmFsIHwgbnVtYmVyOjAnKSkudG9CZSgnMSwyMzUnKTsKKyAgICAgICAg
IGV4cGVjdChiaW5kaW5nKCctdmFsIHwgbnVtYmVyOjQnKSkudG9CZSgnLTEsMjM0LjU2NzknKTsK
KyAgICAgICB9KTsKKworICAgICAgIGl0KCdzaG91bGQgdXBkYXRlJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICBpbnB1dCgndmFsJykuZW50ZXIoJzMzNzQuMzMzJyk7CisgICAgICAgICBleHBlY3Qo
YmluZGluZygndmFsIHwgbnVtYmVyJykpLnRvQmUoJzMsMzc0LjMzMycpOworICAgICAgICAgZXhw
ZWN0KGJpbmRpbmcoJ3ZhbCB8IG51bWJlcjowJykpLnRvQmUoJzMsMzc0Jyk7CisgICAgICAgICBl
eHBlY3QoYmluZGluZygnLXZhbCB8IG51bWJlcjo0JykpLnRvQmUoJy0zLDM3NC4zMzMwJyk7Cisg
ICAgICAgfSk7CisgICAgIDwvZG9jOnNjZW5hcmlvPgorICAgPC9kb2M6ZXhhbXBsZT4KKyAqLwor
CisKK251bWJlckZpbHRlci4kaW5qZWN0ID0gWyckbG9jYWxlJ107CitmdW5jdGlvbiBudW1iZXJG
aWx0ZXIoJGxvY2FsZSkgeworICB2YXIgZm9ybWF0cyA9ICRsb2NhbGUuTlVNQkVSX0ZPUk1BVFM7
CisgIHJldHVybiBmdW5jdGlvbihudW1iZXIsIGZyYWN0aW9uU2l6ZSkgeworICAgIHJldHVybiBm
b3JtYXROdW1iZXIobnVtYmVyLCBmb3JtYXRzLlBBVFRFUk5TWzBdLCBmb3JtYXRzLkdST1VQX1NF
UCwgZm9ybWF0cy5ERUNJTUFMX1NFUCwKKyAgICAgIGZyYWN0aW9uU2l6ZSk7CisgIH07Cit9CisK
K3ZhciBERUNJTUFMX1NFUCA9ICcuJzsKK2Z1bmN0aW9uIGZvcm1hdE51bWJlcihudW1iZXIsIHBh
dHRlcm4sIGdyb3VwU2VwLCBkZWNpbWFsU2VwLCBmcmFjdGlvblNpemUpIHsKKyAgaWYgKGlzTmFO
KG51bWJlcikgfHwgIWlzRmluaXRlKG51bWJlcikpIHJldHVybiAnJzsKKworICB2YXIgaXNOZWdh
dGl2ZSA9IG51bWJlciA8IDA7CisgIG51bWJlciA9IE1hdGguYWJzKG51bWJlcik7CisgIHZhciBu
dW1TdHIgPSBudW1iZXIgKyAnJywKKyAgICAgIGZvcm1hdGVkVGV4dCA9ICcnLAorICAgICAgcGFy
dHMgPSBbXTsKKworICB2YXIgaGFzRXhwb25lbnQgPSBmYWxzZTsKKyAgaWYgKG51bVN0ci5pbmRl
eE9mKCdlJykgIT09IC0xKSB7CisgICAgdmFyIG1hdGNoID0gbnVtU3RyLm1hdGNoKC8oW1xkXC5d
KyllKC0/KShcZCspLyk7CisgICAgaWYgKG1hdGNoICYmIG1hdGNoWzJdID09ICctJyAmJiBtYXRj
aFszXSA+IGZyYWN0aW9uU2l6ZSArIDEpIHsKKyAgICAgIG51bVN0ciA9ICcwJzsKKyAgICB9IGVs
c2UgeworICAgICAgZm9ybWF0ZWRUZXh0ID0gbnVtU3RyOworICAgICAgaGFzRXhwb25lbnQgPSB0
cnVlOworICAgIH0KKyAgfQorCisgIGlmICghaGFzRXhwb25lbnQpIHsKKyAgICB2YXIgZnJhY3Rp
b25MZW4gPSAobnVtU3RyLnNwbGl0KERFQ0lNQUxfU0VQKVsxXSB8fCAnJykubGVuZ3RoOworCisg
ICAgLy8gZGV0ZXJtaW5lIGZyYWN0aW9uU2l6ZSBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkCisgICAg
aWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uU2l6ZSkpIHsKKyAgICAgIGZyYWN0aW9uU2l6ZSA9IE1h
dGgubWluKE1hdGgubWF4KHBhdHRlcm4ubWluRnJhYywgZnJhY3Rpb25MZW4pLCBwYXR0ZXJuLm1h
eEZyYWMpOworICAgIH0KKworICAgIHZhciBwb3cgPSBNYXRoLnBvdygxMCwgZnJhY3Rpb25TaXpl
KTsKKyAgICBudW1iZXIgPSBNYXRoLnJvdW5kKG51bWJlciAqIHBvdykgLyBwb3c7CisgICAgdmFy
IGZyYWN0aW9uID0gKCcnICsgbnVtYmVyKS5zcGxpdChERUNJTUFMX1NFUCk7CisgICAgdmFyIHdo
b2xlID0gZnJhY3Rpb25bMF07CisgICAgZnJhY3Rpb24gPSBmcmFjdGlvblsxXSB8fCAnJzsKKwor
ICAgIHZhciBwb3MgPSAwLAorICAgICAgICBsZ3JvdXAgPSBwYXR0ZXJuLmxnU2l6ZSwKKyAgICAg
ICAgZ3JvdXAgPSBwYXR0ZXJuLmdTaXplOworCisgICAgaWYgKHdob2xlLmxlbmd0aCA+PSAobGdy
b3VwICsgZ3JvdXApKSB7CisgICAgICBwb3MgPSB3aG9sZS5sZW5ndGggLSBsZ3JvdXA7CisgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHBvczsgaSsrKSB7CisgICAgICAgIGlmICgocG9zIC0gaSkl
Z3JvdXAgPT09IDAgJiYgaSAhPT0gMCkgeworICAgICAgICAgIGZvcm1hdGVkVGV4dCArPSBncm91
cFNlcDsKKyAgICAgICAgfQorICAgICAgICBmb3JtYXRlZFRleHQgKz0gd2hvbGUuY2hhckF0KGkp
OworICAgICAgfQorICAgIH0KKworICAgIGZvciAoaSA9IHBvczsgaSA8IHdob2xlLmxlbmd0aDsg
aSsrKSB7CisgICAgICBpZiAoKHdob2xlLmxlbmd0aCAtIGkpJWxncm91cCA9PT0gMCAmJiBpICE9
PSAwKSB7CisgICAgICAgIGZvcm1hdGVkVGV4dCArPSBncm91cFNlcDsKKyAgICAgIH0KKyAgICAg
IGZvcm1hdGVkVGV4dCArPSB3aG9sZS5jaGFyQXQoaSk7CisgICAgfQorCisgICAgLy8gZm9ybWF0
IGZyYWN0aW9uIHBhcnQuCisgICAgd2hpbGUoZnJhY3Rpb24ubGVuZ3RoIDwgZnJhY3Rpb25TaXpl
KSB7CisgICAgICBmcmFjdGlvbiArPSAnMCc7CisgICAgfQorCisgICAgaWYgKGZyYWN0aW9uU2l6
ZSAmJiBmcmFjdGlvblNpemUgIT09ICIwIikgZm9ybWF0ZWRUZXh0ICs9IGRlY2ltYWxTZXAgKyBm
cmFjdGlvbi5zdWJzdHIoMCwgZnJhY3Rpb25TaXplKTsKKyAgfQorCisgIHBhcnRzLnB1c2goaXNO
ZWdhdGl2ZSA/IHBhdHRlcm4ubmVnUHJlIDogcGF0dGVybi5wb3NQcmUpOworICBwYXJ0cy5wdXNo
KGZvcm1hdGVkVGV4dCk7CisgIHBhcnRzLnB1c2goaXNOZWdhdGl2ZSA/IHBhdHRlcm4ubmVnU3Vm
IDogcGF0dGVybi5wb3NTdWYpOworICByZXR1cm4gcGFydHMuam9pbignJyk7Cit9CisKK2Z1bmN0
aW9uIHBhZE51bWJlcihudW0sIGRpZ2l0cywgdHJpbSkgeworICB2YXIgbmVnID0gJyc7CisgIGlm
IChudW0gPCAwKSB7CisgICAgbmVnID0gICctJzsKKyAgICBudW0gPSAtbnVtOworICB9CisgIG51
bSA9ICcnICsgbnVtOworICB3aGlsZShudW0ubGVuZ3RoIDwgZGlnaXRzKSBudW0gPSAnMCcgKyBu
dW07CisgIGlmICh0cmltKQorICAgIG51bSA9IG51bS5zdWJzdHIobnVtLmxlbmd0aCAtIGRpZ2l0
cyk7CisgIHJldHVybiBuZWcgKyBudW07Cit9CisKKworZnVuY3Rpb24gZGF0ZUdldHRlcihuYW1l
LCBzaXplLCBvZmZzZXQsIHRyaW0pIHsKKyAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7CisgIHJldHVy
biBmdW5jdGlvbihkYXRlKSB7CisgICAgdmFyIHZhbHVlID0gZGF0ZVsnZ2V0JyArIG5hbWVdKCk7
CisgICAgaWYgKG9mZnNldCA+IDAgfHwgdmFsdWUgPiAtb2Zmc2V0KQorICAgICAgdmFsdWUgKz0g
b2Zmc2V0OworICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBvZmZzZXQgPT0gLTEyICkgdmFsdWUgPSAx
MjsKKyAgICByZXR1cm4gcGFkTnVtYmVyKHZhbHVlLCBzaXplLCB0cmltKTsKKyAgfTsKK30KKwor
ZnVuY3Rpb24gZGF0ZVN0ckdldHRlcihuYW1lLCBzaG9ydEZvcm0pIHsKKyAgcmV0dXJuIGZ1bmN0
aW9uKGRhdGUsIGZvcm1hdHMpIHsKKyAgICB2YXIgdmFsdWUgPSBkYXRlWydnZXQnICsgbmFtZV0o
KTsKKyAgICB2YXIgZ2V0ID0gdXBwZXJjYXNlKHNob3J0Rm9ybSA/ICgnU0hPUlQnICsgbmFtZSkg
OiBuYW1lKTsKKworICAgIHJldHVybiBmb3JtYXRzW2dldF1bdmFsdWVdOworICB9OworfQorCitm
dW5jdGlvbiB0aW1lWm9uZUdldHRlcihkYXRlKSB7CisgIHZhciB6b25lID0gLTEgKiBkYXRlLmdl
dFRpbWV6b25lT2Zmc2V0KCk7CisgIHZhciBwYWRkZWRab25lID0gKHpvbmUgPj0gMCkgPyAiKyIg
OiAiIjsKKworICBwYWRkZWRab25lICs9IHBhZE51bWJlcihNYXRoW3pvbmUgPiAwID8gJ2Zsb29y
JyA6ICdjZWlsJ10oem9uZSAvIDYwKSwgMikgKworICAgICAgICAgICAgICAgIHBhZE51bWJlcihN
YXRoLmFicyh6b25lICUgNjApLCAyKTsKKworICByZXR1cm4gcGFkZGVkWm9uZTsKK30KKworZnVu
Y3Rpb24gYW1wbUdldHRlcihkYXRlLCBmb3JtYXRzKSB7CisgIHJldHVybiBkYXRlLmdldEhvdXJz
KCkgPCAxMiA/IGZvcm1hdHMuQU1QTVNbMF0gOiBmb3JtYXRzLkFNUE1TWzFdOworfQorCit2YXIg
REFURV9GT1JNQVRTID0geworICB5eXl5OiBkYXRlR2V0dGVyKCdGdWxsWWVhcicsIDQpLAorICAg
IHl5OiBkYXRlR2V0dGVyKCdGdWxsWWVhcicsIDIsIDAsIHRydWUpLAorICAgICB5OiBkYXRlR2V0
dGVyKCdGdWxsWWVhcicsIDEpLAorICBNTU1NOiBkYXRlU3RyR2V0dGVyKCdNb250aCcpLAorICAg
TU1NOiBkYXRlU3RyR2V0dGVyKCdNb250aCcsIHRydWUpLAorICAgIE1NOiBkYXRlR2V0dGVyKCdN
b250aCcsIDIsIDEpLAorICAgICBNOiBkYXRlR2V0dGVyKCdNb250aCcsIDEsIDEpLAorICAgIGRk
OiBkYXRlR2V0dGVyKCdEYXRlJywgMiksCisgICAgIGQ6IGRhdGVHZXR0ZXIoJ0RhdGUnLCAxKSwK
KyAgICBISDogZGF0ZUdldHRlcignSG91cnMnLCAyKSwKKyAgICAgSDogZGF0ZUdldHRlcignSG91
cnMnLCAxKSwKKyAgICBoaDogZGF0ZUdldHRlcignSG91cnMnLCAyLCAtMTIpLAorICAgICBoOiBk
YXRlR2V0dGVyKCdIb3VycycsIDEsIC0xMiksCisgICAgbW06IGRhdGVHZXR0ZXIoJ01pbnV0ZXMn
LCAyKSwKKyAgICAgbTogZGF0ZUdldHRlcignTWludXRlcycsIDEpLAorICAgIHNzOiBkYXRlR2V0
dGVyKCdTZWNvbmRzJywgMiksCisgICAgIHM6IGRhdGVHZXR0ZXIoJ1NlY29uZHMnLCAxKSwKKyAg
RUVFRTogZGF0ZVN0ckdldHRlcignRGF5JyksCisgICBFRUU6IGRhdGVTdHJHZXR0ZXIoJ0RheScs
IHRydWUpLAorICAgICBhOiBhbXBtR2V0dGVyLAorICAgICBaOiB0aW1lWm9uZUdldHRlcgorfTsK
KwordmFyIERBVEVfRk9STUFUU19TUExJVCA9IC8oKD86W155TWRIaG1zYVpFJ10rKXwoPzonKD86
W14nXXwnJykqJyl8KD86RSt8eSt8TSt8ZCt8SCt8aCt8bSt8cyt8YXxaKSkoLiopLywKKyAgICBO
VU1CRVJfU1RSSU5HID0gL15cZCskLzsKKworLyoqCisgKiBAbmdkb2MgZmlsdGVyCisgKiBAbmFt
ZSBuZy5maWx0ZXI6ZGF0ZQorICogQGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiAg
IEZvcm1hdHMgYGRhdGVgIHRvIGEgc3RyaW5nIGJhc2VkIG9uIHRoZSByZXF1ZXN0ZWQgYGZvcm1h
dGAuCisgKgorICogICBgZm9ybWF0YCBzdHJpbmcgY2FuIGJlIGNvbXBvc2VkIG9mIHRoZSBmb2xs
b3dpbmcgZWxlbWVudHM6CisgKgorICogICAqIGAneXl5eSdgOiA0IGRpZ2l0IHJlcHJlc2VudGF0
aW9uIG9mIHllYXIgKGUuZy4gQUQgMSA9PiAwMDAxLCBBRCAyMDEwID0+IDIwMTApCisgKiAgICog
YCd5eSdgOiAyIGRpZ2l0IHJlcHJlc2VudGF0aW9uIG9mIHllYXIsIHBhZGRlZCAoMDAtOTkpLiAo
ZS5nLiBBRCAyMDAxID0+IDAxLCBBRCAyMDEwID0+IDEwKQorICogICAqIGAneSdgOiAxIGRpZ2l0
IHJlcHJlc2VudGF0aW9uIG9mIHllYXIsIGUuZy4gKEFEIDEgPT4gMSwgQUQgMTk5ID0+IDE5OSkK
KyAqICAgKiBgJ01NTU0nYDogTW9udGggaW4geWVhciAoSmFudWFyeS1EZWNlbWJlcikKKyAqICAg
KiBgJ01NTSdgOiBNb250aCBpbiB5ZWFyIChKYW4tRGVjKQorICogICAqIGAnTU0nYDogTW9udGgg
aW4geWVhciwgcGFkZGVkICgwMS0xMikKKyAqICAgKiBgJ00nYDogTW9udGggaW4geWVhciAoMS0x
MikKKyAqICAgKiBgJ2RkJ2A6IERheSBpbiBtb250aCwgcGFkZGVkICgwMS0zMSkKKyAqICAgKiBg
J2QnYDogRGF5IGluIG1vbnRoICgxLTMxKQorICogICAqIGAnRUVFRSdgOiBEYXkgaW4gV2Vlaywo
U3VuZGF5LVNhdHVyZGF5KQorICogICAqIGAnRUVFJ2A6IERheSBpbiBXZWVrLCAoU3VuLVNhdCkK
KyAqICAgKiBgJ0hIJ2A6IEhvdXIgaW4gZGF5LCBwYWRkZWQgKDAwLTIzKQorICogICAqIGAnSCdg
OiBIb3VyIGluIGRheSAoMC0yMykKKyAqICAgKiBgJ2hoJ2A6IEhvdXIgaW4gYW0vcG0sIHBhZGRl
ZCAoMDEtMTIpCisgKiAgICogYCdoJ2A6IEhvdXIgaW4gYW0vcG0sICgxLTEyKQorICogICAqIGAn
bW0nYDogTWludXRlIGluIGhvdXIsIHBhZGRlZCAoMDAtNTkpCisgKiAgICogYCdtJ2A6IE1pbnV0
ZSBpbiBob3VyICgwLTU5KQorICogICAqIGAnc3MnYDogU2Vjb25kIGluIG1pbnV0ZSwgcGFkZGVk
ICgwMC01OSkKKyAqICAgKiBgJ3MnYDogU2Vjb25kIGluIG1pbnV0ZSAoMC01OSkKKyAqICAgKiBg
J2EnYDogYW0vcG0gbWFya2VyCisgKiAgICogYCdaJ2A6IDQgZGlnaXQgKCtzaWduKSByZXByZXNl
bnRhdGlvbiBvZiB0aGUgdGltZXpvbmUgb2Zmc2V0ICgtMTIwMC0rMTIwMCkKKyAqCisgKiAgIGBm
b3JtYXRgIHN0cmluZyBjYW4gYWxzbyBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBwcmVkZWZpbmVk
CisgKiAgIHtAbGluayBndWlkZS9pMThuIGxvY2FsaXphYmxlIGZvcm1hdHN9OgorICoKKyAqICAg
KiBgJ21lZGl1bSdgOiBlcXVpdmFsZW50IHRvIGAnTU1NIGQsIHkgaDptbTpzcyBhJ2AgZm9yIGVu
X1VTIGxvY2FsZQorICogICAgIChlLmcuIFNlcCAzLCAyMDEwIDEyOjA1OjA4IHBtKQorICogICAq
IGAnc2hvcnQnYDogZXF1aXZhbGVudCB0byBgJ00vZC95eSBoOm1tIGEnYCBmb3IgZW5fVVMgIGxv
Y2FsZSAoZS5nLiA5LzMvMTAgMTI6MDUgcG0pCisgKiAgICogYCdmdWxsRGF0ZSdgOiBlcXVpdmFs
ZW50IHRvIGAnRUVFRSwgTU1NTSBkLHknYCBmb3IgZW5fVVMgIGxvY2FsZQorICogICAgIChlLmcu
IEZyaWRheSwgU2VwdGVtYmVyIDMsIDIwMTApCisgKiAgICogYCdsb25nRGF0ZSdgOiBlcXVpdmFs
ZW50IHRvIGAnTU1NTSBkLCB5J2AgZm9yIGVuX1VTICBsb2NhbGUgKGUuZy4gU2VwdGVtYmVyIDMs
IDIwMTAKKyAqICAgKiBgJ21lZGl1bURhdGUnYDogZXF1aXZhbGVudCB0byBgJ01NTSBkLCB5J2Ag
Zm9yIGVuX1VTICBsb2NhbGUgKGUuZy4gU2VwIDMsIDIwMTApCisgKiAgICogYCdzaG9ydERhdGUn
YDogZXF1aXZhbGVudCB0byBgJ00vZC95eSdgIGZvciBlbl9VUyBsb2NhbGUgKGUuZy4gOS8zLzEw
KQorICogICAqIGAnbWVkaXVtVGltZSdgOiBlcXVpdmFsZW50IHRvIGAnaDptbTpzcyBhJ2AgZm9y
IGVuX1VTIGxvY2FsZSAoZS5nLiAxMjowNTowOCBwbSkKKyAqICAgKiBgJ3Nob3J0VGltZSdgOiBl
cXVpdmFsZW50IHRvIGAnaDptbSBhJ2AgZm9yIGVuX1VTIGxvY2FsZSAoZS5nLiAxMjowNSBwbSkK
KyAqCisgKiAgIGBmb3JtYXRgIHN0cmluZyBjYW4gY29udGFpbiBsaXRlcmFsIHZhbHVlcy4gVGhl
c2UgbmVlZCB0byBiZSBxdW90ZWQgd2l0aCBzaW5nbGUgcXVvdGVzIChlLmcuCisgKiAgIGAiaCAn
aW4gdGhlIG1vcm5pbmcnImApLiBJbiBvcmRlciB0byBvdXRwdXQgc2luZ2xlIHF1b3RlLCB1c2Ug
dHdvIHNpbmdsZSBxdW90ZXMgaW4gYSBzZXF1ZW5jZQorICogICAoZS5nLiBgImggbycnY2xvY2si
YCkuCisgKgorICogQHBhcmFtIHsoRGF0ZXxudW1iZXJ8c3RyaW5nKX0gZGF0ZSBEYXRlIHRvIGZv
cm1hdCBlaXRoZXIgYXMgRGF0ZSBvYmplY3QsIG1pbGxpc2Vjb25kcyAoc3RyaW5nIG9yCisgKiAg
ICBudW1iZXIpIG9yIHZhcmlvdXMgSVNPIDg2MDEgZGF0ZXRpbWUgc3RyaW5nIGZvcm1hdHMgKGUu
Zy4geXl5eS1NTS1kZFRISDptbTpzcy5TU1NaIGFuZCBpdHMKKyAqICAgIHNob3J0ZXIgdmVyc2lv
bnMgbGlrZSB5eXl5LU1NLWRkVEhIOm1tWiwgeXl5eS1NTS1kZCBvciB5eXl5TU1kZFRISG1tc3Na
KS4gSWYgbm8gdGltZXpvbmUgaXMKKyAqICAgIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGlucHV0
LCB0aGUgdGltZSBpcyBjb25zaWRlcmVkIHRvIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS4KKyAq
IEBwYXJhbSB7c3RyaW5nPX0gZm9ybWF0IEZvcm1hdHRpbmcgcnVsZXMgKHNlZSBEZXNjcmlwdGlv
bikuIElmIG5vdCBzcGVjaWZpZWQsCisgKiAgICBgbWVkaXVtRGF0ZWAgaXMgdXNlZC4KKyAqIEBy
ZXR1cm5zIHtzdHJpbmd9IEZvcm1hdHRlZCBzdHJpbmcgb3IgdGhlIGlucHV0IGlmIGlucHV0IGlz
IG5vdCByZWNvZ25pemVkIGFzIGRhdGUvbWlsbGlzLgorICoKKyAqIEBleGFtcGxlCisgICA8ZG9j
OmV4YW1wbGU+CisgICAgIDxkb2M6c291cmNlPgorICAgICAgIDxzcGFuIG5nLW5vbi1iaW5kYWJs
ZT57ezEyODgzMjM2MjMwMDYgfCBkYXRlOidtZWRpdW0nfX08L3NwYW4+OgorICAgICAgICAgICB7
ezEyODgzMjM2MjMwMDYgfCBkYXRlOidtZWRpdW0nfX08YnI+CisgICAgICAgPHNwYW4gbmctbm9u
LWJpbmRhYmxlPnt7MTI4ODMyMzYyMzAwNiB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW06c3MgWid9
fTwvc3Bhbj46CisgICAgICAgICAge3sxMjg4MzIzNjIzMDA2IHwgZGF0ZToneXl5eS1NTS1kZCBI
SDptbTpzcyBaJ319PGJyPgorICAgICAgIDxzcGFuIG5nLW5vbi1iaW5kYWJsZT57ezEyODgzMjM2
MjMwMDYgfCBkYXRlOidNTS9kZC95eXl5IEAgaDptbWEnfX08L3NwYW4+OgorICAgICAgICAgIHt7
JzEyODgzMjM2MjMwMDYnIHwgZGF0ZTonTU0vZGQveXl5eSBAIGg6bW1hJ319PGJyPgorICAgICA8
L2RvYzpzb3VyY2U+CisgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgaXQoJ3Nob3VsZCBmb3Jt
YXQgZGF0ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhwZWN0KGJpbmRpbmcoIjEyODgzMjM2
MjMwMDYgfCBkYXRlOidtZWRpdW0nIikpLgorICAgICAgICAgICAgdG9NYXRjaCgvT2N0IDJcZCwg
MjAxMCBcZHsxLDJ9OlxkezJ9OlxkezJ9IChBTXxQTSkvKTsKKyAgICAgICAgIGV4cGVjdChiaW5k
aW5nKCIxMjg4MzIzNjIzMDA2IHwgZGF0ZToneXl5eS1NTS1kZCBISDptbTpzcyBaJyIpKS4KKyAg
ICAgICAgICAgIHRvTWF0Y2goLzIwMTBcLTEwXC0yXGQgXGR7Mn06XGR7Mn06XGR7Mn0gKFwtfFwr
KT9cZHs0fS8pOworICAgICAgICAgZXhwZWN0KGJpbmRpbmcoIicxMjg4MzIzNjIzMDA2JyB8IGRh
dGU6J01NL2RkL3l5eXkgQCBoOm1tYSciKSkuCisgICAgICAgICAgICB0b01hdGNoKC8xMFwvMlxk
XC8yMDEwIEAgXGR7MSwyfTpcZHsyfShBTXxQTSkvKTsKKyAgICAgICB9KTsKKyAgICAgPC9kb2M6
c2NlbmFyaW8+CisgICA8L2RvYzpleGFtcGxlPgorICovCitkYXRlRmlsdGVyLiRpbmplY3QgPSBb
JyRsb2NhbGUnXTsKK2Z1bmN0aW9uIGRhdGVGaWx0ZXIoJGxvY2FsZSkgeworCisKKyAgdmFyIFJf
SVNPODYwMV9TVFIgPSAvXihcZHs0fSktPyhcZFxkKS0/KFxkXGQpKD86VChcZFxkKSg/Ojo/KFxk
XGQpKD86Oj8oXGRcZCkoPzpcLihcZCspKT8pPyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkpPyk/
JC87CisgIGZ1bmN0aW9uIGpzb25TdHJpbmdUb0RhdGUoc3RyaW5nKXsKKyAgICB2YXIgbWF0Y2g7
CisgICAgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKFJfSVNPODYwMV9TVFIpKSB7CisgICAgICB2
YXIgZGF0ZSA9IG5ldyBEYXRlKDApLAorICAgICAgICAgIHR6SG91ciA9IDAsCisgICAgICAgICAg
dHpNaW4gID0gMDsKKyAgICAgIGlmIChtYXRjaFs5XSkgeworICAgICAgICB0ekhvdXIgPSBpbnQo
bWF0Y2hbOV0gKyBtYXRjaFsxMF0pOworICAgICAgICB0ek1pbiA9IGludChtYXRjaFs5XSArIG1h
dGNoWzExXSk7CisgICAgICB9CisgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGludChtYXRjaFsx
XSksIGludChtYXRjaFsyXSkgLSAxLCBpbnQobWF0Y2hbM10pKTsKKyAgICAgIGRhdGUuc2V0VVRD
SG91cnMoaW50KG1hdGNoWzRdfHwwKSAtIHR6SG91ciwgaW50KG1hdGNoWzVdfHwwKSAtIHR6TWlu
LCBpbnQobWF0Y2hbNl18fDApLCBpbnQobWF0Y2hbN118fDApKTsKKyAgICAgIHJldHVybiBkYXRl
OworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nOworICB9CisKKworICByZXR1cm4gZnVuY3Rpb24o
ZGF0ZSwgZm9ybWF0KSB7CisgICAgdmFyIHRleHQgPSAnJywKKyAgICAgICAgcGFydHMgPSBbXSwK
KyAgICAgICAgZm4sIG1hdGNoOworCisgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICdtZWRpdW1EYXRl
JzsKKyAgICBmb3JtYXQgPSAkbG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFNbZm9ybWF0XSB8fCBmb3Jt
YXQ7CisgICAgaWYgKGlzU3RyaW5nKGRhdGUpKSB7CisgICAgICBpZiAoTlVNQkVSX1NUUklORy50
ZXN0KGRhdGUpKSB7CisgICAgICAgIGRhdGUgPSBpbnQoZGF0ZSk7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBkYXRlID0ganNvblN0cmluZ1RvRGF0ZShkYXRlKTsKKyAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoaXNOdW1iZXIoZGF0ZSkpIHsKKyAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKTsK
KyAgICB9CisKKyAgICBpZiAoIWlzRGF0ZShkYXRlKSkgeworICAgICAgcmV0dXJuIGRhdGU7Cisg
ICAgfQorCisgICAgd2hpbGUoZm9ybWF0KSB7CisgICAgICBtYXRjaCA9IERBVEVfRk9STUFUU19T
UExJVC5leGVjKGZvcm1hdCk7CisgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgcGFydHMgPSBj
b25jYXQocGFydHMsIG1hdGNoLCAxKTsKKyAgICAgICAgZm9ybWF0ID0gcGFydHMucG9wKCk7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBwYXJ0cy5wdXNoKGZvcm1hdCk7CisgICAgICAgIGZvcm1h
dCA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgZm9yRWFjaChwYXJ0cywgZnVuY3Rpb24o
dmFsdWUpeworICAgICAgZm4gPSBEQVRFX0ZPUk1BVFNbdmFsdWVdOworICAgICAgdGV4dCArPSBm
biA/IGZuKGRhdGUsICRsb2NhbGUuREFURVRJTUVfRk9STUFUUykKKyAgICAgICAgICAgICAgICAg
OiB2YWx1ZS5yZXBsYWNlKC8oXid8JyQpL2csICcnKS5yZXBsYWNlKC8nJy9nLCAiJyIpOworICAg
IH0pOworCisgICAgcmV0dXJuIHRleHQ7CisgIH07Cit9CisKKworLyoqCisgKiBAbmdkb2MgZmls
dGVyCisgKiBAbmFtZSBuZy5maWx0ZXI6anNvbgorICogQGZ1bmN0aW9uCisgKgorICogQGRlc2Ny
aXB0aW9uCisgKiAgIEFsbG93cyB5b3UgdG8gY29udmVydCBhIEphdmFTY3JpcHQgb2JqZWN0IGlu
dG8gSlNPTiBzdHJpbmcuCisgKgorICogICBUaGlzIGZpbHRlciBpcyBtb3N0bHkgdXNlZnVsIGZv
ciBkZWJ1Z2dpbmcuIFdoZW4gdXNpbmcgdGhlIGRvdWJsZSBjdXJseSB7e3ZhbHVlfX0gbm90YXRp
b24KKyAqICAgdGhlIGJpbmRpbmcgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gSlNPTi4K
KyAqCisgKiBAcGFyYW0geyp9IG9iamVjdCBBbnkgSmF2YVNjcmlwdCBvYmplY3QgKGluY2x1ZGlu
ZyBhcnJheXMgYW5kIHByaW1pdGl2ZSB0eXBlcykgdG8gZmlsdGVyLgorICogQHJldHVybnMge3N0
cmluZ30gSlNPTiBzdHJpbmcuCisgKgorICoKKyAqIEBleGFtcGxlOgorICAgPGRvYzpleGFtcGxl
PgorICAgICA8ZG9jOnNvdXJjZT4KKyAgICAgICA8cHJlPnt7IHsnbmFtZSc6J3ZhbHVlJ30gfCBq
c29uIH19PC9wcmU+CisgICAgIDwvZG9jOnNvdXJjZT4KKyAgICAgPGRvYzpzY2VuYXJpbz4KKyAg
ICAgICBpdCgnc2hvdWxkIGpzb25pZnkgZmlsdGVyZWQgb2JqZWN0cycsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgZXhwZWN0KGJpbmRpbmcoInsnbmFtZSc6J3ZhbHVlJ30iKSkudG9NYXRjaCgvXHtc
biAgIm5hbWUiOiA/InZhbHVlIlxufS8pOworICAgICAgIH0pOworICAgICA8L2RvYzpzY2VuYXJp
bz4KKyAgIDwvZG9jOmV4YW1wbGU+CisgKgorICovCitmdW5jdGlvbiBqc29uRmlsdGVyKCkgewor
ICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7CisgICAgcmV0dXJuIHRvSnNvbihvYmplY3QsIHRy
dWUpOworICB9OworfQorCisKKy8qKgorICogQG5nZG9jIGZpbHRlcgorICogQG5hbWUgbmcuZmls
dGVyOmxvd2VyY2FzZQorICogQGZ1bmN0aW9uCisgKiBAZGVzY3JpcHRpb24KKyAqIENvbnZlcnRz
IHN0cmluZyB0byBsb3dlcmNhc2UuCisgKiBAc2VlIGFuZ3VsYXIubG93ZXJjYXNlCisgKi8KK3Zh
ciBsb3dlcmNhc2VGaWx0ZXIgPSB2YWx1ZUZuKGxvd2VyY2FzZSk7CisKKworLyoqCisgKiBAbmdk
b2MgZmlsdGVyCisgKiBAbmFtZSBuZy5maWx0ZXI6dXBwZXJjYXNlCisgKiBAZnVuY3Rpb24KKyAq
IEBkZXNjcmlwdGlvbgorICogQ29udmVydHMgc3RyaW5nIHRvIHVwcGVyY2FzZS4KKyAqIEBzZWUg
YW5ndWxhci51cHBlcmNhc2UKKyAqLwordmFyIHVwcGVyY2FzZUZpbHRlciA9IHZhbHVlRm4odXBw
ZXJjYXNlKTsKKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIG5nLmZpbHRlcjps
aW1pdFRvCisgKiBAZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIENyZWF0ZXMgYSBu
ZXcgYXJyYXkgY29udGFpbmluZyBvbmx5IGEgc3BlY2lmaWVkIG51bWJlciBvZiBlbGVtZW50cyBp
biBhbiBhcnJheS4gVGhlIGVsZW1lbnRzCisgKiBhcmUgdGFrZW4gZnJvbSBlaXRoZXIgdGhlIGJl
Z2lubmluZyBvciB0aGUgZW5kIG9mIHRoZSBzb3VyY2UgYXJyYXksIGFzIHNwZWNpZmllZCBieSB0
aGUKKyAqIHZhbHVlIGFuZCBzaWduIChwb3NpdGl2ZSBvciBuZWdhdGl2ZSkgb2YgYGxpbWl0YC4K
KyAqCisgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYXVnbWVudCB0aGUgYEFycmF5
YCB0eXBlIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMuIFNlZQorICoge0BsaW5rIG5nLiRmaWx0ZXJ9
IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEFuZ3VsYXIgYXJyYXlzLgorICoKKyAqIEBwYXJh
bSB7QXJyYXl9IGFycmF5IFNvdXJjZSBhcnJheSB0byBiZSBsaW1pdGVkLgorICogQHBhcmFtIHtz
dHJpbmd8TnVtYmVyfSBsaW1pdCBUaGUgbGVuZ3RoIG9mIHRoZSByZXR1cm5lZCBhcnJheS4gSWYg
dGhlIGBsaW1pdGAgbnVtYmVyIGlzCisgKiAgICAgcG9zaXRpdmUsIGBsaW1pdGAgbnVtYmVyIG9m
IGl0ZW1zIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc291cmNlIGFycmF5IGFyZSBjb3BpZWQu
CisgKiAgICAgSWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSwgYGxpbWl0YCBudW1iZXIgIG9mIGl0
ZW1zIGZyb20gdGhlIGVuZCBvZiB0aGUgc291cmNlIGFycmF5IGFyZQorICogICAgIGNvcGllZC4g
VGhlIGBsaW1pdGAgd2lsbCBiZSB0cmltbWVkIGlmIGl0IGV4Y2VlZHMgYGFycmF5Lmxlbmd0aGAK
KyAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgc3ViLWFycmF5IG9mIGxlbmd0aCBgbGltaXRgIG9y
IGxlc3MgaWYgaW5wdXQgYXJyYXkgaGFkIGxlc3MgdGhhbiBgbGltaXRgCisgKiAgICAgZWxlbWVu
dHMuCisgKgorICogQGV4YW1wbGUKKyAgIDxkb2M6ZXhhbXBsZT4KKyAgICAgPGRvYzpzb3VyY2U+
CisgICAgICAgPHNjcmlwdD4KKyAgICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7CisgICAg
ICAgICAgICRzY29wZS5udW1iZXJzID0gWzEsMiwzLDQsNSw2LDcsOCw5XTsKKyAgICAgICAgICAg
JHNjb3BlLmxpbWl0ID0gMzsKKyAgICAgICAgIH0KKyAgICAgICA8L3NjcmlwdD4KKyAgICAgICA8
ZGl2IG5nLWNvbnRyb2xsZXI9IkN0cmwiPgorICAgICAgICAgTGltaXQge3tudW1iZXJzfX0gdG86
IDxpbnB1dCB0eXBlPSJpbnRlZ2VyIiBuZy1tb2RlbD0ibGltaXQiPgorICAgICAgICAgPHA+T3V0
cHV0OiB7eyBudW1iZXJzIHwgbGltaXRUbzpsaW1pdCB9fTwvcD4KKyAgICAgICA8L2Rpdj4KKyAg
ICAgPC9kb2M6c291cmNlPgorICAgICA8ZG9jOnNjZW5hcmlvPgorICAgICAgIGl0KCdzaG91bGQg
bGltaXQgdGhlIG51bWVyIGFycmF5IHRvIGZpcnN0IHRocmVlIGl0ZW1zJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgaW5wdXRbbmctbW9k
ZWw9bGltaXRdJykudmFsKCkpLnRvQmUoJzMnKTsKKyAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdu
dW1iZXJzIHwgbGltaXRUbzpsaW1pdCcpKS50b0VxdWFsKCdbMSwyLDNdJyk7CisgICAgICAgfSk7
CisKKyAgICAgICBpdCgnc2hvdWxkIHVwZGF0ZSB0aGUgb3V0cHV0IHdoZW4gLTMgaXMgZW50ZXJl
ZCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgaW5wdXQoJ2xpbWl0JykuZW50ZXIoLTMpOworICAg
ICAgICAgZXhwZWN0KGJpbmRpbmcoJ251bWJlcnMgfCBsaW1pdFRvOmxpbWl0JykpLnRvRXF1YWwo
J1s3LDgsOV0nKTsKKyAgICAgICB9KTsKKworICAgICAgIGl0KCdzaG91bGQgbm90IGV4Y2VlZCB0
aGUgbWF4aW11bSBzaXplIG9mIGlucHV0IGFycmF5JywgZnVuY3Rpb24oKSB7CisgICAgICAgICBp
bnB1dCgnbGltaXQnKS5lbnRlcigxMDApOworICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ251bWJl
cnMgfCBsaW1pdFRvOmxpbWl0JykpLnRvRXF1YWwoJ1sxLDIsMyw0LDUsNiw3LDgsOV0nKTsKKyAg
ICAgICB9KTsKKyAgICAgPC9kb2M6c2NlbmFyaW8+CisgICA8L2RvYzpleGFtcGxlPgorICovCitm
dW5jdGlvbiBsaW1pdFRvRmlsdGVyKCl7CisgIHJldHVybiBmdW5jdGlvbihhcnJheSwgbGltaXQp
IHsKKyAgICBpZiAoIShhcnJheSBpbnN0YW5jZW9mIEFycmF5KSkgcmV0dXJuIGFycmF5OworICAg
IGxpbWl0ID0gaW50KGxpbWl0KTsKKyAgICB2YXIgb3V0ID0gW10sCisgICAgICBpLCBuOworCisg
ICAgLy8gY2hlY2sgdGhhdCBhcnJheSBpcyBpdGVyYWJsZQorICAgIGlmICghYXJyYXkgfHwgIShh
cnJheSBpbnN0YW5jZW9mIEFycmF5KSkKKyAgICAgIHJldHVybiBvdXQ7CisKKyAgICAvLyBpZiBh
YnMobGltaXQpIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGgsIHRyaW0gaXQKKyAgICBpZiAobGltaXQg
PiBhcnJheS5sZW5ndGgpCisgICAgICBsaW1pdCA9IGFycmF5Lmxlbmd0aDsKKyAgICBlbHNlIGlm
IChsaW1pdCA8IC1hcnJheS5sZW5ndGgpCisgICAgICBsaW1pdCA9IC1hcnJheS5sZW5ndGg7CisK
KyAgICBpZiAobGltaXQgPiAwKSB7CisgICAgICBpID0gMDsKKyAgICAgIG4gPSBsaW1pdDsKKyAg
ICB9IGVsc2UgeworICAgICAgaSA9IGFycmF5Lmxlbmd0aCArIGxpbWl0OworICAgICAgbiA9IGFy
cmF5Lmxlbmd0aDsKKyAgICB9CisKKyAgICBmb3IgKDsgaTxuOyBpKyspIHsKKyAgICAgIG91dC5w
dXNoKGFycmF5W2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0OworICB9Cit9CisKKy8qKgor
ICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBuZy5maWx0ZXI6b3JkZXJCeQorICogQGZ1bmN0
aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBPcmRlcnMgYSBzcGVjaWZpZWQgYGFycmF5YCBi
eSB0aGUgYGV4cHJlc3Npb25gIHByZWRpY2F0ZS4KKyAqCisgKiBOb3RlOiB0aGlzIGZ1bmN0aW9u
IGlzIHVzZWQgdG8gYXVnbWVudCB0aGUgYEFycmF5YCB0eXBlIGluIEFuZ3VsYXIgZXhwcmVzc2lv
bnMuIFNlZQorICoge0BsaW5rIG5nLiRmaWx0ZXJ9IGZvciBtb3JlIGluZm9ybWF0b24gYWJvdXQg
QW5ndWxhciBhcnJheXMuCisgKgorICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRv
IHNvcnQuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKCopfHN0cmluZ3xBcnJheS48KGZ1bmN0aW9uKCop
fHN0cmluZyk+fSBleHByZXNzaW9uIEEgcHJlZGljYXRlIHRvIGJlCisgKiAgICB1c2VkIGJ5IHRo
ZSBjb21wYXJhdG9yIHRvIGRldGVybWluZSB0aGUgb3JkZXIgb2YgZWxlbWVudHMuCisgKgorICog
ICAgQ2FuIGJlIG9uZSBvZjoKKyAqCisgKiAgICAtIGBmdW5jdGlvbmA6IEdldHRlciBmdW5jdGlv
bi4gVGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgc29ydGVkIHVzaW5nIHRoZQor
ICogICAgICBgPGAsIGA9YCwgYD5gIG9wZXJhdG9yLgorICogICAgLSBgc3RyaW5nYDogQW4gQW5n
dWxhciBleHByZXNzaW9uIHdoaWNoIGV2YWx1YXRlcyB0byBhbiBvYmplY3QgdG8gb3JkZXIgYnks
IHN1Y2ggYXMgJ25hbWUnCisgKiAgICAgIHRvIHNvcnQgYnkgYSBwcm9wZXJ0eSBjYWxsZWQgJ25h
bWUnLiBPcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYCtgIG9yIGAtYCB0byBjb250cm9sCisgKiAg
ICAgIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIHNvcnQgb3JkZXIgKGZvciBleGFtcGxlLCArbmFt
ZSBvciAtbmFtZSkuCisgKiAgICAtIGBBcnJheWA6IEFuIGFycmF5IG9mIGZ1bmN0aW9uIG9yIHN0
cmluZyBwcmVkaWNhdGVzLiBUaGUgZmlyc3QgcHJlZGljYXRlIGluIHRoZSBhcnJheQorICogICAg
ICBpcyB1c2VkIGZvciBzb3J0aW5nLCBidXQgd2hlbiB0d28gaXRlbXMgYXJlIGVxdWl2YWxlbnQs
IHRoZSBuZXh0IHByZWRpY2F0ZSBpcyB1c2VkLgorICoKKyAqIEBwYXJhbSB7Ym9vbGVhbj19IHJl
dmVyc2UgUmV2ZXJzZSB0aGUgb3JkZXIgdGhlIGFycmF5LgorICogQHJldHVybnMge0FycmF5fSBT
b3J0ZWQgY29weSBvZiB0aGUgc291cmNlIGFycmF5LgorICoKKyAqIEBleGFtcGxlCisgICA8ZG9j
OmV4YW1wbGU+CisgICAgIDxkb2M6c291cmNlPgorICAgICAgIDxzY3JpcHQ+CisgICAgICAgICBm
dW5jdGlvbiBDdHJsKCRzY29wZSkgeworICAgICAgICAgICAkc2NvcGUuZnJpZW5kcyA9CisgICAg
ICAgICAgICAgICBbe25hbWU6J0pvaG4nLCBwaG9uZTonNTU1LTEyMTInLCBhZ2U6MTB9LAorICAg
ICAgICAgICAgICAgIHtuYW1lOidNYXJ5JywgcGhvbmU6JzU1NS05ODc2JywgYWdlOjE5fSwKKyAg
ICAgICAgICAgICAgICB7bmFtZTonTWlrZScsIHBob25lOic1NTUtNDMyMScsIGFnZToyMX0sCisg
ICAgICAgICAgICAgICAge25hbWU6J0FkYW0nLCBwaG9uZTonNTU1LTU2NzgnLCBhZ2U6MzV9LAor
ICAgICAgICAgICAgICAgIHtuYW1lOidKdWxpZScsIHBob25lOic1NTUtODc2NScsIGFnZToyOX1d
CisgICAgICAgICAgICRzY29wZS5wcmVkaWNhdGUgPSAnLWFnZSc7CisgICAgICAgICB9CisgICAg
ICAgPC9zY3JpcHQ+CisgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJDdHJsIj4KKyAgICAgICAg
IDxwcmU+U29ydGluZyBwcmVkaWNhdGUgPSB7e3ByZWRpY2F0ZX19OyByZXZlcnNlID0ge3tyZXZl
cnNlfX08L3ByZT4KKyAgICAgICAgIDxoci8+CisgICAgICAgICBbIDxhIGhyZWY9IiIgbmctY2xp
Y2s9InByZWRpY2F0ZT0nJyI+dW5zb3J0ZWQ8L2E+IF0KKyAgICAgICAgIDx0YWJsZSBjbGFzcz0i
ZnJpZW5kIj4KKyAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgIDx0aD48YSBocmVmPSIiIG5n
LWNsaWNrPSJwcmVkaWNhdGUgPSAnbmFtZSc7IHJldmVyc2U9ZmFsc2UiPk5hbWU8L2E+CisgICAg
ICAgICAgICAgICAgICg8YSBocmVmIG5nLWNsaWNrPSJwcmVkaWNhdGUgPSAnLW5hbWUnOyByZXZl
cnNlPWZhbHNlIj5ePC9hPik8L3RoPgorICAgICAgICAgICAgIDx0aD48YSBocmVmPSIiIG5nLWNs
aWNrPSJwcmVkaWNhdGUgPSAncGhvbmUnOyByZXZlcnNlPSFyZXZlcnNlIj5QaG9uZSBOdW1iZXI8
L2E+PC90aD4KKyAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIiBuZy1jbGljaz0icHJlZGljYXRl
ID0gJ2FnZSc7IHJldmVyc2U9IXJldmVyc2UiPkFnZTwvYT48L3RoPgorICAgICAgICAgICA8L3Ry
PgorICAgICAgICAgICA8dHIgbmctcmVwZWF0PSJmcmllbmQgaW4gZnJpZW5kcyB8IG9yZGVyQnk6
cHJlZGljYXRlOnJldmVyc2UiPgorICAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5uYW1lfX08L3Rk
PgorICAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5waG9uZX19PC90ZD4KKyAgICAgICAgICAgICA8
dGQ+e3tmcmllbmQuYWdlfX08L3RkPgorICAgICAgICAgICA8L3RyPgorICAgICAgICAgPC90YWJs
ZT4KKyAgICAgICA8L2Rpdj4KKyAgICAgPC9kb2M6c291cmNlPgorICAgICA8ZG9jOnNjZW5hcmlv
PgorICAgICAgIGl0KCdzaG91bGQgYmUgcmV2ZXJzZSBvcmRlcmVkIGJ5IGFnZWQnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdwcmVkaWNhdGUnKSkudG9CZSgnLWFnZScp
OworICAgICAgICAgZXhwZWN0KHJlcGVhdGVyKCd0YWJsZS5mcmllbmQnLCAnZnJpZW5kIGluIGZy
aWVuZHMnKS5jb2x1bW4oJ2ZyaWVuZC5hZ2UnKSkuCisgICAgICAgICAgIHRvRXF1YWwoWyczNScs
ICcyOScsICcyMScsICcxOScsICcxMCddKTsKKyAgICAgICAgIGV4cGVjdChyZXBlYXRlcigndGFi
bGUuZnJpZW5kJywgJ2ZyaWVuZCBpbiBmcmllbmRzJykuY29sdW1uKCdmcmllbmQubmFtZScpKS4K
KyAgICAgICAgICAgdG9FcXVhbChbJ0FkYW0nLCAnSnVsaWUnLCAnTWlrZScsICdNYXJ5JywgJ0pv
aG4nXSk7CisgICAgICAgfSk7CisKKyAgICAgICBpdCgnc2hvdWxkIHJlb3JkZXIgdGhlIHRhYmxl
IHdoZW4gdXNlciBzZWxlY3RzIGRpZmZlcmVudCBwcmVkaWNhdGUnLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgIGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIGE6Y29udGFpbnMoIk5hbWUiKScpLmNs
aWNrKCk7CisgICAgICAgICBleHBlY3QocmVwZWF0ZXIoJ3RhYmxlLmZyaWVuZCcsICdmcmllbmQg
aW4gZnJpZW5kcycpLmNvbHVtbignZnJpZW5kLm5hbWUnKSkuCisgICAgICAgICAgIHRvRXF1YWwo
WydBZGFtJywgJ0pvaG4nLCAnSnVsaWUnLCAnTWFyeScsICdNaWtlJ10pOworICAgICAgICAgZXhw
ZWN0KHJlcGVhdGVyKCd0YWJsZS5mcmllbmQnLCAnZnJpZW5kIGluIGZyaWVuZHMnKS5jb2x1bW4o
J2ZyaWVuZC5hZ2UnKSkuCisgICAgICAgICAgIHRvRXF1YWwoWyczNScsICcxMCcsICcyOScsICcx
OScsICcyMSddKTsKKworICAgICAgICAgZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgYTpjb250
YWlucygiUGhvbmUiKScpLmNsaWNrKCk7CisgICAgICAgICBleHBlY3QocmVwZWF0ZXIoJ3RhYmxl
LmZyaWVuZCcsICdmcmllbmQgaW4gZnJpZW5kcycpLmNvbHVtbignZnJpZW5kLnBob25lJykpLgor
ICAgICAgICAgICB0b0VxdWFsKFsnNTU1LTk4NzYnLCAnNTU1LTg3NjUnLCAnNTU1LTU2NzgnLCAn
NTU1LTQzMjEnLCAnNTU1LTEyMTInXSk7CisgICAgICAgICBleHBlY3QocmVwZWF0ZXIoJ3RhYmxl
LmZyaWVuZCcsICdmcmllbmQgaW4gZnJpZW5kcycpLmNvbHVtbignZnJpZW5kLm5hbWUnKSkuCisg
ICAgICAgICAgIHRvRXF1YWwoWydNYXJ5JywgJ0p1bGllJywgJ0FkYW0nLCAnTWlrZScsICdKb2hu
J10pOworICAgICAgIH0pOworICAgICA8L2RvYzpzY2VuYXJpbz4KKyAgIDwvZG9jOmV4YW1wbGU+
CisgKi8KK29yZGVyQnlGaWx0ZXIuJGluamVjdCA9IFsnJHBhcnNlJ107CitmdW5jdGlvbiBvcmRl
ckJ5RmlsdGVyKCRwYXJzZSl7CisgIHJldHVybiBmdW5jdGlvbihhcnJheSwgc29ydFByZWRpY2F0
ZSwgcmV2ZXJzZU9yZGVyKSB7CisgICAgaWYgKCFpc0FycmF5KGFycmF5KSkgcmV0dXJuIGFycmF5
OworICAgIGlmICghc29ydFByZWRpY2F0ZSkgcmV0dXJuIGFycmF5OworICAgIHNvcnRQcmVkaWNh
dGUgPSBpc0FycmF5KHNvcnRQcmVkaWNhdGUpID8gc29ydFByZWRpY2F0ZTogW3NvcnRQcmVkaWNh
dGVdOworICAgIHNvcnRQcmVkaWNhdGUgPSBtYXAoc29ydFByZWRpY2F0ZSwgZnVuY3Rpb24ocHJl
ZGljYXRlKXsKKyAgICAgIHZhciBkZXNjZW5kaW5nID0gZmFsc2UsIGdldCA9IHByZWRpY2F0ZSB8
fCBpZGVudGl0eTsKKyAgICAgIGlmIChpc1N0cmluZyhwcmVkaWNhdGUpKSB7CisgICAgICAgIGlm
ICgocHJlZGljYXRlLmNoYXJBdCgwKSA9PSAnKycgfHwgcHJlZGljYXRlLmNoYXJBdCgwKSA9PSAn
LScpKSB7CisgICAgICAgICAgZGVzY2VuZGluZyA9IHByZWRpY2F0ZS5jaGFyQXQoMCkgPT0gJy0n
OworICAgICAgICAgIHByZWRpY2F0ZSA9IHByZWRpY2F0ZS5zdWJzdHJpbmcoMSk7CisgICAgICAg
IH0KKyAgICAgICAgZ2V0ID0gJHBhcnNlKHByZWRpY2F0ZSk7CisgICAgICB9CisgICAgICByZXR1
cm4gcmV2ZXJzZUNvbXBhcmF0b3IoZnVuY3Rpb24oYSxiKXsKKyAgICAgICAgcmV0dXJuIGNvbXBh
cmUoZ2V0KGEpLGdldChiKSk7CisgICAgICB9LCBkZXNjZW5kaW5nKTsKKyAgICB9KTsKKyAgICB2
YXIgYXJyYXlDb3B5ID0gW107CisgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3Ro
OyBpKyspIHsgYXJyYXlDb3B5LnB1c2goYXJyYXlbaV0pOyB9CisgICAgcmV0dXJuIGFycmF5Q29w
eS5zb3J0KHJldmVyc2VDb21wYXJhdG9yKGNvbXBhcmF0b3IsIHJldmVyc2VPcmRlcikpOworCisg
ICAgZnVuY3Rpb24gY29tcGFyYXRvcihvMSwgbzIpeworICAgICAgZm9yICggdmFyIGkgPSAwOyBp
IDwgc29ydFByZWRpY2F0ZS5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgY29tcCA9IHNvcnRQ
cmVkaWNhdGVbaV0obzEsIG8yKTsKKyAgICAgICAgaWYgKGNvbXAgIT09IDApIHJldHVybiBjb21w
OworICAgICAgfQorICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGZ1bmN0aW9uIHJldmVyc2VD
b21wYXJhdG9yKGNvbXAsIGRlc2NlbmRpbmcpIHsKKyAgICAgIHJldHVybiB0b0Jvb2xlYW4oZGVz
Y2VuZGluZykKKyAgICAgICAgICA/IGZ1bmN0aW9uKGEsYil7cmV0dXJuIGNvbXAoYixhKTt9Cisg
ICAgICAgICAgOiBjb21wOworICAgIH0KKyAgICBmdW5jdGlvbiBjb21wYXJlKHYxLCB2Mil7Cisg
ICAgICB2YXIgdDEgPSB0eXBlb2YgdjE7CisgICAgICB2YXIgdDIgPSB0eXBlb2YgdjI7CisgICAg
ICBpZiAodDEgPT0gdDIpIHsKKyAgICAgICAgaWYgKHQxID09ICJzdHJpbmciKSB2MSA9IHYxLnRv
TG93ZXJDYXNlKCk7CisgICAgICAgIGlmICh0MSA9PSAic3RyaW5nIikgdjIgPSB2Mi50b0xvd2Vy
Q2FzZSgpOworICAgICAgICBpZiAodjEgPT09IHYyKSByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IHYxIDwgdjIgPyAtMSA6IDE7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gdDEgPCB0
MiA/IC0xIDogMTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gbmdEaXJlY3Rp
dmUoZGlyZWN0aXZlKSB7CisgIGlmIChpc0Z1bmN0aW9uKGRpcmVjdGl2ZSkpIHsKKyAgICBkaXJl
Y3RpdmUgPSB7CisgICAgICBsaW5rOiBkaXJlY3RpdmUKKyAgICB9CisgIH0KKyAgZGlyZWN0aXZl
LnJlc3RyaWN0ID0gZGlyZWN0aXZlLnJlc3RyaWN0IHx8ICdBQyc7CisgIHJldHVybiB2YWx1ZUZu
KGRpcmVjdGl2ZSk7Cit9CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmcu
ZGlyZWN0aXZlOmEKKyAqIEByZXN0cmljdCBFCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBNb2Rp
ZmllcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBodG1sIEEgdGFnLCBzbyB0aGF0IHRoZSBkZWZh
dWx0IGFjdGlvbiBpcyBwcmV2ZW50ZWQgd2hlbiBocmVmCisgKiBhdHRyaWJ1dGUgaXMgZW1wdHku
CisgKgorICogVGhlIHJlYXNvbmluZyBmb3IgdGhpcyBjaGFuZ2UgaXMgdG8gYWxsb3cgZWFzeSBj
cmVhdGlvbiBvZiBhY3Rpb24gbGlua3Mgd2l0aCBgbmdDbGlja2AgZGlyZWN0aXZlCisgKiB3aXRo
b3V0IGNoYW5naW5nIHRoZSBsb2NhdGlvbiBvciBjYXVzaW5nIHBhZ2UgcmVsb2FkcywgZS5nLjoK
KyAqIGA8YSBocmVmPSIiIG5nLWNsaWNrPSJtb2RlbC4kc2F2ZSgpIj5TYXZlPC9hPmAKKyAqLwor
dmFyIGh0bWxBbmNob3JEaXJlY3RpdmUgPSB2YWx1ZUZuKHsKKyAgcmVzdHJpY3Q6ICdFJywKKyAg
Y29tcGlsZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0cikgeworCisgICAgaWYgKG1zaWUgPD0gOCkg
eworCisgICAgICAvLyB0dXJuIDxhIGhyZWYgbmctY2xpY2s9Ii4uIj5saW5rPC9hPiBpbnRvIGEg
c3R5bGFibGUgbGluayBpbiBJRQorICAgICAgLy8gYnV0IG9ubHkgaWYgaXQgZG9lc24ndCBoYXZl
IG5hbWUgYXR0cmlidXRlLCBpbiB3aGljaCBjYXNlIGl0J3MgYW4gYW5jaG9yCisgICAgICBpZiAo
IWF0dHIuaHJlZiAmJiAhYXR0ci5uYW1lKSB7CisgICAgICAgIGF0dHIuJHNldCgnaHJlZicsICcn
KTsKKyAgICAgIH0KKworICAgICAgLy8gYWRkIGEgY29tbWVudCBub2RlIHRvIGFuY2hvcnMgdG8g
d29ya2Fyb3VuZCBJRSBidWcgdGhhdCBjYXVzZXMgZWxlbWVudCBjb250ZW50IHRvIGJlIHJlc2V0
CisgICAgICAvLyB0byBuZXcgYXR0cmlidXRlIGNvbnRlbnQgaWYgYXR0cmlidXRlIGlzIHVwZGF0
ZWQgd2l0aCB2YWx1ZSBjb250YWluaW5nIEAgYW5kIGVsZW1lbnQgYWxzbworICAgICAgLy8gY29u
dGFpbnMgdmFsdWUgd2l0aCBACisgICAgICAvLyBzZWUgaXNzdWUgIzE5NDkKKyAgICAgIGVsZW1l
bnQuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJ0lFIGZpeCcpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQpIHsKKyAgICAgIGVsZW1lbnQuYmluZCgn
Y2xpY2snLCBmdW5jdGlvbihldmVudCl7CisgICAgICAgIC8vIGlmIHdlIGhhdmUgbm8gaHJlZiB1
cmwsIHRoZW4gZG9uJ3QgbmF2aWdhdGUgYW55d2hlcmUuCisgICAgICAgIGlmICghZWxlbWVudC5h
dHRyKCdocmVmJykpIHsKKyAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAg
ICB9CisgICAgICB9KTsKKyAgICB9CisgIH0KK30pOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3Rp
dmUKKyAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ0hyZWYKKyAqIEByZXN0cmljdCBBCisgKgorICog
QGRlc2NyaXB0aW9uCisgKiBVc2luZyBBbmd1bGFyIG1hcmt1cCBsaWtlIHt7aGFzaH19IGluIGFu
IGhyZWYgYXR0cmlidXRlIG1ha2VzCisgKiB0aGUgcGFnZSBvcGVuIHRvIGEgd3JvbmcgVVJMLCBp
ZiB0aGUgdXNlciBjbGlja3MgdGhhdCBsaW5rIGJlZm9yZQorICogYW5ndWxhciBoYXMgYSBjaGFu
Y2UgdG8gcmVwbGFjZSB0aGUge3toYXNofX0gd2l0aCBhY3R1YWwgVVJMLCB0aGUKKyAqIGxpbmsg
d2lsbCBiZSBicm9rZW4gYW5kIHdpbGwgbW9zdCBsaWtlbHkgcmV0dXJuIGEgNDA0IGVycm9yLgor
ICogVGhlIGBuZ0hyZWZgIGRpcmVjdGl2ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtLgorICoKKyAqIFRo
ZSBidWdneSB3YXkgdG8gd3JpdGUgaXQ6CisgKiA8cHJlPgorICogPGEgaHJlZj0iaHR0cDovL3d3
dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7aGFzaH19Ii8+CisgKiA8L3ByZT4KKyAqCisgKiBUaGUg
Y29ycmVjdCB3YXkgdG8gd3JpdGUgaXQ6CisgKiA8cHJlPgorICogPGEgbmctaHJlZj0iaHR0cDov
L3d3dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7aGFzaH19Ii8+CisgKiA8L3ByZT4KKyAqCisgKiBA
ZWxlbWVudCBBCisgKiBAcGFyYW0ge3RlbXBsYXRlfSBuZ0hyZWYgYW55IHN0cmluZyB3aGljaCBj
YW4gY29udGFpbiBge3t9fWAgbWFya3VwLgorICoKKyAqIEBleGFtcGxlCisgKiBUaGlzIGV4YW1w
bGUgdXNlcyBgbGlua2AgdmFyaWFibGUgaW5zaWRlIGBocmVmYCBhdHRyaWJ1dGU6CisgICAgPGRv
YzpleGFtcGxlPgorICAgICAgPGRvYzpzb3VyY2U+CisgICAgICAgIDxpbnB1dCBuZy1tb2RlbD0i
dmFsdWUiIC8+PGJyIC8+CisgICAgICAgIDxhIGlkPSJsaW5rLTEiIGhyZWYgbmctY2xpY2s9InZh
bHVlID0gMSI+bGluayAxPC9hPiAobGluaywgZG9uJ3QgcmVsb2FkKTxiciAvPgorICAgICAgICA8
YSBpZD0ibGluay0yIiBocmVmPSIiIG5nLWNsaWNrPSJ2YWx1ZSA9IDIiPmxpbmsgMjwvYT4gKGxp
bmssIGRvbid0IHJlbG9hZCk8YnIgLz4KKyAgICAgICAgPGEgaWQ9ImxpbmstMyIgbmctaHJlZj0i
L3t7JzEyMyd9fSI+bGluayAzPC9hPiAobGluaywgcmVsb2FkISk8YnIgLz4KKyAgICAgICAgPGEg
aWQ9ImxpbmstNCIgaHJlZj0iIiBuYW1lPSJ4eCIgbmctY2xpY2s9InZhbHVlID0gNCI+YW5jaG9y
PC9hPiAobGluaywgZG9uJ3QgcmVsb2FkKTxiciAvPgorICAgICAgICA8YSBpZD0ibGluay01IiBu
YW1lPSJ4eHgiIG5nLWNsaWNrPSJ2YWx1ZSA9IDUiPmFuY2hvcjwvYT4gKG5vIGxpbmspPGJyIC8+
CisgICAgICAgIDxhIGlkPSJsaW5rLTYiIG5nLWhyZWY9Int7dmFsdWV9fSI+bGluazwvYT4gKGxp
bmssIGNoYW5nZSBsb2NhdGlvbikKKyAgICAgIDwvZG9jOnNvdXJjZT4KKyAgICAgIDxkb2M6c2Nl
bmFyaW8+CisgICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBuZy1jbGljayBidXQgbm90IHJlbG9h
ZCB3aGVuIGhyZWYgd2l0aG91dCB2YWx1ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGVsZW1l
bnQoJyNsaW5rLTEnKS5jbGljaygpOworICAgICAgICAgIGV4cGVjdChpbnB1dCgndmFsdWUnKS52
YWwoKSkudG9FcXVhbCgnMScpOworICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcjbGluay0xJyku
YXR0cignaHJlZicpKS50b0JlKCIiKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3Vs
ZCBleGVjdXRlIG5nLWNsaWNrIGJ1dCBub3QgcmVsb2FkIHdoZW4gaHJlZiBlbXB0eSBzdHJpbmcn
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBlbGVtZW50KCcjbGluay0yJykuY2xpY2soKTsKKyAg
ICAgICAgICBleHBlY3QoaW5wdXQoJ3ZhbHVlJykudmFsKCkpLnRvRXF1YWwoJzInKTsKKyAgICAg
ICAgICBleHBlY3QoZWxlbWVudCgnI2xpbmstMicpLmF0dHIoJ2hyZWYnKSkudG9CZSgiIik7Cisg
ICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBuZy1jbGljayBhbmQgY2hh
bmdlIHVybCB3aGVuIG5nLWhyZWYgc3BlY2lmaWVkJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ZXhwZWN0KGVsZW1lbnQoJyNsaW5rLTMnKS5hdHRyKCdocmVmJykpLnRvQmUoIi8xMjMiKTsKKwor
ICAgICAgICAgIGVsZW1lbnQoJyNsaW5rLTMnKS5jbGljaygpOworICAgICAgICAgIGV4cGVjdChi
cm93c2VyKCkud2luZG93KCkucGF0aCgpKS50b0VxdWFsKCcvMTIzJyk7CisgICAgICAgIH0pOwor
CisgICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBuZy1jbGljayBidXQgbm90IHJlbG9hZCB3aGVu
IGhyZWYgZW1wdHkgc3RyaW5nIGFuZCBuYW1lIHNwZWNpZmllZCcsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgIGVsZW1lbnQoJyNsaW5rLTQnKS5jbGljaygpOworICAgICAgICAgIGV4cGVjdChpbnB1
dCgndmFsdWUnKS52YWwoKSkudG9FcXVhbCgnNCcpOworICAgICAgICAgIGV4cGVjdChlbGVtZW50
KCcjbGluay00JykuYXR0cignaHJlZicpKS50b0JlKCcnKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgaXQoJ3Nob3VsZCBleGVjdXRlIG5nLWNsaWNrIGJ1dCBub3QgcmVsb2FkIHdoZW4gbm8gaHJl
ZiBidXQgbmFtZSBzcGVjaWZpZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBlbGVtZW50KCcj
bGluay01JykuY2xpY2soKTsKKyAgICAgICAgICBleHBlY3QoaW5wdXQoJ3ZhbHVlJykudmFsKCkp
LnRvRXF1YWwoJzUnKTsKKyAgICAgICAgICBleHBlY3QoZWxlbWVudCgnI2xpbmstNScpLmF0dHIo
J2hyZWYnKSkudG9CZSh1bmRlZmluZWQpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hv
dWxkIG9ubHkgY2hhbmdlIHVybCB3aGVuIG9ubHkgbmctaHJlZicsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgIGlucHV0KCd2YWx1ZScpLmVudGVyKCc2Jyk7CisgICAgICAgICAgZXhwZWN0KGVsZW1l
bnQoJyNsaW5rLTYnKS5hdHRyKCdocmVmJykpLnRvQmUoJzYnKTsKKworICAgICAgICAgIGVsZW1l
bnQoJyNsaW5rLTYnKS5jbGljaygpOworICAgICAgICAgIGV4cGVjdChicm93c2VyKCkubG9jYXRp
b24oKS51cmwoKSkudG9FcXVhbCgnLzYnKTsKKyAgICAgICAgfSk7CisgICAgICA8L2RvYzpzY2Vu
YXJpbz4KKyAgICA8L2RvYzpleGFtcGxlPgorICovCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2
ZQorICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nU3JjCisgKiBAcmVzdHJpY3QgQQorICoKKyAqIEBk
ZXNjcmlwdGlvbgorICogVXNpbmcgQW5ndWxhciBtYXJrdXAgbGlrZSBge3toYXNofX1gIGluIGEg
YHNyY2AgYXR0cmlidXRlIGRvZXNuJ3QKKyAqIHdvcmsgcmlnaHQ6IFRoZSBicm93c2VyIHdpbGwg
ZmV0Y2ggZnJvbSB0aGUgVVJMIHdpdGggdGhlIGxpdGVyYWwKKyAqIHRleHQgYHt7aGFzaH19YCB1
bnRpbCBBbmd1bGFyIHJlcGxhY2VzIHRoZSBleHByZXNzaW9uIGluc2lkZQorICogYHt7aGFzaH19
YC4gVGhlIGBuZ1NyY2AgZGlyZWN0aXZlIHNvbHZlcyB0aGlzIHByb2JsZW0uCisgKgorICogVGhl
IGJ1Z2d5IHdheSB0byB3cml0ZSBpdDoKKyAqIDxwcmU+CisgKiA8aW1nIHNyYz0iaHR0cDovL3d3
dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7aGFzaH19Ii8+CisgKiA8L3ByZT4KKyAqCisgKiBUaGUg
Y29ycmVjdCB3YXkgdG8gd3JpdGUgaXQ6CisgKiA8cHJlPgorICogPGltZyBuZy1zcmM9Imh0dHA6
Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fSIvPgorICogPC9wcmU+CisgKgorICog
QGVsZW1lbnQgSU1HCisgKiBAcGFyYW0ge3RlbXBsYXRlfSBuZ1NyYyBhbnkgc3RyaW5nIHdoaWNo
IGNhbiBjb250YWluIGB7e319YCBtYXJrdXAuCisgKi8KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0
aXZlCisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdEaXNhYmxlZAorICogQHJlc3RyaWN0IEEKKyAq
CisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBUaGUgZm9sbG93aW5nIG1hcmt1cCB3aWxsIG1ha2Ug
dGhlIGJ1dHRvbiBlbmFibGVkIG9uIENocm9tZS9GaXJlZm94IGJ1dCBub3Qgb24gSUU4IGFuZCBv
bGRlciBJRXM6CisgKiA8cHJlPgorICogPGRpdiBuZy1pbml0PSJzY29wZSA9IHsgaXNEaXNhYmxl
ZDogZmFsc2UgfSI+CisgKiAgPGJ1dHRvbiBkaXNhYmxlZD0ie3tzY29wZS5pc0Rpc2FibGVkfX0i
PkRpc2FibGVkPC9idXR0b24+CisgKiA8L2Rpdj4KKyAqIDwvcHJlPgorICoKKyAqIFRoZSBIVE1M
IHNwZWNzIGRvIG5vdCByZXF1aXJlIGJyb3dzZXJzIHRvIHByZXNlcnZlIHRoZSBzcGVjaWFsIGF0
dHJpYnV0ZXMgc3VjaCBhcyBkaXNhYmxlZC4KKyAqIChUaGUgcHJlc2VuY2Ugb2YgdGhlbSBtZWFu
cyB0cnVlIGFuZCBhYnNlbmNlIG1lYW5zIGZhbHNlKQorICogVGhpcyBwcmV2ZW50cyB0aGUgYW5n
dWxhciBjb21waWxlciBmcm9tIGNvcnJlY3RseSByZXRyaWV2aW5nIHRoZSBiaW5kaW5nIGV4cHJl
c3Npb24uCisgKiBUbyBzb2x2ZSB0aGlzIHByb2JsZW0sIHdlIGludHJvZHVjZSB0aGUgYG5nRGlz
YWJsZWRgIGRpcmVjdGl2ZS4KKyAqCisgKiBAZXhhbXBsZQorICAgIDxkb2M6ZXhhbXBsZT4KKyAg
ICAgIDxkb2M6c291cmNlPgorICAgICAgICBDbGljayBtZSB0byB0b2dnbGU6IDxpbnB1dCB0eXBl
PSJjaGVja2JveCIgbmctbW9kZWw9ImNoZWNrZWQiPjxici8+CisgICAgICAgIDxidXR0b24gbmct
bW9kZWw9ImJ1dHRvbiIgbmctZGlzYWJsZWQ9ImNoZWNrZWQiPkJ1dHRvbjwvYnV0dG9uPgorICAg
ICAgPC9kb2M6c291cmNlPgorICAgICAgPGRvYzpzY2VuYXJpbz4KKyAgICAgICAgaXQoJ3Nob3Vs
ZCB0b2dnbGUgYnV0dG9uJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgZXhwZWN0KGVsZW1lbnQo
Jy5kb2MtZXhhbXBsZS1saXZlIDpidXR0b24nKS5wcm9wKCdkaXNhYmxlZCcpKS50b0JlRmFsc3ko
KTsKKyAgICAgICAgICBpbnB1dCgnY2hlY2tlZCcpLmNoZWNrKCk7CisgICAgICAgICAgZXhwZWN0
KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIDpidXR0b24nKS5wcm9wKCdkaXNhYmxlZCcpKS50
b0JlVHJ1dGh5KCk7CisgICAgICAgIH0pOworICAgICAgPC9kb2M6c2NlbmFyaW8+CisgICAgPC9k
b2M6ZXhhbXBsZT4KKyAqCisgKiBAZWxlbWVudCBJTlBVVAorICogQHBhcmFtIHtleHByZXNzaW9u
fSBuZ0Rpc2FibGVkIEFuZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkLgor
ICovCisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6
bmdDaGVja2VkCisgKiBAcmVzdHJpY3QgQQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIEhU
TUwgc3BlY3MgZG8gbm90IHJlcXVpcmUgYnJvd3NlcnMgdG8gcHJlc2VydmUgdGhlIHNwZWNpYWwg
YXR0cmlidXRlcyBzdWNoIGFzIGNoZWNrZWQuCisgKiAoVGhlIHByZXNlbmNlIG9mIHRoZW0gbWVh
bnMgdHJ1ZSBhbmQgYWJzZW5jZSBtZWFucyBmYWxzZSkKKyAqIFRoaXMgcHJldmVudHMgdGhlIGFu
Z3VsYXIgY29tcGlsZXIgZnJvbSBjb3JyZWN0bHkgcmV0cmlldmluZyB0aGUgYmluZGluZyBleHBy
ZXNzaW9uLgorICogVG8gc29sdmUgdGhpcyBwcm9ibGVtLCB3ZSBpbnRyb2R1Y2UgdGhlIGBuZ0No
ZWNrZWRgIGRpcmVjdGl2ZS4KKyAqIEBleGFtcGxlCisgICAgPGRvYzpleGFtcGxlPgorICAgICAg
PGRvYzpzb3VyY2U+CisgICAgICAgIENoZWNrIG1lIHRvIGNoZWNrIGJvdGg6IDxpbnB1dCB0eXBl
PSJjaGVja2JveCIgbmctbW9kZWw9Im1hc3RlciI+PGJyLz4KKyAgICAgICAgPGlucHV0IGlkPSJj
aGVja1NsYXZlIiB0eXBlPSJjaGVja2JveCIgbmctY2hlY2tlZD0ibWFzdGVyIj4KKyAgICAgIDwv
ZG9jOnNvdXJjZT4KKyAgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgIGl0KCdzaG91bGQgY2hl
Y2sgYm90aCBjaGVja0JveGVzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgZXhwZWN0KGVsZW1l
bnQoJy5kb2MtZXhhbXBsZS1saXZlICNjaGVja1NsYXZlJykucHJvcCgnY2hlY2tlZCcpKS50b0Jl
RmFsc3koKTsKKyAgICAgICAgICBpbnB1dCgnbWFzdGVyJykuY2hlY2soKTsKKyAgICAgICAgICBl
eHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgI2NoZWNrU2xhdmUnKS5wcm9wKCdjaGVj
a2VkJykpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgfSk7CisgICAgICA8L2RvYzpzY2VuYXJpbz4K
KyAgICA8L2RvYzpleGFtcGxlPgorICoKKyAqIEBlbGVtZW50IElOUFVUCisgKiBAcGFyYW0ge2V4
cHJlc3Npb259IG5nQ2hlY2tlZCBBbmd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1
YXRlZC4KKyAqLworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmcuZGly
ZWN0aXZlOm5nTXVsdGlwbGUKKyAqIEByZXN0cmljdCBBCisgKgorICogQGRlc2NyaXB0aW9uCisg
KiBUaGUgSFRNTCBzcGVjcyBkbyBub3QgcmVxdWlyZSBicm93c2VycyB0byBwcmVzZXJ2ZSB0aGUg
c3BlY2lhbCBhdHRyaWJ1dGVzIHN1Y2ggYXMgbXVsdGlwbGUuCisgKiAoVGhlIHByZXNlbmNlIG9m
IHRoZW0gbWVhbnMgdHJ1ZSBhbmQgYWJzZW5jZSBtZWFucyBmYWxzZSkKKyAqIFRoaXMgcHJldmVu
dHMgdGhlIGFuZ3VsYXIgY29tcGlsZXIgZnJvbSBjb3JyZWN0bHkgcmV0cmlldmluZyB0aGUgYmlu
ZGluZyBleHByZXNzaW9uLgorICogVG8gc29sdmUgdGhpcyBwcm9ibGVtLCB3ZSBpbnRyb2R1Y2Ug
dGhlIGBuZ011bHRpcGxlYCBkaXJlY3RpdmUuCisgKgorICogQGV4YW1wbGUKKyAgICAgPGRvYzpl
eGFtcGxlPgorICAgICAgIDxkb2M6c291cmNlPgorICAgICAgICAgQ2hlY2sgbWUgY2hlY2sgbXVs
dGlwbGU6IDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImNoZWNrZWQiPjxici8+Cisg
ICAgICAgICA8c2VsZWN0IGlkPSJzZWxlY3QiIG5nLW11bHRpcGxlPSJjaGVja2VkIj4KKyAgICAg
ICAgICAgPG9wdGlvbj5NaXNrbzwvb3B0aW9uPgorICAgICAgICAgICA8b3B0aW9uPklnb3I8L29w
dGlvbj4KKyAgICAgICAgICAgPG9wdGlvbj5Wb2p0YTwvb3B0aW9uPgorICAgICAgICAgICA8b3B0
aW9uPkRpPC9vcHRpb24+CisgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICA8L2RvYzpzb3VyY2U+
CisgICAgICAgPGRvYzpzY2VuYXJpbz4KKyAgICAgICAgIGl0KCdzaG91bGQgdG9nZ2xlIG11bHRp
cGxlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1w
bGUtbGl2ZSAjc2VsZWN0JykucHJvcCgnbXVsdGlwbGUnKSkudG9CZUZhbHN5KCk7CisgICAgICAg
ICAgIGlucHV0KCdjaGVja2VkJykuY2hlY2soKTsKKyAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQo
Jy5kb2MtZXhhbXBsZS1saXZlICNzZWxlY3QnKS5wcm9wKCdtdWx0aXBsZScpKS50b0JlVHJ1dGh5
KCk7CisgICAgICAgICB9KTsKKyAgICAgICA8L2RvYzpzY2VuYXJpbz4KKyAgICAgPC9kb2M6ZXhh
bXBsZT4KKyAqCisgKiBAZWxlbWVudCBTRUxFQ1QKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdN
dWx0aXBsZSBBbmd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZC4KKyAqLwor
CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nUmVh
ZG9ubHkKKyAqIEByZXN0cmljdCBBCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUgSFRNTCBz
cGVjcyBkbyBub3QgcmVxdWlyZSBicm93c2VycyB0byBwcmVzZXJ2ZSB0aGUgc3BlY2lhbCBhdHRy
aWJ1dGVzIHN1Y2ggYXMgcmVhZG9ubHkuCisgKiAoVGhlIHByZXNlbmNlIG9mIHRoZW0gbWVhbnMg
dHJ1ZSBhbmQgYWJzZW5jZSBtZWFucyBmYWxzZSkKKyAqIFRoaXMgcHJldmVudHMgdGhlIGFuZ3Vs
YXIgY29tcGlsZXIgZnJvbSBjb3JyZWN0bHkgcmV0cmlldmluZyB0aGUgYmluZGluZyBleHByZXNz
aW9uLgorICogVG8gc29sdmUgdGhpcyBwcm9ibGVtLCB3ZSBpbnRyb2R1Y2UgdGhlIGBuZ1JlYWRv
bmx5YCBkaXJlY3RpdmUuCisgKiBAZXhhbXBsZQorICAgIDxkb2M6ZXhhbXBsZT4KKyAgICAgIDxk
b2M6c291cmNlPgorICAgICAgICBDaGVjayBtZSB0byBtYWtlIHRleHQgcmVhZG9ubHk6IDxpbnB1
dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImNoZWNrZWQiPjxici8+CisgICAgICAgIDxpbnB1
dCB0eXBlPSJ0ZXh0IiBuZy1yZWFkb25seT0iY2hlY2tlZCIgdmFsdWU9IkknbSBBbmd1bGFyIi8+
CisgICAgICA8L2RvYzpzb3VyY2U+CisgICAgICA8ZG9jOnNjZW5hcmlvPgorICAgICAgICBpdCgn
c2hvdWxkIHRvZ2dsZSByZWFkb25seSBhdHRyJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIDp0ZXh0JykucHJvcCgncmVhZG9ubHknKSku
dG9CZUZhbHN5KCk7CisgICAgICAgICAgaW5wdXQoJ2NoZWNrZWQnKS5jaGVjaygpOworICAgICAg
ICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSA6dGV4dCcpLnByb3AoJ3JlYWRv
bmx5JykpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgfSk7CisgICAgICA8L2RvYzpzY2VuYXJpbz4K
KyAgICA8L2RvYzpleGFtcGxlPgorICoKKyAqIEBlbGVtZW50IElOUFVUCisgKiBAcGFyYW0ge3N0
cmluZ30gZXhwcmVzc2lvbiBBbmd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRl
ZC4KKyAqLworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmcuZGlyZWN0
aXZlOm5nU2VsZWN0ZWQKKyAqIEByZXN0cmljdCBBCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBU
aGUgSFRNTCBzcGVjcyBkbyBub3QgcmVxdWlyZSBicm93c2VycyB0byBwcmVzZXJ2ZSB0aGUgc3Bl
Y2lhbCBhdHRyaWJ1dGVzIHN1Y2ggYXMgc2VsZWN0ZWQuCisgKiAoVGhlIHByZXNlbmNlIG9mIHRo
ZW0gbWVhbnMgdHJ1ZSBhbmQgYWJzZW5jZSBtZWFucyBmYWxzZSkKKyAqIFRoaXMgcHJldmVudHMg
dGhlIGFuZ3VsYXIgY29tcGlsZXIgZnJvbSBjb3JyZWN0bHkgcmV0cmlldmluZyB0aGUgYmluZGlu
ZyBleHByZXNzaW9uLgorICogVG8gc29sdmUgdGhpcyBwcm9ibGVtLCB3ZSBpbnRyb2R1Y2VkIHRo
ZSBgbmdTZWxlY3RlZGAgZGlyZWN0aXZlLgorICogQGV4YW1wbGUKKyAgICA8ZG9jOmV4YW1wbGU+
CisgICAgICA8ZG9jOnNvdXJjZT4KKyAgICAgICAgQ2hlY2sgbWUgdG8gc2VsZWN0OiA8aW5wdXQg
dHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJzZWxlY3RlZCI+PGJyLz4KKyAgICAgICAgPHNlbGVj
dD4KKyAgICAgICAgICA8b3B0aW9uPkhlbGxvITwvb3B0aW9uPgorICAgICAgICAgIDxvcHRpb24g
aWQ9ImdyZWV0IiBuZy1zZWxlY3RlZD0ic2VsZWN0ZWQiPkdyZWV0aW5ncyE8L29wdGlvbj4KKyAg
ICAgICAgPC9zZWxlY3Q+CisgICAgICA8L2RvYzpzb3VyY2U+CisgICAgICA8ZG9jOnNjZW5hcmlv
PgorICAgICAgICBpdCgnc2hvdWxkIHNlbGVjdCBHcmVldGluZ3MhJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlICNncmVldCcpLnByb3Ao
J3NlbGVjdGVkJykpLnRvQmVGYWxzeSgpOworICAgICAgICAgIGlucHV0KCdzZWxlY3RlZCcpLmNo
ZWNrKCk7CisgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlICNncmVl
dCcpLnByb3AoJ3NlbGVjdGVkJykpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgfSk7CisgICAgICA8
L2RvYzpzY2VuYXJpbz4KKyAgICA8L2RvYzpleGFtcGxlPgorICoKKyAqIEBlbGVtZW50IE9QVElP
TgorICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gQW5ndWxhciBleHByZXNzaW9uIHRoYXQg
d2lsbCBiZSBldmFsdWF0ZWQuCisgKi8KKworCit2YXIgbmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2
ZXMgPSB7fTsKKworCisvLyBib29sZWFuIGF0dHJzIGFyZSBldmFsdWF0ZWQKK2ZvckVhY2goQk9P
TEVBTl9BVFRSLCBmdW5jdGlvbihwcm9wTmFtZSwgYXR0ck5hbWUpIHsKKyAgdmFyIG5vcm1hbGl6
ZWQgPSBkaXJlY3RpdmVOb3JtYWxpemUoJ25nLScgKyBhdHRyTmFtZSk7CisgIG5nQXR0cmlidXRl
QWxpYXNEaXJlY3RpdmVzW25vcm1hbGl6ZWRdID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHsK
KyAgICAgIHByaW9yaXR5OiAxMDAsCisgICAgICBjb21waWxlOiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7CisgICAgICAgICAgc2Nv
cGUuJHdhdGNoKGF0dHJbbm9ybWFsaXplZF0sIGZ1bmN0aW9uIG5nQm9vbGVhbkF0dHJXYXRjaEFj
dGlvbih2YWx1ZSkgeworICAgICAgICAgICAgYXR0ci4kc2V0KGF0dHJOYW1lLCAhIXZhbHVlKTsK
KyAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9OworICB9OworfSk7CisK
KworLy8gbmctc3JjLCBuZy1ocmVmIGFyZSBpbnRlcnBvbGF0ZWQKK2ZvckVhY2goWydzcmMnLCAn
aHJlZiddLCBmdW5jdGlvbihhdHRyTmFtZSkgeworICB2YXIgbm9ybWFsaXplZCA9IGRpcmVjdGl2
ZU5vcm1hbGl6ZSgnbmctJyArIGF0dHJOYW1lKTsKKyAgbmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2
ZXNbbm9ybWFsaXplZF0gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4geworICAgICAgcHJpb3Jp
dHk6IDk5LCAvLyBpdCBuZWVkcyB0byBydW4gYWZ0ZXIgdGhlIGF0dHJpYnV0ZXMgYXJlIGludGVy
cG9sYXRlZAorICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKKyAg
ICAgICAgYXR0ci4kb2JzZXJ2ZShub3JtYWxpemVkLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAg
ICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgYXR0ci4k
c2V0KGF0dHJOYW1lLCB2YWx1ZSk7CisKKyAgICAgICAgICAvLyBvbiBJRSwgaWYgIm5nOnNyYyIg
ZGlyZWN0aXZlIGRlY2xhcmF0aW9uIGlzIHVzZWQgYW5kICJzcmMiIGF0dHJpYnV0ZSBkb2Vzbid0
IGV4aXN0CisgICAgICAgICAgLy8gdGhlbiBjYWxsaW5nIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdz
cmMnLCAnZm9vJykgZG9lc24ndCBkbyBhbnl0aGluZywgc28gd2UgbmVlZAorICAgICAgICAgIC8v
IHRvIHNldCB0aGUgcHJvcGVydHkgYXMgd2VsbCB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVj
dC4KKyAgICAgICAgICAvLyB3ZSB1c2UgYXR0clthdHRyTmFtZV0gdmFsdWUgc2luY2UgJHNldCBj
YW4gc2FuaXRpemUgdGhlIHVybC4KKyAgICAgICAgICBpZiAobXNpZSkgZWxlbWVudC5wcm9wKGF0
dHJOYW1lLCBhdHRyW2F0dHJOYW1lXSk7CisgICAgICAgIH0pOworICAgICAgfQorICAgIH07Cisg
IH07Cit9KTsKKwordmFyIG51bGxGb3JtQ3RybCA9IHsKKyAgJGFkZENvbnRyb2w6IG5vb3AsCisg
ICRyZW1vdmVDb250cm9sOiBub29wLAorICAkc2V0VmFsaWRpdHk6IG5vb3AsCisgICRzZXREaXJ0
eTogbm9vcAorfTsKKworLyoqCisgKiBAbmdkb2Mgb2JqZWN0CisgKiBAbmFtZSBuZy5kaXJlY3Rp
dmU6Zm9ybS5Gb3JtQ29udHJvbGxlcgorICoKKyAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJHByaXN0
aW5lIFRydWUgaWYgdXNlciBoYXMgbm90IGludGVyYWN0ZWQgd2l0aCB0aGUgZm9ybSB5ZXQuCisg
KiBAcHJvcGVydHkge2Jvb2xlYW59ICRkaXJ0eSBUcnVlIGlmIHVzZXIgaGFzIGFscmVhZHkgaW50
ZXJhY3RlZCB3aXRoIHRoZSBmb3JtLgorICogQHByb3BlcnR5IHtib29sZWFufSAkdmFsaWQgVHJ1
ZSBpZiBhbGwgb2YgdGhlIGNvbnRhaW5pbmcgZm9ybXMgYW5kIGNvbnRyb2xzIGFyZSB2YWxpZC4K
KyAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJGludmFsaWQgVHJ1ZSBpZiBhdCBsZWFzdCBvbmUgY29u
dGFpbmluZyBjb250cm9sIG9yIGZvcm0gaXMgaW52YWxpZC4KKyAqCisgKiBAcHJvcGVydHkge09i
amVjdH0gJGVycm9yIElzIGFuIG9iamVjdCBoYXNoLCBjb250YWluaW5nIHJlZmVyZW5jZXMgdG8g
YWxsIGludmFsaWQgY29udHJvbHMgb3IKKyAqICBmb3Jtcywgd2hlcmU6CisgKgorICogIC0ga2V5
cyBhcmUgdmFsaWRhdGlvbiB0b2tlbnMgKGVycm9yIG5hbWVzKSDigJQgc3VjaCBhcyBgcmVxdWly
ZWRgLCBgdXJsYCBvciBgZW1haWxgKSwKKyAqICAtIHZhbHVlcyBhcmUgYXJyYXlzIG9mIGNvbnRy
b2xzIG9yIGZvcm1zIHRoYXQgYXJlIGludmFsaWQgd2l0aCBnaXZlbiBlcnJvci4KKyAqCisgKiBA
ZGVzY3JpcHRpb24KKyAqIGBGb3JtQ29udHJvbGxlcmAga2VlcHMgdHJhY2sgb2YgYWxsIGl0cyBj
b250cm9scyBhbmQgbmVzdGVkIGZvcm1zIGFzIHdlbGwgYXMgc3RhdGUgb2YgdGhlbSwKKyAqIHN1
Y2ggYXMgYmVpbmcgdmFsaWQvaW52YWxpZCBvciBkaXJ0eS9wcmlzdGluZS4KKyAqCisgKiBFYWNo
IHtAbGluayBuZy5kaXJlY3RpdmU6Zm9ybSBmb3JtfSBkaXJlY3RpdmUgY3JlYXRlcyBhbiBpbnN0
YW5jZQorICogb2YgYEZvcm1Db250cm9sbGVyYC4KKyAqCisgKi8KKy8vYXNrcyBmb3IgJHNjb3Bl
IHRvIGZvb2wgdGhlIEJDIGNvbnRyb2xsZXIgbW9kdWxlCitGb3JtQ29udHJvbGxlci4kaW5qZWN0
ID0gWyckZWxlbWVudCcsICckYXR0cnMnLCAnJHNjb3BlJ107CitmdW5jdGlvbiBGb3JtQ29udHJv
bGxlcihlbGVtZW50LCBhdHRycykgeworICB2YXIgZm9ybSA9IHRoaXMsCisgICAgICBwYXJlbnRG
b3JtID0gZWxlbWVudC5wYXJlbnQoKS5jb250cm9sbGVyKCdmb3JtJykgfHwgbnVsbEZvcm1DdHJs
LAorICAgICAgaW52YWxpZENvdW50ID0gMCwgLy8gdXNlZCB0byBlYXNpbHkgZGV0ZXJtaW5lIGlm
IHdlIGFyZSB2YWxpZAorICAgICAgZXJyb3JzID0gZm9ybS4kZXJyb3IgPSB7fTsKKworICAvLyBp
bml0IHN0YXRlCisgIGZvcm0uJG5hbWUgPSBhdHRycy5uYW1lOworICBmb3JtLiRkaXJ0eSA9IGZh
bHNlOworICBmb3JtLiRwcmlzdGluZSA9IHRydWU7CisgIGZvcm0uJHZhbGlkID0gdHJ1ZTsKKyAg
Zm9ybS4kaW52YWxpZCA9IGZhbHNlOworCisgIHBhcmVudEZvcm0uJGFkZENvbnRyb2woZm9ybSk7
CisKKyAgLy8gU2V0dXAgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbAorICBlbGVtZW50LmFk
ZENsYXNzKFBSSVNUSU5FX0NMQVNTKTsKKyAgdG9nZ2xlVmFsaWRDc3ModHJ1ZSk7CisKKyAgLy8g
Y29udmVuaWVuY2UgbWV0aG9kIGZvciBlYXN5IHRvZ2dsaW5nIG9mIGNsYXNzZXMKKyAgZnVuY3Rp
b24gdG9nZ2xlVmFsaWRDc3MoaXNWYWxpZCwgdmFsaWRhdGlvbkVycm9yS2V5KSB7CisgICAgdmFs
aWRhdGlvbkVycm9yS2V5ID0gdmFsaWRhdGlvbkVycm9yS2V5ID8gJy0nICsgc25ha2VfY2FzZSh2
YWxpZGF0aW9uRXJyb3JLZXksICctJykgOiAnJzsKKyAgICBlbGVtZW50LgorICAgICAgcmVtb3Zl
Q2xhc3MoKGlzVmFsaWQgPyBJTlZBTElEX0NMQVNTIDogVkFMSURfQ0xBU1MpICsgdmFsaWRhdGlv
bkVycm9yS2V5KS4KKyAgICAgIGFkZENsYXNzKChpc1ZhbGlkID8gVkFMSURfQ0xBU1MgOiBJTlZB
TElEX0NMQVNTKSArIHZhbGlkYXRpb25FcnJvcktleSk7CisgIH0KKworICBmb3JtLiRhZGRDb250
cm9sID0gZnVuY3Rpb24oY29udHJvbCkgeworICAgIGlmIChjb250cm9sLiRuYW1lICYmICFmb3Jt
Lmhhc093blByb3BlcnR5KGNvbnRyb2wuJG5hbWUpKSB7CisgICAgICBmb3JtW2NvbnRyb2wuJG5h
bWVdID0gY29udHJvbDsKKyAgICB9CisgIH07CisKKyAgZm9ybS4kcmVtb3ZlQ29udHJvbCA9IGZ1
bmN0aW9uKGNvbnRyb2wpIHsKKyAgICBpZiAoY29udHJvbC4kbmFtZSAmJiBmb3JtW2NvbnRyb2wu
JG5hbWVdID09PSBjb250cm9sKSB7CisgICAgICBkZWxldGUgZm9ybVtjb250cm9sLiRuYW1lXTsK
KyAgICB9CisgICAgZm9yRWFjaChlcnJvcnMsIGZ1bmN0aW9uKHF1ZXVlLCB2YWxpZGF0aW9uVG9r
ZW4pIHsKKyAgICAgIGZvcm0uJHNldFZhbGlkaXR5KHZhbGlkYXRpb25Ub2tlbiwgdHJ1ZSwgY29u
dHJvbCk7CisgICAgfSk7CisgIH07CisKKyAgZm9ybS4kc2V0VmFsaWRpdHkgPSBmdW5jdGlvbih2
YWxpZGF0aW9uVG9rZW4sIGlzVmFsaWQsIGNvbnRyb2wpIHsKKyAgICB2YXIgcXVldWUgPSBlcnJv
cnNbdmFsaWRhdGlvblRva2VuXTsKKworICAgIGlmIChpc1ZhbGlkKSB7CisgICAgICBpZiAocXVl
dWUpIHsKKyAgICAgICAgYXJyYXlSZW1vdmUocXVldWUsIGNvbnRyb2wpOworICAgICAgICBpZiAo
IXF1ZXVlLmxlbmd0aCkgeworICAgICAgICAgIGludmFsaWRDb3VudC0tOworICAgICAgICAgIGlm
ICghaW52YWxpZENvdW50KSB7CisgICAgICAgICAgICB0b2dnbGVWYWxpZENzcyhpc1ZhbGlkKTsK
KyAgICAgICAgICAgIGZvcm0uJHZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvcm0uJGludmFs
aWQgPSBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZXJyb3JzW3ZhbGlkYXRpb25Ub2tl
bl0gPSBmYWxzZTsKKyAgICAgICAgICB0b2dnbGVWYWxpZENzcyh0cnVlLCB2YWxpZGF0aW9uVG9r
ZW4pOworICAgICAgICAgIHBhcmVudEZvcm0uJHNldFZhbGlkaXR5KHZhbGlkYXRpb25Ub2tlbiwg
dHJ1ZSwgZm9ybSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICBp
ZiAoIWludmFsaWRDb3VudCkgeworICAgICAgICB0b2dnbGVWYWxpZENzcyhpc1ZhbGlkKTsKKyAg
ICAgIH0KKyAgICAgIGlmIChxdWV1ZSkgeworICAgICAgICBpZiAoaW5jbHVkZXMocXVldWUsIGNv
bnRyb2wpKSByZXR1cm47CisgICAgICB9IGVsc2UgeworICAgICAgICBlcnJvcnNbdmFsaWRhdGlv
blRva2VuXSA9IHF1ZXVlID0gW107CisgICAgICAgIGludmFsaWRDb3VudCsrOworICAgICAgICB0
b2dnbGVWYWxpZENzcyhmYWxzZSwgdmFsaWRhdGlvblRva2VuKTsKKyAgICAgICAgcGFyZW50Rm9y
bS4kc2V0VmFsaWRpdHkodmFsaWRhdGlvblRva2VuLCBmYWxzZSwgZm9ybSk7CisgICAgICB9Cisg
ICAgICBxdWV1ZS5wdXNoKGNvbnRyb2wpOworCisgICAgICBmb3JtLiR2YWxpZCA9IGZhbHNlOwor
ICAgICAgZm9ybS4kaW52YWxpZCA9IHRydWU7CisgICAgfQorICB9OworCisgIGZvcm0uJHNldERp
cnR5ID0gZnVuY3Rpb24oKSB7CisgICAgZWxlbWVudC5yZW1vdmVDbGFzcyhQUklTVElORV9DTEFT
UykuYWRkQ2xhc3MoRElSVFlfQ0xBU1MpOworICAgIGZvcm0uJGRpcnR5ID0gdHJ1ZTsKKyAgICBm
b3JtLiRwcmlzdGluZSA9IGZhbHNlOworICAgIHBhcmVudEZvcm0uJHNldERpcnR5KCk7CisgIH07
CisKK30KKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRpcmVjdGl2
ZTpuZ0Zvcm0KKyAqIEByZXN0cmljdCBFQUMKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIE5lc3Rh
YmxlIGFsaWFzIG9mIHtAbGluayBuZy5kaXJlY3RpdmU6Zm9ybSBgZm9ybWB9IGRpcmVjdGl2ZS4g
SFRNTAorICogZG9lcyBub3QgYWxsb3cgbmVzdGluZyBvZiBmb3JtIGVsZW1lbnRzLiBJdCBpcyB1
c2VmdWwgdG8gbmVzdCBmb3JtcywgZm9yIGV4YW1wbGUgaWYgdGhlIHZhbGlkaXR5IG9mIGEKKyAq
IHN1Yi1ncm91cCBvZiBjb250cm9scyBuZWVkcyB0byBiZSBkZXRlcm1pbmVkLgorICoKKyAqIEBw
YXJhbSB7c3RyaW5nPX0gbmFtZXxuZ0Zvcm0gTmFtZSBvZiB0aGUgZm9ybS4gSWYgc3BlY2lmaWVk
LCB0aGUgZm9ybSBjb250cm9sbGVyIHdpbGwgYmUgcHVibGlzaGVkIGludG8KKyAqICAgICAgICAg
ICAgICAgICAgICAgICByZWxhdGVkIHNjb3BlLCB1bmRlciB0aGlzIG5hbWUuCisgKgorICovCisK
KyAvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpmb3JtCisg
KiBAcmVzdHJpY3QgRQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGlyZWN0aXZlIHRoYXQgaW5z
dGFudGlhdGVzCisgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOmZvcm0uRm9ybUNvbnRyb2xsZXIgRm9y
bUNvbnRyb2xsZXJ9LgorICoKKyAqIElmIGBuYW1lYCBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCB0
aGUgZm9ybSBjb250cm9sbGVyIGlzIHB1Ymxpc2hlZCBvbnRvIHRoZSBjdXJyZW50IHNjb3BlIHVu
ZGVyCisgKiB0aGlzIG5hbWUuCisgKgorICogIyBBbGlhczoge0BsaW5rIG5nLmRpcmVjdGl2ZTpu
Z0Zvcm0gYG5nRm9ybWB9CisgKgorICogSW4gYW5ndWxhciBmb3JtcyBjYW4gYmUgbmVzdGVkLiBU
aGlzIG1lYW5zIHRoYXQgdGhlIG91dGVyIGZvcm0gaXMgdmFsaWQgd2hlbiBhbGwgb2YgdGhlIGNo
aWxkCisgKiBmb3JtcyBhcmUgdmFsaWQgYXMgd2VsbC4gSG93ZXZlciBicm93c2VycyBkbyBub3Qg
YWxsb3cgbmVzdGluZyBvZiBgPGZvcm0+YCBlbGVtZW50cywgZm9yIHRoaXMKKyAqIHJlYXNvbiBh
bmd1bGFyIHByb3ZpZGVzIHtAbGluayBuZy5kaXJlY3RpdmU6bmdGb3JtIGBuZ0Zvcm1gfSBhbGlh
cworICogd2hpY2ggYmVoYXZlcyBpZGVudGljYWwgdG8gYDxmb3JtPmAgYnV0IGFsbG93cyBmb3Jt
IG5lc3RpbmcuCisgKgorICoKKyAqICMgQ1NTIGNsYXNzZXMKKyAqICAtIGBuZy12YWxpZGAgSXMg
c2V0IGlmIHRoZSBmb3JtIGlzIHZhbGlkLgorICogIC0gYG5nLWludmFsaWRgIElzIHNldCBpZiB0
aGUgZm9ybSBpcyBpbnZhbGlkLgorICogIC0gYG5nLXByaXN0aW5lYCBJcyBzZXQgaWYgdGhlIGZv
cm0gaXMgcHJpc3RpbmUuCisgKiAgLSBgbmctZGlydHlgIElzIHNldCBpZiB0aGUgZm9ybSBpcyBk
aXJ0eS4KKyAqCisgKgorICogIyBTdWJtaXR0aW5nIGEgZm9ybSBhbmQgcHJldmVudGluZyBkZWZh
dWx0IGFjdGlvbgorICoKKyAqIFNpbmNlIHRoZSByb2xlIG9mIGZvcm1zIGluIGNsaWVudC1zaWRl
IEFuZ3VsYXIgYXBwbGljYXRpb25zIGlzIGRpZmZlcmVudCB0aGFuIGluIGNsYXNzaWNhbAorICog
cm91bmR0cmlwIGFwcHMsIGl0IGlzIGRlc2lyYWJsZSBmb3IgdGhlIGJyb3dzZXIgbm90IHRvIHRy
YW5zbGF0ZSB0aGUgZm9ybSBzdWJtaXNzaW9uIGludG8gYSBmdWxsCisgKiBwYWdlIHJlbG9hZCB0
aGF0IHNlbmRzIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIuIEluc3RlYWQgc29tZSBqYXZhc2NyaXB0
IGxvZ2ljIHNob3VsZCBiZSB0cmlnZ2VyZWQKKyAqIHRvIGhhbmRsZSB0aGUgZm9ybSBzdWJtaXNz
aW9uIGluIGFwcGxpY2F0aW9uIHNwZWNpZmljIHdheS4KKyAqCisgKiBGb3IgdGhpcyByZWFzb24s
IEFuZ3VsYXIgcHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uIChmb3JtIHN1Ym1pc3Npb24gdG8g
dGhlIHNlcnZlcikgdW5sZXNzIHRoZQorICogYDxmb3JtPmAgZWxlbWVudCBoYXMgYW4gYGFjdGlv
bmAgYXR0cmlidXRlIHNwZWNpZmllZC4KKyAqCisgKiBZb3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZv
bGxvd2luZyB0d28gd2F5cyB0byBzcGVjaWZ5IHdoYXQgamF2YXNjcmlwdCBtZXRob2Qgc2hvdWxk
IGJlIGNhbGxlZCB3aGVuCisgKiBhIGZvcm0gaXMgc3VibWl0dGVkOgorICoKKyAqIC0ge0BsaW5r
IG5nLmRpcmVjdGl2ZTpuZ1N1Ym1pdCBuZ1N1Ym1pdH0gZGlyZWN0aXZlIG9uIHRoZSBmb3JtIGVs
ZW1lbnQKKyAqIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9IGRpcmVjdGl2
ZSBvbiB0aGUgZmlyc3QKKyAgKiAgYnV0dG9uIG9yIGlucHV0IGZpZWxkIG9mIHR5cGUgc3VibWl0
IChpbnB1dFt0eXBlPXN1Ym1pdF0pCisgKgorICogVG8gcHJldmVudCBkb3VibGUgZXhlY3V0aW9u
IG9mIHRoZSBoYW5kbGVyLCB1c2Ugb25seSBvbmUgb2YgbmdTdWJtaXQgb3IgbmdDbGljayBkaXJl
Y3RpdmVzLiBUaGlzCisgKiBpcyBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZm9ybSBzdWJtaXNz
aW9uIHJ1bGVzIGNvbWluZyBmcm9tIHRoZSBodG1sIHNwZWM6CisgKgorICogLSBJZiBhIGZvcm0g
aGFzIG9ubHkgb25lIGlucHV0IGZpZWxkIHRoZW4gaGl0dGluZyBlbnRlciBpbiB0aGlzIGZpZWxk
IHRyaWdnZXJzIGZvcm0gc3VibWl0CisgKiAoYG5nU3VibWl0YCkKKyAqIC0gaWYgYSBmb3JtIGhh
cyBoYXMgMisgaW5wdXQgZmllbGRzIGFuZCBubyBidXR0b25zIG9yIGlucHV0W3R5cGU9c3VibWl0
XSB0aGVuIGhpdHRpbmcgZW50ZXIKKyAqIGRvZXNuJ3QgdHJpZ2dlciBzdWJtaXQKKyAqIC0gaWYg
YSBmb3JtIGhhcyBvbmUgb3IgbW9yZSBpbnB1dCBmaWVsZHMgYW5kIG9uZSBvciBtb3JlIGJ1dHRv
bnMgb3IgaW5wdXRbdHlwZT1zdWJtaXRdIHRoZW4KKyAqIGhpdHRpbmcgZW50ZXIgaW4gYW55IG9m
IHRoZSBpbnB1dCBmaWVsZHMgd2lsbCB0cmlnZ2VyIHRoZSBjbGljayBoYW5kbGVyIG9uIHRoZSAq
Zmlyc3QqIGJ1dHRvbiBvcgorICogaW5wdXRbdHlwZT1zdWJtaXRdIChgbmdDbGlja2ApICphbmQq
IGEgc3VibWl0IGhhbmRsZXIgb24gdGhlIGVuY2xvc2luZyBmb3JtIChgbmdTdWJtaXRgKQorICoK
KyAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBOYW1lIG9mIHRoZSBmb3JtLiBJZiBzcGVjaWZpZWQs
IHRoZSBmb3JtIGNvbnRyb2xsZXIgd2lsbCBiZSBwdWJsaXNoZWQgaW50bworICogICAgICAgICAg
ICAgICAgICAgICAgIHJlbGF0ZWQgc2NvcGUsIHVuZGVyIHRoaXMgbmFtZS4KKyAqCisgKiBAZXhh
bXBsZQorICAgIDxkb2M6ZXhhbXBsZT4KKyAgICAgIDxkb2M6c291cmNlPgorICAgICAgIDxzY3Jp
cHQ+CisgICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgeworICAgICAgICAgICAkc2NvcGUu
dXNlclR5cGUgPSAnZ3Vlc3QnOworICAgICAgICAgfQorICAgICAgIDwvc2NyaXB0PgorICAgICAg
IDxmb3JtIG5hbWU9Im15Rm9ybSIgbmctY29udHJvbGxlcj0iQ3RybCI+CisgICAgICAgICB1c2Vy
VHlwZTogPGlucHV0IG5hbWU9ImlucHV0IiBuZy1tb2RlbD0idXNlclR5cGUiIHJlcXVpcmVkPgor
ICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQuJGVycm9y
LnJlcXVpcmVkIj5SZXF1aXJlZCE8L3NwYW4+PGJyPgorICAgICAgICAgPHR0PnVzZXJUeXBlID0g
e3t1c2VyVHlwZX19PC90dD48YnI+CisgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9
IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnI+CisgICAgICAgICA8dHQ+bXlGb3JtLmlu
cHV0LiRlcnJvciA9IHt7bXlGb3JtLmlucHV0LiRlcnJvcn19PC90dD48YnI+CisgICAgICAgICA8
dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnI+CisgICAgICAgICA8
dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08
L3R0Pjxicj4KKyAgICAgICAgPC9mb3JtPgorICAgICAgPC9kb2M6c291cmNlPgorICAgICAgPGRv
YzpzY2VuYXJpbz4KKyAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICBleHBlY3QoYmluZGluZygndXNlclR5cGUnKSkudG9FcXVhbCgn
Z3Vlc3QnKTsKKyAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykp
LnRvRXF1YWwoJ3RydWUnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBiZSBp
bnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7CisgICAgICAgICBpbnB1dCgndXNlclR5cGUn
KS5lbnRlcignJyk7CisgICAgICAgICBleHBlY3QoYmluZGluZygndXNlclR5cGUnKSkudG9FcXVh
bCgnJyk7CisgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKS50
b0VxdWFsKCdmYWxzZScpOworICAgICAgICB9KTsKKyAgICAgIDwvZG9jOnNjZW5hcmlvPgorICAg
IDwvZG9jOmV4YW1wbGU+CisgKi8KK3ZhciBmb3JtRGlyZWN0aXZlRmFjdG9yeSA9IGZ1bmN0aW9u
KGlzTmdGb3JtKSB7CisgIHJldHVybiBbJyR0aW1lb3V0JywgZnVuY3Rpb24oJHRpbWVvdXQpIHsK
KyAgICB2YXIgZm9ybURpcmVjdGl2ZSA9IHsKKyAgICAgIG5hbWU6ICdmb3JtJywKKyAgICAgIHJl
c3RyaWN0OiAnRScsCisgICAgICBjb250cm9sbGVyOiBGb3JtQ29udHJvbGxlciwKKyAgICAgIGNv
bXBpbGU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAgIHByZTogZnVu
Y3Rpb24oc2NvcGUsIGZvcm1FbGVtZW50LCBhdHRyLCBjb250cm9sbGVyKSB7CisgICAgICAgICAg
ICBpZiAoIWF0dHIuYWN0aW9uKSB7CisgICAgICAgICAgICAgIC8vIHdlIGNhbid0IHVzZSBqcSBl
dmVudHMgYmVjYXVzZSBpZiBhIGZvcm0gaXMgZGVzdHJveWVkIGR1cmluZyBzdWJtaXNzaW9uIHRo
ZSBkZWZhdWx0CisgICAgICAgICAgICAgIC8vIGFjdGlvbiBpcyBub3QgcHJldmVudGVkLiBzZWUg
IzEyMzgKKyAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgLy8gSUUgOSBpcyBub3QgYWZm
ZWN0ZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGZpcmUgYSBzdWJtaXQgZXZlbnQgYW5kIHRyeSB0byBk
byBhIGZ1bGwKKyAgICAgICAgICAgICAgLy8gcGFnZSByZWxvYWQgaWYgdGhlIGZvcm0gd2FzIGRl
c3Ryb3llZCBieSBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtIHZpYSBhIGNsaWNrIGhhbmRsZXIKKyAg
ICAgICAgICAgICAgLy8gb24gYSBidXR0b24gaW4gdGhlIGZvcm0uIExvb2tzIGxpa2UgYW4gSUU5
IHNwZWNpZmljIGJ1Zy4KKyAgICAgICAgICAgICAgdmFyIHByZXZlbnREZWZhdWx0TGlzdGVuZXIg
PSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
CisgICAgICAgICAgICAgICAgICA/IGV2ZW50LnByZXZlbnREZWZhdWx0KCkKKyAgICAgICAgICAg
ICAgICAgIDogZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTsgLy8gSUUKKyAgICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyRm4oZm9ybUVsZW1lbnRbMF0sICdz
dWJtaXQnLCBwcmV2ZW50RGVmYXVsdExpc3RlbmVyKTsKKworICAgICAgICAgICAgICAvLyB1bnJl
Z2lzdGVyIHRoZSBwcmV2ZW50RGVmYXVsdCBsaXN0ZW5lciBzbyB0aGF0IHdlIGRvbid0IG5vdCBs
ZWFrIG1lbW9yeSBidXQgaW4gYQorICAgICAgICAgICAgICAvLyB3YXkgdGhhdCB3aWxsIGFjaGll
dmUgdGhlIHByZXZlbnRpb24gb2YgdGhlIGRlZmF1bHQgYWN0aW9uLgorICAgICAgICAgICAgICBm
b3JtRWxlbWVudC5iaW5kKCckZGVzdHJveScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
ICR0aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0
ZW5lckZuKGZvcm1FbGVtZW50WzBdLCAnc3VibWl0JywgcHJldmVudERlZmF1bHRMaXN0ZW5lcik7
CisgICAgICAgICAgICAgICAgfSwgMCwgZmFsc2UpOworICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHBhcmVudEZvcm1DdHJsID0gZm9ybUVsZW1lbnQu
cGFyZW50KCkuY29udHJvbGxlcignZm9ybScpLAorICAgICAgICAgICAgICAgIGFsaWFzID0gYXR0
ci5uYW1lIHx8IGF0dHIubmdGb3JtOworCisgICAgICAgICAgICBpZiAoYWxpYXMpIHsKKyAgICAg
ICAgICAgICAgc2NvcGVbYWxpYXNdID0gY29udHJvbGxlcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChwYXJlbnRGb3JtQ3RybCkgeworICAgICAgICAgICAgICBmb3JtRWxlbWVudC5i
aW5kKCckZGVzdHJveScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHBhcmVudEZvcm1D
dHJsLiRyZW1vdmVDb250cm9sKGNvbnRyb2xsZXIpOworICAgICAgICAgICAgICAgIGlmIChhbGlh
cykgeworICAgICAgICAgICAgICAgICAgc2NvcGVbYWxpYXNdID0gdW5kZWZpbmVkOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBleHRlbmQoY29udHJvbGxlciwgbnVsbEZvcm1D
dHJsKTsgLy9zdG9wIHByb3BhZ2F0aW5nIGNoaWxkIGRlc3RydWN0aW9uIGhhbmRsZXJzIHVwd2Fy
ZHMKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAg
ICB9OworICAgICAgfQorICAgIH07CisKKyAgICByZXR1cm4gaXNOZ0Zvcm0gPyBleHRlbmQoY29w
eShmb3JtRGlyZWN0aXZlKSwge3Jlc3RyaWN0OiAnRUFDJ30pIDogZm9ybURpcmVjdGl2ZTsKKyAg
fV07Cit9OworCit2YXIgZm9ybURpcmVjdGl2ZSA9IGZvcm1EaXJlY3RpdmVGYWN0b3J5KCk7Cit2
YXIgbmdGb3JtRGlyZWN0aXZlID0gZm9ybURpcmVjdGl2ZUZhY3RvcnkodHJ1ZSk7CisKK3ZhciBV
UkxfUkVHRVhQID0gL14oZnRwfGh0dHB8aHR0cHMpOlwvXC8oXHcrOnswLDF9XHcqQCk/KFxTKyko
OlswLTldKyk/KFwvfFwvKFtcdyMhOi4/Kz0mJUAhXC1cL10pKT8kLzsKK3ZhciBFTUFJTF9SRUdF
WFAgPSAvXltBLVphLXowLTkuXyUrLV0rQFtBLVphLXowLTkuLV0rXC5bQS1aYS16XXsyLDR9JC87
Cit2YXIgTlVNQkVSX1JFR0VYUCA9IC9eXHMqKFwtfFwrKT8oXGQrfChcZCooXC5cZCopKSlccyok
LzsKKwordmFyIGlucHV0VHlwZSA9IHsKKworICAvKioKKyAgICogQG5nZG9jIGlucHV0VHlwZQor
ICAgKiBAbmFtZSBuZy5kaXJlY3RpdmU6aW5wdXQudGV4dAorICAgKgorICAgKiBAZGVzY3JpcHRp
b24KKyAgICogU3RhbmRhcmQgSFRNTCB0ZXh0IGlucHV0IHdpdGggYW5ndWxhciBkYXRhIGJpbmRp
bmcuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxh
ciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1l
IFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVi
bGlzaGVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCB2
YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuCisgICAqIEBw
YXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBg
cmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0bworICAgKiAgICB0aGUgZWxlbWVudCB3
aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdS
ZXF1aXJlZGAgaW5zdGVhZCBvZgorICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8g
ZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4KKyAgICogQHBhcmFtIHtudW1i
ZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlm
IHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW4KKyAgICogICAgbWlubGVuZ3RoLgorICAgKiBAcGFy
YW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJv
ciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuCisgICAqICAgIG1heGxlbmd0aC4KKyAg
ICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRlcm4gU2V0cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBl
cnJvciBrZXkgaWYgdGhlIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZQorICAgKiAgICBSZWdFeHAg
cGF0dGVybiBleHByZXNzaW9uLiBFeHBlY3RlZCB2YWx1ZSBpcyBgL3JlZ2V4cC9gIGZvciBpbmxp
bmUgcGF0dGVybnMgb3IgYHJlZ2V4cGAgZm9yCisgICAqICAgIHBhdHRlcm5zIGRlZmluZWQgYXMg
c2NvcGUgZXhwcmVzc2lvbnMuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxh
ciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNl
cgorICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgorICAgKgorICAg
KiBAZXhhbXBsZQorICAgICAgPGRvYzpleGFtcGxlPgorICAgICAgICA8ZG9jOnNvdXJjZT4KKyAg
ICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7CisgICAg
ICAgICAgICAgJHNjb3BlLnRleHQgPSAnZ3Vlc3QnOworICAgICAgICAgICAgICRzY29wZS53b3Jk
ID0gL15cdyokLzsKKyAgICAgICAgICAgfQorICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICA8
Zm9ybSBuYW1lPSJteUZvcm0iIG5nLWNvbnRyb2xsZXI9IkN0cmwiPgorICAgICAgICAgICBTaW5n
bGUgd29yZDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImlucHV0IiBuZy1tb2RlbD0idGV4dCIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZy1wYXR0ZXJuPSJ3b3JkIiByZXF1aXJl
ZD4KKyAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQu
JGVycm9yLnJlcXVpcmVkIj4KKyAgICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+CisgICAgICAg
ICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlucHV0LiRlcnJvci5wYXR0
ZXJuIj4KKyAgICAgICAgICAgICBTaW5nbGUgd29yZCBvbmx5ITwvc3Bhbj4KKworICAgICAgICAg
ICA8dHQ+dGV4dCA9IHt7dGV4dH19PC90dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLmlu
cHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICAg
ICA8dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9IHt7bXlGb3JtLmlucHV0LiRlcnJvcn19PC90dD48
YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90
dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZv
cm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+CisgICAgICAgICAgPC9mb3JtPgorICAgICAg
ICA8L2RvYzpzb3VyY2U+CisgICAgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgICAgaXQoJ3No
b3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBl
Y3QoYmluZGluZygndGV4dCcpKS50b0VxdWFsKCdndWVzdCcpOworICAgICAgICAgICAgZXhwZWN0
KGJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgndHJ1ZScpOworICAgICAg
ICAgIH0pOworCisgICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBpbnB1dCgndGV4dCcpLmVudGVyKCcnKTsKKyAgICAgICAg
ICAgIGV4cGVjdChiaW5kaW5nKCd0ZXh0JykpLnRvRXF1YWwoJycpOworICAgICAgICAgICAgZXhw
ZWN0KGJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKKyAg
ICAgICAgICB9KTsKKworICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBtdWx0aSB3
b3JkJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbnB1dCgndGV4dCcpLmVudGVyKCdoZWxs
byB3b3JsZCcpOworICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFs
aWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgPC9kb2M6c2Nl
bmFyaW8+CisgICAgICA8L2RvYzpleGFtcGxlPgorICAgKi8KKyAgJ3RleHQnOiB0ZXh0SW5wdXRU
eXBlLAorCisKKyAgLyoqCisgICAqIEBuZ2RvYyBpbnB1dFR5cGUKKyAgICogQG5hbWUgbmcuZGly
ZWN0aXZlOmlucHV0Lm51bWJlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVGV4dCBp
bnB1dCB3aXRoIG51bWJlciB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvbi4gU2V0cyB0aGUg
YG51bWJlcmAgdmFsaWRhdGlvbgorICAgKiBlcnJvciBpZiBub3QgYSB2YWxpZCBudW1iZXIuCisg
ICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHBy
ZXNzaW9uIHRvIGRhdGEtYmluZCB0by4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3Bl
cnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVk
LgorICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVy
cm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuCisgICAqIEBw
YXJhbSB7c3RyaW5nPX0gbWF4IFNldHMgdGhlIGBtYXhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlm
IHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiBgbWF4YC4KKyAgICogQHBhcmFtIHtz
dHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYg
dGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWly
ZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNv
bnN0cmFpbnQgdG8KKyAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHBy
ZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2YKKyAg
ICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVp
cmVkYCBhdHRyaWJ1dGUuCisgICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBg
bWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0
aGFuCisgICAqICAgIG1pbmxlbmd0aC4KKyAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0
aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBs
b25nZXIgdGhhbgorICAgKiAgICBtYXhsZW5ndGguCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQ
YXR0ZXJuIFNldHMgYHBhdHRlcm5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBk
b2VzIG5vdCBtYXRjaCB0aGUKKyAgICogICAgUmVnRXhwIHBhdHRlcm4gZXhwcmVzc2lvbi4gRXhw
ZWN0ZWQgdmFsdWUgaXMgYC9yZWdleHAvYCBmb3IgaW5saW5lIHBhdHRlcm5zIG9yIGByZWdleHBg
IGZvcgorICAgKiAgICBwYXR0ZXJucyBkZWZpbmVkIGFzIHNjb3BlIGV4cHJlc3Npb25zLgorICAg
KiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVj
dXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKKyAgICogICAgaW50ZXJhY3Rpb24g
d2l0aCB0aGUgaW5wdXQgZWxlbWVudC4KKyAgICoKKyAgICogQGV4YW1wbGUKKyAgICAgIDxkb2M6
ZXhhbXBsZT4KKyAgICAgICAgPGRvYzpzb3VyY2U+CisgICAgICAgICA8c2NyaXB0PgorICAgICAg
ICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgeworICAgICAgICAgICAgICRzY29wZS52YWx1ZSA9
IDEyOworICAgICAgICAgICB9CisgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgIDxmb3JtIG5h
bWU9Im15Rm9ybSIgbmctY29udHJvbGxlcj0iQ3RybCI+CisgICAgICAgICAgIE51bWJlcjogPGlu
cHV0IHR5cGU9Im51bWJlciIgbmFtZT0iaW5wdXQiIG5nLW1vZGVsPSJ2YWx1ZSIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWluPSIwIiBtYXg9Ijk5IiByZXF1aXJlZD4KKyAgICAgICAgICAg
PHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0ubGlzdC4kZXJyb3IucmVxdWlyZWQi
PgorICAgICAgICAgICAgIFJlcXVpcmVkITwvc3Bhbj4KKyAgICAgICAgICAgPHNwYW4gY2xhc3M9
ImVycm9yIiBuZy1zaG93PSJteUZvcm0ubGlzdC4kZXJyb3IubnVtYmVyIj4KKyAgICAgICAgICAg
ICBOb3QgdmFsaWQgbnVtYmVyITwvc3Bhbj4KKyAgICAgICAgICAgPHR0PnZhbHVlID0ge3t2YWx1
ZX19PC90dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlG
b3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0
LiRlcnJvciA9IHt7bXlGb3JtLmlucHV0LiRlcnJvcn19PC90dD48YnIvPgorICAgICAgICAgICA8
dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICAg
ICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVk
fX08L3R0Pjxici8+CisgICAgICAgICAgPC9mb3JtPgorICAgICAgICA8L2RvYzpzb3VyY2U+Cisg
ICAgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRv
IG1vZGVsJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd2YWx1ZScp
KS50b0VxdWFsKCcxMicpOworICAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmlucHV0
LiR2YWxpZCcpKS50b0VxdWFsKCd0cnVlJyk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBp
dCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
aW5wdXQoJ3ZhbHVlJykuZW50ZXIoJycpOworICAgICAgICAgICBleHBlY3QoYmluZGluZygndmFs
dWUnKSkudG9FcXVhbCgnJyk7CisgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0uaW5w
dXQuJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgb3ZlciBtYXgnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgaW5wdXQoJ3ZhbHVlJykuZW50ZXIoJzEyMycpOworICAgICAgICAgICBleHBlY3QoYmlu
ZGluZygndmFsdWUnKSkudG9FcXVhbCgnJyk7CisgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdt
eUZvcm0uaW5wdXQuJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7CisgICAgICAgICAgfSk7Cisg
ICAgICAgIDwvZG9jOnNjZW5hcmlvPgorICAgICAgPC9kb2M6ZXhhbXBsZT4KKyAgICovCisgICdu
dW1iZXInOiBudW1iZXJJbnB1dFR5cGUsCisKKworICAvKioKKyAgICogQG5nZG9jIGlucHV0VHlw
ZQorICAgKiBAbmFtZSBuZy5kaXJlY3RpdmU6aW5wdXQudXJsCisgICAqCisgICAqIEBkZXNjcmlw
dGlvbgorICAgKiBUZXh0IGlucHV0IHdpdGggVVJMIHZhbGlkYXRpb24uIFNldHMgdGhlIGB1cmxg
IHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSBjb250ZW50IGlzIG5vdCBhCisgICAqIHZhbGlk
IFVSTC4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1
bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5h
bWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBw
dWJsaXNoZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRg
IHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBub3QgZW50ZXJlZC4KKyAgICog
QHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5k
IGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvCisgICAqICAgIHRoZSBlbGVtZW50
IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBu
Z1JlcXVpcmVkYCBpbnN0ZWFkIG9mCisgICAqICAgIGByZXF1aXJlZGAgd2hlbiB5b3Ugd2FudCB0
byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRlLgorICAgKiBAcGFyYW0ge251
bWJlcj19IG5nTWlubGVuZ3RoIFNldHMgYG1pbmxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkg
aWYgdGhlIHZhbHVlIGlzIHNob3J0ZXIgdGhhbgorICAgKiAgICBtaW5sZW5ndGguCisgICAqIEBw
YXJhbSB7bnVtYmVyPX0gbmdNYXhsZW5ndGggU2V0cyBgbWF4bGVuZ3RoYCB2YWxpZGF0aW9uIGVy
cm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbG9uZ2VyIHRoYW4KKyAgICogICAgbWF4bGVuZ3RoLgor
ICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9u
IGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlCisgICAqICAgIFJlZ0V4
cCBwYXR0ZXJuIGV4cHJlc3Npb24uIEV4cGVjdGVkIHZhbHVlIGlzIGAvcmVnZXhwL2AgZm9yIGlu
bGluZSBwYXR0ZXJucyBvciBgcmVnZXhwYCBmb3IKKyAgICogICAgcGF0dGVybnMgZGVmaW5lZCBh
cyBzY29wZSBleHByZXNzaW9ucy4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1
bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1
c2VyCisgICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCisgICAqCisg
ICAqIEBleGFtcGxlCisgICAgICA8ZG9jOmV4YW1wbGU+CisgICAgICAgIDxkb2M6c291cmNlPgor
ICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKKyAg
ICAgICAgICAgICAkc2NvcGUudGV4dCA9ICdodHRwOi8vZ29vZ2xlLmNvbSc7CisgICAgICAgICAg
IH0KKyAgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1j
b250cm9sbGVyPSJDdHJsIj4KKyAgICAgICAgICAgVVJMOiA8aW5wdXQgdHlwZT0idXJsIiBuYW1l
PSJpbnB1dCIgbmctbW9kZWw9InRleHQiIHJlcXVpcmVkPgorICAgICAgICAgICA8c3BhbiBjbGFz
cz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWQiPgorICAgICAg
ICAgICAgIFJlcXVpcmVkITwvc3Bhbj4KKyAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBu
Zy1zaG93PSJteUZvcm0uaW5wdXQuJGVycm9yLnVybCI+CisgICAgICAgICAgICAgTm90IHZhbGlk
IHVybCE8L3NwYW4+CisgICAgICAgICAgIDx0dD50ZXh0ID0ge3t0ZXh0fX08L3R0Pjxici8+Cisg
ICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlk
fX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZv
cm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlk
ID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uJGVy
cm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz4KKyAg
ICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IudXJsID0ge3shIW15Rm9ybS4kZXJyb3IudXJsfX08
L3R0Pjxici8+CisgICAgICAgICAgPC9mb3JtPgorICAgICAgICA8L2RvYzpzb3VyY2U+CisgICAg
ICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1v
ZGVsJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3QoYmluZGluZygndGV4dCcpKS50
b0VxdWFsKCdodHRwOi8vZ29vZ2xlLmNvbScpOworICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmco
J215Rm9ybS5pbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgndHJ1ZScpOworICAgICAgICAgIH0pOwor
CisgICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBpbnB1dCgndGV4dCcpLmVudGVyKCcnKTsKKyAgICAgICAgICAgIGV4cGVj
dChiaW5kaW5nKCd0ZXh0JykpLnRvRXF1YWwoJycpOworICAgICAgICAgICAgZXhwZWN0KGJpbmRp
bmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKKyAgICAgICAgICB9
KTsKKworICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBub3QgdXJsJywgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBpbnB1dCgndGV4dCcpLmVudGVyKCd4eHgnKTsKKyAgICAgICAg
ICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNl
Jyk7CisgICAgICAgICAgfSk7CisgICAgICAgIDwvZG9jOnNjZW5hcmlvPgorICAgICAgPC9kb2M6
ZXhhbXBsZT4KKyAgICovCisgICd1cmwnOiB1cmxJbnB1dFR5cGUsCisKKworICAvKioKKyAgICog
QG5nZG9jIGlucHV0VHlwZQorICAgKiBAbmFtZSBuZy5kaXJlY3RpdmU6aW5wdXQuZW1haWwKKyAg
ICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFRleHQgaW5wdXQgd2l0aCBlbWFpbCB2YWxpZGF0
aW9uLiBTZXRzIHRoZSBgZW1haWxgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIG5vdCBhIHZhbGlk
IGVtYWlsCisgICAqIGFkZHJlc3MuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVs
IEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by4KKyAgICogQHBh
cmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2gg
dGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVk
IFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90
IGVudGVyZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJl
ZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0bworICAg
KiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVz
IHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZgorICAgKiAgICBgcmVxdWlyZWRg
IHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4K
KyAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlk
YXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW4KKyAgICogICAgbWlu
bGVuZ3RoLgorICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0
aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuCisgICAq
ICAgIG1heGxlbmd0aC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRlcm4gU2V0cyBgcGF0
dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRo
ZQorICAgKiAgICBSZWdFeHAgcGF0dGVybiBleHByZXNzaW9uLiBFeHBlY3RlZCB2YWx1ZSBpcyBg
L3JlZ2V4cC9gIGZvciBpbmxpbmUgcGF0dGVybnMgb3IgYHJlZ2V4cGAgZm9yCisgICAqICAgIHBh
dHRlcm5zIGRlZmluZWQgYXMgc2NvcGUgZXhwcmVzc2lvbnMuCisgICAqCisgICAqIEBleGFtcGxl
CisgICAgICA8ZG9jOmV4YW1wbGU+CisgICAgICAgIDxkb2M6c291cmNlPgorICAgICAgICAgPHNj
cmlwdD4KKyAgICAgICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKKyAgICAgICAgICAgICAk
c2NvcGUudGV4dCA9ICdtZUBleGFtcGxlLmNvbSc7CisgICAgICAgICAgIH0KKyAgICAgICAgIDwv
c2NyaXB0PgorICAgICAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIG5nLWNvbnRyb2xsZXI9IkN0
cmwiPgorICAgICAgICAgICAgIEVtYWlsOiA8aW5wdXQgdHlwZT0iZW1haWwiIG5hbWU9ImlucHV0
IiBuZy1tb2RlbD0idGV4dCIgcmVxdWlyZWQ+CisgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVy
cm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkIj4KKyAgICAgICAgICAg
ICAgIFJlcXVpcmVkITwvc3Bhbj4KKyAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5n
LXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IuZW1haWwiPgorICAgICAgICAgICAgICAgTm90IHZh
bGlkIGVtYWlsITwvc3Bhbj4KKyAgICAgICAgICAgICA8dHQ+dGV4dCA9IHt7dGV4dH19PC90dD48
YnIvPgorICAgICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5w
dXQuJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJy
b3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz4KKyAgICAgICAgICAgICA8dHQ+
bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICAgICAg
IDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9
fTwvdHQ+PGJyLz4KKyAgICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5lbWFpbCA9IHt7ISFt
eUZvcm0uJGVycm9yLmVtYWlsfX08L3R0Pjxici8+CisgICAgICAgICAgIDwvZm9ybT4KKyAgICAg
ICAgPC9kb2M6c291cmNlPgorICAgICAgICA8ZG9jOnNjZW5hcmlvPgorICAgICAgICAgIGl0KCdz
aG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZXhw
ZWN0KGJpbmRpbmcoJ3RleHQnKSkudG9FcXVhbCgnbWVAZXhhbXBsZS5jb20nKTsKKyAgICAgICAg
ICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpLnRvRXF1YWwoJ3RydWUn
KTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBl
bXB0eScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaW5wdXQoJ3RleHQnKS5lbnRlcignJyk7
CisgICAgICAgICAgICBleHBlY3QoYmluZGluZygndGV4dCcpKS50b0VxdWFsKCcnKTsKKyAgICAg
ICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpLnRvRXF1YWwoJ2Zh
bHNlJyk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQg
aWYgbm90IGVtYWlsJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbnB1dCgndGV4dCcpLmVu
dGVyKCd4eHgnKTsKKyAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZh
bGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7CisgICAgICAgICAgfSk7CisgICAgICAgIDwvZG9jOnNj
ZW5hcmlvPgorICAgICAgPC9kb2M6ZXhhbXBsZT4KKyAgICovCisgICdlbWFpbCc6IGVtYWlsSW5w
dXRUeXBlLAorCisKKyAgLyoqCisgICAqIEBuZ2RvYyBpbnB1dFR5cGUKKyAgICogQG5hbWUgbmcu
ZGlyZWN0aXZlOmlucHV0LnJhZGlvCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBIVE1M
IHJhZGlvIGJ1dHRvbi4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWdu
YWJsZSBhbmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLgorICAgKiBAcGFyYW0ge3N0
cmluZ30gdmFsdWUgVGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBz
ZXQgd2hlbiBzZWxlY3RlZC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5h
bWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgorICAg
KiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVj
dXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKKyAgICogICAgaW50ZXJhY3Rpb24g
d2l0aCB0aGUgaW5wdXQgZWxlbWVudC4KKyAgICoKKyAgICogQGV4YW1wbGUKKyAgICAgIDxkb2M6
ZXhhbXBsZT4KKyAgICAgICAgPGRvYzpzb3VyY2U+CisgICAgICAgICA8c2NyaXB0PgorICAgICAg
ICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgeworICAgICAgICAgICAgICRzY29wZS5jb2xvciA9
ICdibHVlJzsKKyAgICAgICAgICAgfQorICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICA8Zm9y
bSBuYW1lPSJteUZvcm0iIG5nLWNvbnRyb2xsZXI9IkN0cmwiPgorICAgICAgICAgICA8aW5wdXQg
dHlwZT0icmFkaW8iIG5nLW1vZGVsPSJjb2xvciIgdmFsdWU9InJlZCI+ICBSZWQgPGJyLz4KKyAg
ICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuZy1tb2RlbD0iY29sb3IiIHZhbHVlPSJncmVl
biI+IEdyZWVuIDxici8+CisgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmctbW9kZWw9
ImNvbG9yIiB2YWx1ZT0iYmx1ZSI+IEJsdWUgPGJyLz4KKyAgICAgICAgICAgPHR0PmNvbG9yID0g
e3tjb2xvcn19PC90dD48YnIvPgorICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgPC9kb2M6c291
cmNlPgorICAgICAgICA8ZG9jOnNjZW5hcmlvPgorICAgICAgICAgIGl0KCdzaG91bGQgY2hhbmdl
IHN0YXRlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3QoYmluZGluZygnY29sb3In
KSkudG9FcXVhbCgnYmx1ZScpOworCisgICAgICAgICAgICBpbnB1dCgnY29sb3InKS5zZWxlY3Qo
J3JlZCcpOworICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ2NvbG9yJykpLnRvRXF1YWwoJ3Jl
ZCcpOworICAgICAgICAgIH0pOworICAgICAgICA8L2RvYzpzY2VuYXJpbz4KKyAgICAgIDwvZG9j
OmV4YW1wbGU+CisgICAqLworICAncmFkaW8nOiByYWRpb0lucHV0VHlwZSwKKworCisgIC8qKgor
ICAgKiBAbmdkb2MgaW5wdXRUeXBlCisgICAqIEBuYW1lIG5nLmRpcmVjdGl2ZTppbnB1dC5jaGVj
a2JveAorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogSFRNTCBjaGVja2JveC4KKyAgICoK
KyAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Np
b24gdG8gZGF0YS1iaW5kIHRvLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkg
bmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuCisg
ICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdUcnVlVmFsdWUgVGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBl
eHByZXNzaW9uIHNob3VsZCBiZSBzZXQgd2hlbiBzZWxlY3RlZC4KKyAgICogQHBhcmFtIHtzdHJp
bmc9fSBuZ0ZhbHNlVmFsdWUgVGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBleHByZXNzaW9uIHNob3Vs
ZCBiZSBzZXQgd2hlbiBub3Qgc2VsZWN0ZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFu
Z2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBk
dWUgdG8gdXNlcgorICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50Lgor
ICAgKgorICAgKiBAZXhhbXBsZQorICAgICAgPGRvYzpleGFtcGxlPgorICAgICAgICA8ZG9jOnNv
dXJjZT4KKyAgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3Bl
KSB7CisgICAgICAgICAgICAgJHNjb3BlLnZhbHVlMSA9IHRydWU7CisgICAgICAgICAgICAgJHNj
b3BlLnZhbHVlMiA9ICdZRVMnCisgICAgICAgICAgIH0KKyAgICAgICAgIDwvc2NyaXB0PgorICAg
ICAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVyPSJDdHJsIj4KKyAgICAgICAg
ICAgVmFsdWUxOiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJ2YWx1ZTEiPiA8YnIv
PgorICAgICAgICAgICBWYWx1ZTI6IDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9InZh
bHVlMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmctdHJ1ZS12YWx1ZT0iWUVTIiBuZy1m
YWxzZS12YWx1ZT0iTk8iPiA8YnIvPgorICAgICAgICAgICA8dHQ+dmFsdWUxID0ge3t2YWx1ZTF9
fTwvdHQ+PGJyLz4KKyAgICAgICAgICAgPHR0PnZhbHVlMiA9IHt7dmFsdWUyfX08L3R0Pjxici8+
CisgICAgICAgICAgPC9mb3JtPgorICAgICAgICA8L2RvYzpzb3VyY2U+CisgICAgICAgIDxkb2M6
c2NlbmFyaW8+CisgICAgICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2Ugc3RhdGUnLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd2YWx1ZTEnKSkudG9FcXVhbCgndHJ1ZScp
OworICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3ZhbHVlMicpKS50b0VxdWFsKCdZRVMnKTsK
KworICAgICAgICAgICAgaW5wdXQoJ3ZhbHVlMScpLmNoZWNrKCk7CisgICAgICAgICAgICBpbnB1
dCgndmFsdWUyJykuY2hlY2soKTsKKyAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd2YWx1ZTEn
KSkudG9FcXVhbCgnZmFsc2UnKTsKKyAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd2YWx1ZTIn
KSkudG9FcXVhbCgnTk8nKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgPC9kb2M6c2NlbmFyaW8+
CisgICAgICA8L2RvYzpleGFtcGxlPgorICAgKi8KKyAgJ2NoZWNrYm94JzogY2hlY2tib3hJbnB1
dFR5cGUsCisKKyAgJ2hpZGRlbic6IG5vb3AsCisgICdidXR0b24nOiBub29wLAorICAnc3VibWl0
Jzogbm9vcCwKKyAgJ3Jlc2V0Jzogbm9vcAorfTsKKworCitmdW5jdGlvbiBpc0VtcHR5KHZhbHVl
KSB7CisgIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgfHwgdmFsdWUgPT09ICcnIHx8IHZhbHVl
ID09PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZTsKK30KKworCitmdW5jdGlvbiB0ZXh0SW5wdXRU
eXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHsKKwor
ICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgdmFsdWUgPSB0cmltKGVsZW1l
bnQudmFsKCkpOworCisgICAgaWYgKGN0cmwuJHZpZXdWYWx1ZSAhPT0gdmFsdWUpIHsKKyAgICAg
IHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHsKKyAgICAgICAgY3RybC4kc2V0Vmlld1ZhbHVlKHZh
bHVlKTsKKyAgICAgIH0pOworICAgIH0KKyAgfTsKKworICAvLyBpZiB0aGUgYnJvd3NlciBkb2Vz
IHN1cHBvcnQgImlucHV0IiBldmVudCwgd2UgYXJlIGZpbmUgLSBleGNlcHQgb24gSUU5IHdoaWNo
IGRvZXNuJ3QgZmlyZSB0aGUKKyAgLy8gaW5wdXQgZXZlbnQgb24gYmFja3NwYWNlLCBkZWxldGUg
b3IgY3V0CisgIGlmICgkc25pZmZlci5oYXNFdmVudCgnaW5wdXQnKSkgeworICAgIGVsZW1lbnQu
YmluZCgnaW5wdXQnLCBsaXN0ZW5lcik7CisgIH0gZWxzZSB7CisgICAgdmFyIHRpbWVvdXQ7CisK
KyAgICB2YXIgZGVmZXJMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCF0aW1lb3V0
KSB7CisgICAgICAgIHRpbWVvdXQgPSAkYnJvd3Nlci5kZWZlcihmdW5jdGlvbigpIHsKKyAgICAg
ICAgICBsaXN0ZW5lcigpOworICAgICAgICAgIHRpbWVvdXQgPSBudWxsOworICAgICAgICB9KTsK
KyAgICAgIH0KKyAgICB9OworCisgICAgZWxlbWVudC5iaW5kKCdrZXlkb3duJywgZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgIHZhciBrZXkgPSBldmVudC5rZXlDb2RlOworCisgICAgICAvLyBpZ25v
cmUKKyAgICAgIC8vICAgIGNvbW1hbmQgICAgICAgICAgICBtb2RpZmllcnMgICAgICAgICAgICAg
ICAgICAgYXJyb3dzCisgICAgICBpZiAoa2V5ID09PSA5MSB8fCAoMTUgPCBrZXkgJiYga2V5IDwg
MTkpIHx8ICgzNyA8PSBrZXkgJiYga2V5IDw9IDQwKSkgcmV0dXJuOworCisgICAgICBkZWZlckxp
c3RlbmVyKCk7CisgICAgfSk7CisKKyAgICAvLyBpZiB1c2VyIHBhc3RlIGludG8gaW5wdXQgdXNp
bmcgbW91c2UsIHdlIG5lZWQgImNoYW5nZSIgZXZlbnQgdG8gY2F0Y2ggaXQKKyAgICBlbGVtZW50
LmJpbmQoJ2NoYW5nZScsIGxpc3RlbmVyKTsKKworICAgIC8vIGlmIHVzZXIgbW9kaWZpZXMgaW5w
dXQgdmFsdWUgdXNpbmcgY29udGV4dCBtZW51IGluIElFLCB3ZSBuZWVkICJwYXN0ZSIgYW5kICJj
dXQiIGV2ZW50cyB0byBjYXRjaCBpdAorICAgIGlmICgkc25pZmZlci5oYXNFdmVudCgncGFzdGUn
KSkgeworICAgICAgZWxlbWVudC5iaW5kKCdwYXN0ZSBjdXQnLCBkZWZlckxpc3RlbmVyKTsKKyAg
ICB9CisgIH0KKworCisgIGN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkgeworICAgIGVsZW1lbnQu
dmFsKGlzRW1wdHkoY3RybC4kdmlld1ZhbHVlKSA/ICcnIDogY3RybC4kdmlld1ZhbHVlKTsKKyAg
fTsKKworICAvLyBwYXR0ZXJuIHZhbGlkYXRvcgorICB2YXIgcGF0dGVybiA9IGF0dHIubmdQYXR0
ZXJuLAorICAgICAgcGF0dGVyblZhbGlkYXRvcjsKKworICB2YXIgdmFsaWRhdGUgPSBmdW5jdGlv
bihyZWdleHAsIHZhbHVlKSB7CisgICAgaWYgKGlzRW1wdHkodmFsdWUpIHx8IHJlZ2V4cC50ZXN0
KHZhbHVlKSkgeworICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ3BhdHRlcm4nLCB0cnVlKTsKKyAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgY3RybC4kc2V0VmFsaWRpdHko
J3BhdHRlcm4nLCBmYWxzZSk7CisgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgIH0KKyAgfTsK
KworICBpZiAocGF0dGVybikgeworICAgIGlmIChwYXR0ZXJuLm1hdGNoKC9eXC8oLiopXC8kLykp
IHsKKyAgICAgIHBhdHRlcm4gPSBuZXcgUmVnRXhwKHBhdHRlcm4uc3Vic3RyKDEsIHBhdHRlcm4u
bGVuZ3RoIC0gMikpOworICAgICAgcGF0dGVyblZhbGlkYXRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgICAgIHJldHVybiB2YWxpZGF0ZShwYXR0ZXJuLCB2YWx1ZSkKKyAgICAgIH07CisgICAg
fSBlbHNlIHsKKyAgICAgIHBhdHRlcm5WYWxpZGF0b3IgPSBmdW5jdGlvbih2YWx1ZSkgeworICAg
ICAgICB2YXIgcGF0dGVybk9iaiA9IHNjb3BlLiRldmFsKHBhdHRlcm4pOworCisgICAgICAgIGlm
ICghcGF0dGVybk9iaiB8fCAhcGF0dGVybk9iai50ZXN0KSB7CisgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdFeHBlY3RlZCAnICsgcGF0dGVybiArICcgdG8gYmUgYSBSZWdFeHAgYnV0IHdhcyAn
ICsgcGF0dGVybk9iaik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHBhdHRl
cm5PYmosIHZhbHVlKTsKKyAgICAgIH07CisgICAgfQorCisgICAgY3RybC4kZm9ybWF0dGVycy5w
dXNoKHBhdHRlcm5WYWxpZGF0b3IpOworICAgIGN0cmwuJHBhcnNlcnMucHVzaChwYXR0ZXJuVmFs
aWRhdG9yKTsKKyAgfQorCisgIC8vIG1pbiBsZW5ndGggdmFsaWRhdG9yCisgIGlmIChhdHRyLm5n
TWlubGVuZ3RoKSB7CisgICAgdmFyIG1pbmxlbmd0aCA9IGludChhdHRyLm5nTWlubGVuZ3RoKTsK
KyAgICB2YXIgbWluTGVuZ3RoVmFsaWRhdG9yID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIGlm
ICghaXNFbXB0eSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoIDwgbWlubGVuZ3RoKSB7CisgICAgICAg
IGN0cmwuJHNldFZhbGlkaXR5KCdtaW5sZW5ndGgnLCBmYWxzZSk7CisgICAgICAgIHJldHVybiB1
bmRlZmluZWQ7CisgICAgICB9IGVsc2UgeworICAgICAgICBjdHJsLiRzZXRWYWxpZGl0eSgnbWlu
bGVuZ3RoJywgdHJ1ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgIH0KKyAgICB9Owor
CisgICAgY3RybC4kcGFyc2Vycy5wdXNoKG1pbkxlbmd0aFZhbGlkYXRvcik7CisgICAgY3RybC4k
Zm9ybWF0dGVycy5wdXNoKG1pbkxlbmd0aFZhbGlkYXRvcik7CisgIH0KKworICAvLyBtYXggbGVu
Z3RoIHZhbGlkYXRvcgorICBpZiAoYXR0ci5uZ01heGxlbmd0aCkgeworICAgIHZhciBtYXhsZW5n
dGggPSBpbnQoYXR0ci5uZ01heGxlbmd0aCk7CisgICAgdmFyIG1heExlbmd0aFZhbGlkYXRvciA9
IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICBpZiAoIWlzRW1wdHkodmFsdWUpICYmIHZhbHVlLmxl
bmd0aCA+IG1heGxlbmd0aCkgeworICAgICAgICBjdHJsLiRzZXRWYWxpZGl0eSgnbWF4bGVuZ3Ro
JywgZmFsc2UpOworICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ21heGxlbmd0aCcsIHRydWUpOworICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgICB9CisgICAgfTsKKworICAgIGN0cmwuJHBhcnNlcnMucHVzaChtYXhM
ZW5ndGhWYWxpZGF0b3IpOworICAgIGN0cmwuJGZvcm1hdHRlcnMucHVzaChtYXhMZW5ndGhWYWxp
ZGF0b3IpOworICB9Cit9CisKK2Z1bmN0aW9uIG51bWJlcklucHV0VHlwZShzY29wZSwgZWxlbWVu
dCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyKSB7CisgIHRleHRJbnB1dFR5cGUoc2Nv
cGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcik7CisKKyAgY3RybC4k
cGFyc2Vycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgdmFyIGVtcHR5ID0gaXNFbXB0eSh2
YWx1ZSk7CisgICAgaWYgKGVtcHR5IHx8IE5VTUJFUl9SRUdFWFAudGVzdCh2YWx1ZSkpIHsKKyAg
ICAgIGN0cmwuJHNldFZhbGlkaXR5KCdudW1iZXInLCB0cnVlKTsKKyAgICAgIHJldHVybiB2YWx1
ZSA9PT0gJycgPyBudWxsIDogKGVtcHR5ID8gdmFsdWUgOiBwYXJzZUZsb2F0KHZhbHVlKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIGN0cmwuJHNldFZhbGlkaXR5KCdudW1iZXInLCBmYWxzZSk7Cisg
ICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgIH0KKyAgfSk7CisKKyAgY3RybC4kZm9ybWF0dGVy
cy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgcmV0dXJuIGlzRW1wdHkodmFsdWUpID8gJycg
OiAnJyArIHZhbHVlOworICB9KTsKKworICBpZiAoYXR0ci5taW4pIHsKKyAgICB2YXIgbWluID0g
cGFyc2VGbG9hdChhdHRyLm1pbik7CisgICAgdmFyIG1pblZhbGlkYXRvciA9IGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICBpZiAoIWlzRW1wdHkodmFsdWUpICYmIHZhbHVlIDwgbWluKSB7CisgICAg
ICAgIGN0cmwuJHNldFZhbGlkaXR5KCdtaW4nLCBmYWxzZSk7CisgICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7CisgICAgICB9IGVsc2UgeworICAgICAgICBjdHJsLiRzZXRWYWxpZGl0eSgnbWluJywg
dHJ1ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgIH0KKyAgICB9OworCisgICAgY3Ry
bC4kcGFyc2Vycy5wdXNoKG1pblZhbGlkYXRvcik7CisgICAgY3RybC4kZm9ybWF0dGVycy5wdXNo
KG1pblZhbGlkYXRvcik7CisgIH0KKworICBpZiAoYXR0ci5tYXgpIHsKKyAgICB2YXIgbWF4ID0g
cGFyc2VGbG9hdChhdHRyLm1heCk7CisgICAgdmFyIG1heFZhbGlkYXRvciA9IGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICBpZiAoIWlzRW1wdHkodmFsdWUpICYmIHZhbHVlID4gbWF4KSB7CisgICAg
ICAgIGN0cmwuJHNldFZhbGlkaXR5KCdtYXgnLCBmYWxzZSk7CisgICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7CisgICAgICB9IGVsc2UgeworICAgICAgICBjdHJsLiRzZXRWYWxpZGl0eSgnbWF4Jywg
dHJ1ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgIH0KKyAgICB9OworCisgICAgY3Ry
bC4kcGFyc2Vycy5wdXNoKG1heFZhbGlkYXRvcik7CisgICAgY3RybC4kZm9ybWF0dGVycy5wdXNo
KG1heFZhbGlkYXRvcik7CisgIH0KKworICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2goZnVuY3Rpb24o
dmFsdWUpIHsKKworICAgIGlmIChpc0VtcHR5KHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkpIHsK
KyAgICAgIGN0cmwuJHNldFZhbGlkaXR5KCdudW1iZXInLCB0cnVlKTsKKyAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ251bWJlcicsIGZh
bHNlKTsKKyAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgfQorICB9KTsKK30KKworZnVuY3Rp
b24gdXJsSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJy
b3dzZXIpIHsKKyAgdGV4dElucHV0VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNu
aWZmZXIsICRicm93c2VyKTsKKworICB2YXIgdXJsVmFsaWRhdG9yID0gZnVuY3Rpb24odmFsdWUp
IHsKKyAgICBpZiAoaXNFbXB0eSh2YWx1ZSkgfHwgVVJMX1JFR0VYUC50ZXN0KHZhbHVlKSkgewor
ICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ3VybCcsIHRydWUpOworICAgICAgcmV0dXJuIHZhbHVl
OworICAgIH0gZWxzZSB7CisgICAgICBjdHJsLiRzZXRWYWxpZGl0eSgndXJsJywgZmFsc2UpOwor
ICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICB9CisgIH07CisKKyAgY3RybC4kZm9ybWF0dGVy
cy5wdXNoKHVybFZhbGlkYXRvcik7CisgIGN0cmwuJHBhcnNlcnMucHVzaCh1cmxWYWxpZGF0b3Ip
OworfQorCitmdW5jdGlvbiBlbWFpbElucHV0VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3Ry
bCwgJHNuaWZmZXIsICRicm93c2VyKSB7CisgIHRleHRJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQs
IGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcik7CisKKyAgdmFyIGVtYWlsVmFsaWRhdG9y
ID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBpZiAoaXNFbXB0eSh2YWx1ZSkgfHwgRU1BSUxfUkVH
RVhQLnRlc3QodmFsdWUpKSB7CisgICAgICBjdHJsLiRzZXRWYWxpZGl0eSgnZW1haWwnLCB0cnVl
KTsKKyAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgY3RybC4kc2V0VmFs
aWRpdHkoJ2VtYWlsJywgZmFsc2UpOworICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICB9Cisg
IH07CisKKyAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGVtYWlsVmFsaWRhdG9yKTsKKyAgY3RybC4k
cGFyc2Vycy5wdXNoKGVtYWlsVmFsaWRhdG9yKTsKK30KKworZnVuY3Rpb24gcmFkaW9JbnB1dFR5
cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpIHsKKyAgLy8gbWFrZSB0aGUgbmFtZSB1bmlx
dWUsIGlmIG5vdCBkZWZpbmVkCisgIGlmIChpc1VuZGVmaW5lZChhdHRyLm5hbWUpKSB7CisgICAg
ZWxlbWVudC5hdHRyKCduYW1lJywgbmV4dFVpZCgpKTsKKyAgfQorCisgIGVsZW1lbnQuYmluZCgn
Y2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoZWxlbWVudFswXS5jaGVja2VkKSB7CisgICAg
ICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7CisgICAgICAgIGN0cmwuJHNldFZpZXdWYWx1ZShh
dHRyLnZhbHVlKTsKKyAgICAgIH0pOworICAgIH0KKyAgfSk7CisKKyAgY3RybC4kcmVuZGVyID0g
ZnVuY3Rpb24oKSB7CisgICAgdmFyIHZhbHVlID0gYXR0ci52YWx1ZTsKKyAgICBlbGVtZW50WzBd
LmNoZWNrZWQgPSAodmFsdWUgPT0gY3RybC4kdmlld1ZhbHVlKTsKKyAgfTsKKworICBhdHRyLiRv
YnNlcnZlKCd2YWx1ZScsIGN0cmwuJHJlbmRlcik7Cit9CisKK2Z1bmN0aW9uIGNoZWNrYm94SW5w
dXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKSB7CisgIHZhciB0cnVlVmFsdWUgPSBh
dHRyLm5nVHJ1ZVZhbHVlLAorICAgICAgZmFsc2VWYWx1ZSA9IGF0dHIubmdGYWxzZVZhbHVlOwor
CisgIGlmICghaXNTdHJpbmcodHJ1ZVZhbHVlKSkgdHJ1ZVZhbHVlID0gdHJ1ZTsKKyAgaWYgKCFp
c1N0cmluZyhmYWxzZVZhbHVlKSkgZmFsc2VWYWx1ZSA9IGZhbHNlOworCisgIGVsZW1lbnQuYmlu
ZCgnY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7Cisg
ICAgICBjdHJsLiRzZXRWaWV3VmFsdWUoZWxlbWVudFswXS5jaGVja2VkKTsKKyAgICB9KTsKKyAg
fSk7CisKKyAgY3RybC4kcmVuZGVyID0gZnVuY3Rpb24oKSB7CisgICAgZWxlbWVudFswXS5jaGVj
a2VkID0gY3RybC4kdmlld1ZhbHVlOworICB9OworCisgIGN0cmwuJGZvcm1hdHRlcnMucHVzaChm
dW5jdGlvbih2YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZVZhbHVlOworICB9KTsK
KworICBjdHJsLiRwYXJzZXJzLnB1c2goZnVuY3Rpb24odmFsdWUpIHsKKyAgICByZXR1cm4gdmFs
dWUgPyB0cnVlVmFsdWUgOiBmYWxzZVZhbHVlOworICB9KTsKK30KKworCisvKioKKyAqIEBuZ2Rv
YyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRpcmVjdGl2ZTp0ZXh0YXJlYQorICogQHJlc3RyaWN0
IEUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEhUTUwgdGV4dGFyZWEgZWxlbWVudCBjb250cm9s
IHdpdGggYW5ndWxhciBkYXRhLWJpbmRpbmcuIFRoZSBkYXRhLWJpbmRpbmcgYW5kIHZhbGlkYXRp
b24KKyAqIHByb3BlcnRpZXMgb2YgdGhpcyBlbGVtZW50IGFyZSBleGFjdGx5IHRoZSBzYW1lIGFz
IHRob3NlIG9mIHRoZQorICoge0BsaW5rIG5nLmRpcmVjdGl2ZTppbnB1dCBpbnB1dCBlbGVtZW50
fS4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhw
cmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCisgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVy
dHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQu
CisgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9u
IGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuCisgKiBAcGFyYW0ge3N0cmlu
Zz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2
YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG8KKyAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVx
dWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0
ZWFkIG9mCisgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRo
ZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4KKyAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGgg
U2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hv
cnRlciB0aGFuCisgKiAgICBtaW5sZW5ndGguCisgKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVu
Z3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlz
IGxvbmdlciB0aGFuCisgKiAgICBtYXhsZW5ndGguCisgKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0
dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZG9l
cyBub3QgbWF0Y2ggdGhlCisgKiAgICBSZWdFeHAgcGF0dGVybiBleHByZXNzaW9uLiBFeHBlY3Rl
ZCB2YWx1ZSBpcyBgL3JlZ2V4cC9gIGZvciBpbmxpbmUgcGF0dGVybnMgb3IgYHJlZ2V4cGAgZm9y
CisgKiAgICBwYXR0ZXJucyBkZWZpbmVkIGFzIHNjb3BlIGV4cHJlc3Npb25zLgorICogQHBhcmFt
IHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hl
biBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCisgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBp
bnB1dCBlbGVtZW50LgorICovCisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFt
ZSBuZy5kaXJlY3RpdmU6aW5wdXQKKyAqIEByZXN0cmljdCBFCisgKgorICogQGRlc2NyaXB0aW9u
CisgKiBIVE1MIGlucHV0IGVsZW1lbnQgY29udHJvbCB3aXRoIGFuZ3VsYXIgZGF0YS1iaW5kaW5n
LiBJbnB1dCBjb250cm9sIGZvbGxvd3MgSFRNTDUgaW5wdXQgdHlwZXMKKyAqIGFuZCBwb2x5Zmls
bHMgdGhlIEhUTUw1IHZhbGlkYXRpb24gYmVoYXZpb3IgZm9yIG9sZGVyIGJyb3dzZXJzLgorICoK
KyAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9u
IHRvIGRhdGEtYmluZCB0by4KKyAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1l
IG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KKyAqIEBw
YXJhbSB7c3RyaW5nPX0gcmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Ig
a2V5IGlmIHRoZSB2YWx1ZSBpcyBub3QgZW50ZXJlZC4KKyAqIEBwYXJhbSB7Ym9vbGVhbj19IG5n
UmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBpZiBzZXQgdG8gdHJ1ZQorICogQHBh
cmFtIHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24gZXJy
b3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW4KKyAqICAgIG1pbmxlbmd0aC4KKyAq
IEBwYXJhbSB7bnVtYmVyPX0gbmdNYXhsZW5ndGggU2V0cyBgbWF4bGVuZ3RoYCB2YWxpZGF0aW9u
IGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbG9uZ2VyIHRoYW4KKyAqICAgIG1heGxlbmd0aC4K
KyAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQYXR0ZXJuIFNldHMgYHBhdHRlcm5gIHZhbGlkYXRpb24g
ZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUKKyAqICAgIFJlZ0V4cCBw
YXR0ZXJuIGV4cHJlc3Npb24uIEV4cGVjdGVkIHZhbHVlIGlzIGAvcmVnZXhwL2AgZm9yIGlubGlu
ZSBwYXR0ZXJucyBvciBgcmVnZXhwYCBmb3IKKyAqICAgIHBhdHRlcm5zIGRlZmluZWQgYXMgc2Nv
cGUgZXhwcmVzc2lvbnMuCisgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhw
cmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKKyAq
ICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCisgKgorICogQGV4YW1wbGUK
KyAgICA8ZG9jOmV4YW1wbGU+CisgICAgICA8ZG9jOnNvdXJjZT4KKyAgICAgICA8c2NyaXB0Pgor
ICAgICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKKyAgICAgICAgICAgJHNjb3BlLnVzZXIg
PSB7bmFtZTogJ2d1ZXN0JywgbGFzdDogJ3Zpc2l0b3InfTsKKyAgICAgICAgIH0KKyAgICAgICA8
L3NjcmlwdD4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkN0cmwiPgorICAgICAgICAgPGZv
cm0gbmFtZT0ibXlGb3JtIj4KKyAgICAgICAgICAgVXNlciBuYW1lOiA8aW5wdXQgdHlwZT0idGV4
dCIgbmFtZT0idXNlck5hbWUiIG5nLW1vZGVsPSJ1c2VyLm5hbWUiIHJlcXVpcmVkPgorICAgICAg
ICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS51c2VyTmFtZS4kZXJyb3Iu
cmVxdWlyZWQiPgorICAgICAgICAgICAgIFJlcXVpcmVkITwvc3Bhbj48YnI+CisgICAgICAgICAg
IExhc3QgbmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imxhc3ROYW1lIiBuZy1tb2RlbD0i
dXNlci5sYXN0IgorICAgICAgICAgICAgIG5nLW1pbmxlbmd0aD0iMyIgbmctbWF4bGVuZ3RoPSIx
MCI+CisgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmxhc3RO
YW1lLiRlcnJvci5taW5sZW5ndGgiPgorICAgICAgICAgICAgIFRvbyBzaG9ydCE8L3NwYW4+Cisg
ICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmxhc3ROYW1lLiRl
cnJvci5tYXhsZW5ndGgiPgorICAgICAgICAgICAgIFRvbyBsb25nITwvc3Bhbj48YnI+CisgICAg
ICAgICA8L2Zvcm0+CisgICAgICAgICA8aHI+CisgICAgICAgICA8dHQ+dXNlciA9IHt7dXNlcn19
PC90dD48YnIvPgorICAgICAgICAgPHR0Pm15Rm9ybS51c2VyTmFtZS4kdmFsaWQgPSB7e215Rm9y
bS51c2VyTmFtZS4kdmFsaWR9fTwvdHQ+PGJyPgorICAgICAgICAgPHR0Pm15Rm9ybS51c2VyTmFt
ZS4kZXJyb3IgPSB7e215Rm9ybS51c2VyTmFtZS4kZXJyb3J9fTwvdHQ+PGJyPgorICAgICAgICAg
PHR0Pm15Rm9ybS5sYXN0TmFtZS4kdmFsaWQgPSB7e215Rm9ybS5sYXN0TmFtZS4kdmFsaWR9fTwv
dHQ+PGJyPgorICAgICAgICAgPHR0Pm15Rm9ybS5sYXN0TmFtZS4kZXJyb3IgPSB7e215Rm9ybS5s
YXN0TmFtZS4kZXJyb3J9fTwvdHQ+PGJyPgorICAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7
e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyPgorICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVx
dWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnI+CisgICAgICAgICA8
dHQ+bXlGb3JtLiRlcnJvci5taW5sZW5ndGggPSB7eyEhbXlGb3JtLiRlcnJvci5taW5sZW5ndGh9
fTwvdHQ+PGJyPgorICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IubWF4bGVuZ3RoID0ge3shIW15
Rm9ybS4kZXJyb3IubWF4bGVuZ3RofX08L3R0Pjxicj4KKyAgICAgICA8L2Rpdj4KKyAgICAgIDwv
ZG9jOnNvdXJjZT4KKyAgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgIGl0KCdzaG91bGQgaW5p
dGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGV4cGVjdChiaW5kaW5n
KCd1c2VyJykpLnRvRXF1YWwoJ3sibmFtZSI6Imd1ZXN0IiwibGFzdCI6InZpc2l0b3IifScpOwor
ICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0udXNlck5hbWUuJHZhbGlkJykpLnRvRXF1
YWwoJ3RydWUnKTsKKyAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLiR2YWxpZCcpKS50
b0VxdWFsKCd0cnVlJyk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgYmUgaW52
YWxpZCBpZiBlbXB0eSB3aGVuIHJlcXVpcmVkJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgaW5w
dXQoJ3VzZXIubmFtZScpLmVudGVyKCcnKTsKKyAgICAgICAgICBleHBlY3QoYmluZGluZygndXNl
cicpKS50b0VxdWFsKCd7Imxhc3QiOiJ2aXNpdG9yIn0nKTsKKyAgICAgICAgICBleHBlY3QoYmlu
ZGluZygnbXlGb3JtLnVzZXJOYW1lLiR2YWxpZCcpKS50b0VxdWFsKCdmYWxzZScpOworICAgICAg
ICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0uJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7Cisg
ICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgYmUgdmFsaWQgaWYgZW1wdHkgd2hlbiBt
aW4gbGVuZ3RoIGlzIHNldCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGlucHV0KCd1c2VyLmxh
c3QnKS5lbnRlcignJyk7CisgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3VzZXInKSkudG9FcXVh
bCgneyJuYW1lIjoiZ3Vlc3QiLCJsYXN0IjoiIn0nKTsKKyAgICAgICAgICBleHBlY3QoYmluZGlu
ZygnbXlGb3JtLmxhc3ROYW1lLiR2YWxpZCcpKS50b0VxdWFsKCd0cnVlJyk7CisgICAgICAgICAg
ZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS4kdmFsaWQnKSkudG9FcXVhbCgndHJ1ZScpOworICAgICAg
ICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgbGVzcyB0aGFuIHJlcXVp
cmVkIG1pbiBsZW5ndGgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBpbnB1dCgndXNlci5sYXN0
JykuZW50ZXIoJ3h4Jyk7CisgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3VzZXInKSkudG9FcXVh
bCgneyJuYW1lIjoiZ3Vlc3QifScpOworICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0u
bGFzdE5hbWUuJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7CisgICAgICAgICAgZXhwZWN0KGJp
bmRpbmcoJ215Rm9ybS5sYXN0TmFtZS4kZXJyb3InKSkudG9NYXRjaCgvbWlubGVuZ3RoLyk7Cisg
ICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2Un
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGxvbmdl
ciB0aGFuIG1heCBsZW5ndGgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBpbnB1dCgndXNlci5s
YXN0JykuZW50ZXIoJ3NvbWUgcmlkaWN1bG91c2x5IGxvbmcgbmFtZScpOworICAgICAgICAgIGV4
cGVjdChiaW5kaW5nKCd1c2VyJykpCisgICAgICAgICAgICAudG9FcXVhbCgneyJuYW1lIjoiZ3Vl
c3QifScpOworICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0ubGFzdE5hbWUuJHZhbGlk
JykpLnRvRXF1YWwoJ2ZhbHNlJyk7CisgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5s
YXN0TmFtZS4kZXJyb3InKSkudG9NYXRjaCgvbWF4bGVuZ3RoLyk7CisgICAgICAgICAgZXhwZWN0
KGJpbmRpbmcoJ215Rm9ybS4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKKyAgICAgICAgfSk7
CisgICAgICA8L2RvYzpzY2VuYXJpbz4KKyAgICA8L2RvYzpleGFtcGxlPgorICovCit2YXIgaW5w
dXREaXJlY3RpdmUgPSBbJyRicm93c2VyJywgJyRzbmlmZmVyJywgZnVuY3Rpb24oJGJyb3dzZXIs
ICRzbmlmZmVyKSB7CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdFJywKKyAgICByZXF1aXJl
OiAnP25nTW9kZWwnLAorICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBj
dHJsKSB7CisgICAgICBpZiAoY3RybCkgeworICAgICAgICAoaW5wdXRUeXBlW2xvd2VyY2FzZShh
dHRyLnR5cGUpXSB8fCBpbnB1dFR5cGUudGV4dCkoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmws
ICRzbmlmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJGJyb3dzZXIpOworICAgICAgfQorICAgIH0KKyAgfTsKK31dOworCit2
YXIgVkFMSURfQ0xBU1MgPSAnbmctdmFsaWQnLAorICAgIElOVkFMSURfQ0xBU1MgPSAnbmctaW52
YWxpZCcsCisgICAgUFJJU1RJTkVfQ0xBU1MgPSAnbmctcHJpc3RpbmUnLAorICAgIERJUlRZX0NM
QVNTID0gJ25nLWRpcnR5JzsKKworLyoqCisgKiBAbmdkb2Mgb2JqZWN0CisgKiBAbmFtZSBuZy5k
aXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlcgorICoKKyAqIEBwcm9wZXJ0eSB7c3Ry
aW5nfSAkdmlld1ZhbHVlIEFjdHVhbCBzdHJpbmcgdmFsdWUgaW4gdGhlIHZpZXcuCisgKiBAcHJv
cGVydHkgeyp9ICRtb2RlbFZhbHVlIFRoZSB2YWx1ZSBpbiB0aGUgbW9kZWwsIHRoYXQgdGhlIGNv
bnRyb2wgaXMgYm91bmQgdG8uCisgKiBAcHJvcGVydHkge0FycmF5LjxGdW5jdGlvbj59ICRwYXJz
ZXJzIFdoZW5ldmVyIHRoZSBjb250cm9sIHJlYWRzIHZhbHVlIGZyb20gdGhlIERPTSwgaXQgZXhl
Y3V0ZXMKKyAqICAgICBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHNhbml0aXplIC8gY29udmVy
dCB0aGUgdmFsdWUgYXMgd2VsbCBhcyB2YWxpZGF0ZS4KKyAqCisgKiBAcHJvcGVydHkge0FycmF5
LjxGdW5jdGlvbj59ICRmb3JtYXR0ZXJzIFdoZW5ldmVyIHRoZSBtb2RlbCB2YWx1ZSBjaGFuZ2Vz
LCBpdCBleGVjdXRlcyBhbGwgb2YKKyAqICAgICB0aGVzZSBmdW5jdGlvbnMgdG8gY29udmVydCB0
aGUgdmFsdWUgYXMgd2VsbCBhcyB2YWxpZGF0ZS4KKyAqCisgKiBAcHJvcGVydHkge09iamVjdH0g
JGVycm9yIEFuIGJqZWN0IGhhc2ggd2l0aCBhbGwgZXJyb3JzIGFzIGtleXMuCisgKgorICogQHBy
b3BlcnR5IHtib29sZWFufSAkcHJpc3RpbmUgVHJ1ZSBpZiB1c2VyIGhhcyBub3QgaW50ZXJhY3Rl
ZCB3aXRoIHRoZSBjb250cm9sIHlldC4KKyAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJGRpcnR5IFRy
dWUgaWYgdXNlciBoYXMgYWxyZWFkeSBpbnRlcmFjdGVkIHdpdGggdGhlIGNvbnRyb2wuCisgKiBA
cHJvcGVydHkge2Jvb2xlYW59ICR2YWxpZCBUcnVlIGlmIHRoZXJlIGlzIG5vIGVycm9yLgorICog
QHByb3BlcnR5IHtib29sZWFufSAkaW52YWxpZCBUcnVlIGlmIGF0IGxlYXN0IG9uZSBlcnJvciBv
biB0aGUgY29udHJvbC4KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBgTmdNb2RlbENvbnRy
b2xsZXJgIHByb3ZpZGVzIEFQSSBmb3IgdGhlIGBuZy1tb2RlbGAgZGlyZWN0aXZlLiBUaGUgY29u
dHJvbGxlciBjb250YWlucworICogc2VydmljZXMgZm9yIGRhdGEtYmluZGluZywgdmFsaWRhdGlv
biwgQ1NTIHVwZGF0ZSwgdmFsdWUgZm9ybWF0dGluZyBhbmQgcGFyc2luZy4gSXQKKyAqIHNwZWNp
ZmljYWxseSBkb2VzIG5vdCBjb250YWluIGFueSBsb2dpYyB3aGljaCBkZWFscyB3aXRoIERPTSBy
ZW5kZXJpbmcgb3IgbGlzdGVuaW5nIHRvCisgKiBET00gZXZlbnRzLiBUaGUgYE5nTW9kZWxDb250
cm9sbGVyYCBpcyBtZWFudCB0byBiZSBleHRlbmRlZCBieSBvdGhlciBkaXJlY3RpdmVzIHdoZXJl
LCB0aGUKKyAqIGRpcmVjdGl2ZSBwcm92aWRlcyBET00gbWFuaXB1bGF0aW9uIGFuZCB0aGUgYE5n
TW9kZWxDb250cm9sbGVyYCBwcm92aWRlcyB0aGUgZGF0YS1iaW5kaW5nLgorICoKKyAqIFRoaXMg
ZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIGBOZ01vZGVsQ29udHJvbGxlcmAgd2l0aCBhIGN1c3Rv
bSBjb250cm9sIHRvIGFjaGlldmUKKyAqIGRhdGEtYmluZGluZy4gTm90aWNlIGhvdyBkaWZmZXJl
bnQgZGlyZWN0aXZlcyAoYGNvbnRlbnRlZGl0YWJsZWAsIGBuZy1tb2RlbGAsIGFuZCBgcmVxdWly
ZWRgKQorICogY29sbGFib3JhdGUgdG9nZXRoZXIgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCByZXN1
bHQuCisgKgorICogPGV4YW1wbGUgbW9kdWxlPSJjdXN0b21Db250cm9sIj4KKyAgICA8ZmlsZSBu
YW1lPSJzdHlsZS5jc3MiPgorICAgICAgW2NvbnRlbnRlZGl0YWJsZV0geworICAgICAgICBib3Jk
ZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cisg
ICAgICAgIG1pbi1oZWlnaHQ6IDIwcHg7CisgICAgICB9CisKKyAgICAgIC5uZy1pbnZhbGlkIHsK
KyAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmVkOworICAgICAgfQorCisgICAgPC9maWxlPgor
ICAgIDxmaWxlIG5hbWU9InNjcmlwdC5qcyI+CisgICAgICBhbmd1bGFyLm1vZHVsZSgnY3VzdG9t
Q29udHJvbCcsIFtdKS4KKyAgICAgICAgZGlyZWN0aXZlKCdjb250ZW50ZWRpdGFibGUnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcmVzdHJpY3Q6ICdBJywg
Ly8gb25seSBhY3RpdmF0ZSBvbiBlbGVtZW50IGF0dHJpYnV0ZQorICAgICAgICAgICAgcmVxdWly
ZTogJz9uZ01vZGVsJywgLy8gZ2V0IGEgaG9sZCBvZiBOZ01vZGVsQ29udHJvbGxlcgorICAgICAg
ICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBuZ01vZGVsKSB7Cisg
ICAgICAgICAgICAgIGlmKCFuZ01vZGVsKSByZXR1cm47IC8vIGRvIG5vdGhpbmcgaWYgbm8gbmct
bW9kZWwKKworICAgICAgICAgICAgICAvLyBTcGVjaWZ5IGhvdyBVSSBzaG91bGQgYmUgdXBkYXRl
ZAorICAgICAgICAgICAgICBuZ01vZGVsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBlbGVtZW50Lmh0bWwobmdNb2RlbC4kdmlld1ZhbHVlIHx8ICcnKTsKKyAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgICAvLyBMaXN0ZW4gZm9yIGNoYW5nZSBldmVudHMgdG8g
ZW5hYmxlIGJpbmRpbmcKKyAgICAgICAgICAgICAgZWxlbWVudC5iaW5kKCdibHVyIGtleXVwIGNo
YW5nZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShyZWFkKTsK
KyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIHJlYWQoKTsgLy8gaW5pdGlhbGl6ZQor
CisgICAgICAgICAgICAgIC8vIFdyaXRlIGRhdGEgdG8gdGhlIG1vZGVsCisgICAgICAgICAgICAg
IGZ1bmN0aW9uIHJlYWQoKSB7CisgICAgICAgICAgICAgICAgbmdNb2RlbC4kc2V0Vmlld1ZhbHVl
KGVsZW1lbnQuaHRtbCgpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgIH07CisgICAgICAgIH0pOworICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJpbmRleC5o
dG1sIj4KKyAgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSI+CisgICAgICAgPGRpdiBjb250ZW50ZWRp
dGFibGUKKyAgICAgICAgICAgIG5hbWU9Im15V2lkZ2V0IiBuZy1tb2RlbD0idXNlckNvbnRlbnQi
CisgICAgICAgICAgICByZXF1aXJlZD5DaGFuZ2UgbWUhPC9kaXY+CisgICAgICAgIDxzcGFuIG5n
LXNob3c9Im15Rm9ybS5teVdpZGdldC4kZXJyb3IucmVxdWlyZWQiPlJlcXVpcmVkITwvc3Bhbj4K
KyAgICAgICA8aHI+CisgICAgICAgPHRleHRhcmVhIG5nLW1vZGVsPSJ1c2VyQ29udGVudCI+PC90
ZXh0YXJlYT4KKyAgICAgIDwvZm9ybT4KKyAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0ic2Nl
bmFyaW8uanMiPgorICAgICAgaXQoJ3Nob3VsZCBkYXRhLWJpbmQgYW5kIGJlY29tZSBpbnZhbGlk
JywgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjb250ZW50RWRpdGFibGUgPSBlbGVtZW50KCdb
Y29udGVudGVkaXRhYmxlXScpOworCisgICAgICAgIGV4cGVjdChjb250ZW50RWRpdGFibGUudGV4
dCgpKS50b0VxdWFsKCdDaGFuZ2UgbWUhJyk7CisgICAgICAgIGlucHV0KCd1c2VyQ29udGVudCcp
LmVudGVyKCcnKTsKKyAgICAgICAgZXhwZWN0KGNvbnRlbnRFZGl0YWJsZS50ZXh0KCkpLnRvRXF1
YWwoJycpOworICAgICAgICBleHBlY3QoY29udGVudEVkaXRhYmxlLnByb3AoJ2NsYXNzTmFtZScp
KS50b01hdGNoKC9uZy1pbnZhbGlkLXJlcXVpcmVkLyk7CisgICAgICB9KTsKKyAgICA8L2ZpbGU+
CisgKiA8L2V4YW1wbGU+CisgKgorICovCit2YXIgTmdNb2RlbENvbnRyb2xsZXIgPSBbJyRzY29w
ZScsICckZXhjZXB0aW9uSGFuZGxlcicsICckYXR0cnMnLCAnJGVsZW1lbnQnLCAnJHBhcnNlJywK
KyAgICBmdW5jdGlvbigkc2NvcGUsICRleGNlcHRpb25IYW5kbGVyLCAkYXR0ciwgJGVsZW1lbnQs
ICRwYXJzZSkgeworICB0aGlzLiR2aWV3VmFsdWUgPSBOdW1iZXIuTmFOOworICB0aGlzLiRtb2Rl
bFZhbHVlID0gTnVtYmVyLk5hTjsKKyAgdGhpcy4kcGFyc2VycyA9IFtdOworICB0aGlzLiRmb3Jt
YXR0ZXJzID0gW107CisgIHRoaXMuJHZpZXdDaGFuZ2VMaXN0ZW5lcnMgPSBbXTsKKyAgdGhpcy4k
cHJpc3RpbmUgPSB0cnVlOworICB0aGlzLiRkaXJ0eSA9IGZhbHNlOworICB0aGlzLiR2YWxpZCA9
IHRydWU7CisgIHRoaXMuJGludmFsaWQgPSBmYWxzZTsKKyAgdGhpcy4kbmFtZSA9ICRhdHRyLm5h
bWU7CisKKyAgdmFyIG5nTW9kZWxHZXQgPSAkcGFyc2UoJGF0dHIubmdNb2RlbCksCisgICAgICBu
Z01vZGVsU2V0ID0gbmdNb2RlbEdldC5hc3NpZ247CisKKyAgaWYgKCFuZ01vZGVsU2V0KSB7Cisg
ICAgdGhyb3cgRXJyb3IoTk9OX0FTU0lHTkFCTEVfTU9ERUxfRVhQUkVTU0lPTiArICRhdHRyLm5n
TW9kZWwgKworICAgICAgICAnICgnICsgc3RhcnRpbmdUYWcoJGVsZW1lbnQpICsgJyknKTsKKyAg
fQorCisgIC8qKgorICAgKiBAbmdkb2MgZnVuY3Rpb24KKyAgICogQG5hbWUgbmcuZGlyZWN0aXZl
Om5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHJlbmRlcgorICAgKiBAbWV0aG9kT2YgbmcuZGly
ZWN0aXZlOm5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9u
CisgICAqIENhbGxlZCB3aGVuIHRoZSB2aWV3IG5lZWRzIHRvIGJlIHVwZGF0ZWQuIEl0IGlzIGV4
cGVjdGVkIHRoYXQgdGhlIHVzZXIgb2YgdGhlIG5nLW1vZGVsCisgICAqIGRpcmVjdGl2ZSB3aWxs
IGltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICovCisgIHRoaXMuJHJlbmRlciA9IG5vb3A7CisK
KyAgdmFyIHBhcmVudEZvcm0gPSAkZWxlbWVudC5pbmhlcml0ZWREYXRhKCckZm9ybUNvbnRyb2xs
ZXInKSB8fCBudWxsRm9ybUN0cmwsCisgICAgICBpbnZhbGlkQ291bnQgPSAwLCAvLyB1c2VkIHRv
IGVhc2lseSBkZXRlcm1pbmUgaWYgd2UgYXJlIHZhbGlkCisgICAgICAkZXJyb3IgPSB0aGlzLiRl
cnJvciA9IHt9OyAvLyBrZWVwIGludmFsaWQga2V5cyBoZXJlCisKKworICAvLyBTZXR1cCBpbml0
aWFsIHN0YXRlIG9mIHRoZSBjb250cm9sCisgICRlbGVtZW50LmFkZENsYXNzKFBSSVNUSU5FX0NM
QVNTKTsKKyAgdG9nZ2xlVmFsaWRDc3ModHJ1ZSk7CisKKyAgLy8gY29udmVuaWVuY2UgbWV0aG9k
IGZvciBlYXN5IHRvZ2dsaW5nIG9mIGNsYXNzZXMKKyAgZnVuY3Rpb24gdG9nZ2xlVmFsaWRDc3Mo
aXNWYWxpZCwgdmFsaWRhdGlvbkVycm9yS2V5KSB7CisgICAgdmFsaWRhdGlvbkVycm9yS2V5ID0g
dmFsaWRhdGlvbkVycm9yS2V5ID8gJy0nICsgc25ha2VfY2FzZSh2YWxpZGF0aW9uRXJyb3JLZXks
ICctJykgOiAnJzsKKyAgICAkZWxlbWVudC4KKyAgICAgIHJlbW92ZUNsYXNzKChpc1ZhbGlkID8g
SU5WQUxJRF9DTEFTUyA6IFZBTElEX0NMQVNTKSArIHZhbGlkYXRpb25FcnJvcktleSkuCisgICAg
ICBhZGRDbGFzcygoaXNWYWxpZCA/IFZBTElEX0NMQVNTIDogSU5WQUxJRF9DTEFTUykgKyB2YWxp
ZGF0aW9uRXJyb3JLZXkpOworICB9CisKKyAgLyoqCisgICAqIEBuZ2RvYyBmdW5jdGlvbgorICAg
KiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkc2V0VmFsaWRp
dHkKKyAgICogQG1ldGhvZE9mIG5nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVy
CisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBDaGFuZ2UgdGhlIHZhbGlkaXR5IHN0YXRl
LCBhbmQgbm90aWZpZXMgdGhlIGZvcm0gd2hlbiB0aGUgY29udHJvbCBjaGFuZ2VzIHZhbGlkaXR5
LiAoaS5lLiBpdAorICAgKiBkb2VzIG5vdCBub3RpZnkgZm9ybSBpZiBnaXZlbiB2YWxpZGF0b3Ig
aXMgYWxyZWFkeSBtYXJrZWQgYXMgaW52YWxpZCkuCisgICAqCisgICAqIFRoaXMgbWV0aG9kIHNo
b3VsZCBiZSBjYWxsZWQgYnkgdmFsaWRhdG9ycyAtIGkuZS4gdGhlIHBhcnNlciBvciBmb3JtYXR0
ZXIgZnVuY3Rpb25zLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsaWRhdGlvbkVycm9y
S2V5IE5hbWUgb2YgdGhlIHZhbGlkYXRvci4gdGhlIGB2YWxpZGF0aW9uRXJyb3JLZXlgIHdpbGwg
YXNzaWduCisgICAqICAgICAgICB0byBgJGVycm9yW3ZhbGlkYXRpb25FcnJvcktleV09aXNWYWxp
ZGAgc28gdGhhdCBpdCBpcyBhdmFpbGFibGUgZm9yIGRhdGEtYmluZGluZy4KKyAgICogICAgICAg
IFRoZSBgdmFsaWRhdGlvbkVycm9yS2V5YCBzaG91bGQgYmUgaW4gY2FtZWxDYXNlIGFuZCB3aWxs
IGdldCBjb252ZXJ0ZWQgaW50byBkYXNoLWNhc2UKKyAgICogICAgICAgIGZvciBjbGFzcyBuYW1l
LiBFeGFtcGxlOiBgbXlFcnJvcmAgd2lsbCByZXN1bHQgaW4gYG5nLXZhbGlkLW15LWVycm9yYCBh
bmQgYG5nLWludmFsaWQtbXktZXJyb3JgCisgICAqICAgICAgICBjbGFzcyBhbmQgY2FuIGJlIGJv
dW5kIHRvIGFzICBge3tzb21lRm9ybS5zb21lQ29udHJvbC4kZXJyb3IubXlFcnJvcn19YCAuCisg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNWYWxpZCBXaGV0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGlz
IHZhbGlkICh0cnVlKSBvciBpbnZhbGlkIChmYWxzZSkuCisgICAqLworICB0aGlzLiRzZXRWYWxp
ZGl0eSA9IGZ1bmN0aW9uKHZhbGlkYXRpb25FcnJvcktleSwgaXNWYWxpZCkgeworICAgIGlmICgk
ZXJyb3JbdmFsaWRhdGlvbkVycm9yS2V5XSA9PT0gIWlzVmFsaWQpIHJldHVybjsKKworICAgIGlm
IChpc1ZhbGlkKSB7CisgICAgICBpZiAoJGVycm9yW3ZhbGlkYXRpb25FcnJvcktleV0pIGludmFs
aWRDb3VudC0tOworICAgICAgaWYgKCFpbnZhbGlkQ291bnQpIHsKKyAgICAgICAgdG9nZ2xlVmFs
aWRDc3ModHJ1ZSk7CisgICAgICAgIHRoaXMuJHZhbGlkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy4k
aW52YWxpZCA9IGZhbHNlOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB0b2dnbGVWYWxp
ZENzcyhmYWxzZSk7CisgICAgICB0aGlzLiRpbnZhbGlkID0gdHJ1ZTsKKyAgICAgIHRoaXMuJHZh
bGlkID0gZmFsc2U7CisgICAgICBpbnZhbGlkQ291bnQrKzsKKyAgICB9CisKKyAgICAkZXJyb3Jb
dmFsaWRhdGlvbkVycm9yS2V5XSA9ICFpc1ZhbGlkOworICAgIHRvZ2dsZVZhbGlkQ3NzKGlzVmFs
aWQsIHZhbGlkYXRpb25FcnJvcktleSk7CisKKyAgICBwYXJlbnRGb3JtLiRzZXRWYWxpZGl0eSh2
YWxpZGF0aW9uRXJyb3JLZXksIGlzVmFsaWQsIHRoaXMpOworICB9OworCisKKyAgLyoqCisgICAq
IEBuZ2RvYyBmdW5jdGlvbgorICAgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVs
Q29udHJvbGxlciMkc2V0Vmlld1ZhbHVlCisgICAqIEBtZXRob2RPZiBuZy5kaXJlY3RpdmU6bmdN
b2RlbC5OZ01vZGVsQ29udHJvbGxlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogUmVh
ZCBhIHZhbHVlIGZyb20gdmlldy4KKyAgICoKKyAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNh
bGxlZCBmcm9tIHdpdGhpbiBhIERPTSBldmVudCBoYW5kbGVyLgorICAgKiBGb3IgZXhhbXBsZSB7
QGxpbmsgbmcuZGlyZWN0aXZlOmlucHV0IGlucHV0fSBvcgorICAgKiB7QGxpbmsgbmcuZGlyZWN0
aXZlOnNlbGVjdCBzZWxlY3R9IGRpcmVjdGl2ZXMgY2FsbCBpdC4KKyAgICoKKyAgICogSXQgaW50
ZXJuYWxseSBjYWxscyBhbGwgYHBhcnNlcnNgIGFuZCBpZiByZXN1bHRlZCB2YWx1ZSBpcyB2YWxp
ZCwgdXBkYXRlcyB0aGUgbW9kZWwgYW5kCisgICAqIGNhbGxzIGFsbCByZWdpc3RlcmVkIGNoYW5n
ZSBsaXN0ZW5lcnMuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSBmcm9t
IHRoZSB2aWV3LgorICAgKi8KKyAgdGhpcy4kc2V0Vmlld1ZhbHVlID0gZnVuY3Rpb24odmFsdWUp
IHsKKyAgICB0aGlzLiR2aWV3VmFsdWUgPSB2YWx1ZTsKKworICAgIC8vIGNoYW5nZSB0byBkaXJ0
eQorICAgIGlmICh0aGlzLiRwcmlzdGluZSkgeworICAgICAgdGhpcy4kZGlydHkgPSB0cnVlOwor
ICAgICAgdGhpcy4kcHJpc3RpbmUgPSBmYWxzZTsKKyAgICAgICRlbGVtZW50LnJlbW92ZUNsYXNz
KFBSSVNUSU5FX0NMQVNTKS5hZGRDbGFzcyhESVJUWV9DTEFTUyk7CisgICAgICBwYXJlbnRGb3Jt
LiRzZXREaXJ0eSgpOworICAgIH0KKworICAgIGZvckVhY2godGhpcy4kcGFyc2VycywgZnVuY3Rp
b24oZm4pIHsKKyAgICAgIHZhbHVlID0gZm4odmFsdWUpOworICAgIH0pOworCisgICAgaWYgKHRo
aXMuJG1vZGVsVmFsdWUgIT09IHZhbHVlKSB7CisgICAgICB0aGlzLiRtb2RlbFZhbHVlID0gdmFs
dWU7CisgICAgICBuZ01vZGVsU2V0KCRzY29wZSwgdmFsdWUpOworICAgICAgZm9yRWFjaCh0aGlz
LiR2aWV3Q2hhbmdlTGlzdGVuZXJzLCBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgICAgICB0cnkg
eworICAgICAgICAgIGxpc3RlbmVyKCk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAg
ICRleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAgICB9CisgICAgICB9KQorICAgIH0KKyAgfTsK
KworICAvLyBtb2RlbCAtPiB2YWx1ZQorICB2YXIgY3RybCA9IHRoaXM7CisKKyAgJHNjb3BlLiR3
YXRjaChmdW5jdGlvbiBuZ01vZGVsV2F0Y2goKSB7CisgICAgdmFyIHZhbHVlID0gbmdNb2RlbEdl
dCgkc2NvcGUpOworCisgICAgLy8gaWYgc2NvcGUgbW9kZWwgdmFsdWUgYW5kIG5nTW9kZWwgdmFs
dWUgYXJlIG91dCBvZiBzeW5jCisgICAgaWYgKGN0cmwuJG1vZGVsVmFsdWUgIT09IHZhbHVlKSB7
CisKKyAgICAgIHZhciBmb3JtYXR0ZXJzID0gY3RybC4kZm9ybWF0dGVycywKKyAgICAgICAgICBp
ZHggPSBmb3JtYXR0ZXJzLmxlbmd0aDsKKworICAgICAgY3RybC4kbW9kZWxWYWx1ZSA9IHZhbHVl
OworICAgICAgd2hpbGUoaWR4LS0pIHsKKyAgICAgICAgdmFsdWUgPSBmb3JtYXR0ZXJzW2lkeF0o
dmFsdWUpOworICAgICAgfQorCisgICAgICBpZiAoY3RybC4kdmlld1ZhbHVlICE9PSB2YWx1ZSkg
eworICAgICAgICBjdHJsLiR2aWV3VmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgY3RybC4kcmVuZGVy
KCk7CisgICAgICB9CisgICAgfQorICB9KTsKK31dOworCisKKy8qKgorICogQG5nZG9jIGRpcmVj
dGl2ZQorICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nTW9kZWwKKyAqCisgKiBAZWxlbWVudCBpbnB1
dAorICoKKyAqIEBkZXNjcmlwdGlvbgorICogSXMgZGlyZWN0aXZlIHRoYXQgdGVsbHMgQW5ndWxh
ciB0byBkbyB0d28td2F5IGRhdGEgYmluZGluZy4gSXQgd29ya3MgdG9nZXRoZXIgd2l0aCBgaW5w
dXRgLAorICogYHNlbGVjdGAsIGB0ZXh0YXJlYWAuIFlvdSBjYW4gZWFzaWx5IHdyaXRlIHlvdXIg
b3duIGRpcmVjdGl2ZXMgdG8gdXNlIGBuZ01vZGVsYCBhcyB3ZWxsLgorICoKKyAqIGBuZ01vZGVs
YCBpcyByZXNwb25zaWJsZSBmb3I6CisgKgorICogLSBiaW5kaW5nIHRoZSB2aWV3IGludG8gdGhl
IG1vZGVsLCB3aGljaCBvdGhlciBkaXJlY3RpdmVzIHN1Y2ggYXMgYGlucHV0YCwgYHRleHRhcmVh
YCBvciBgc2VsZWN0YAorICogICByZXF1aXJlLAorICogLSBwcm92aWRpbmcgdmFsaWRhdGlvbiBi
ZWhhdmlvciAoaS5lLiByZXF1aXJlZCwgbnVtYmVyLCBlbWFpbCwgdXJsKSwKKyAqIC0ga2VlcGlu
ZyBzdGF0ZSBvZiB0aGUgY29udHJvbCAodmFsaWQvaW52YWxpZCwgZGlydHkvcHJpc3RpbmUsIHZh
bGlkYXRpb24gZXJyb3JzKSwKKyAqIC0gc2V0dGluZyByZWxhdGVkIGNzcyBjbGFzcyBvbnRvIHRo
ZSBlbGVtZW50IChgbmctdmFsaWRgLCBgbmctaW52YWxpZGAsIGBuZy1kaXJ0eWAsIGBuZy1wcmlz
dGluZWApLAorICogLSByZWdpc3RlciB0aGUgY29udHJvbCB3aXRoIHBhcmVudCB7QGxpbmsgbmcu
ZGlyZWN0aXZlOmZvcm0gZm9ybX0uCisgKgorICogRm9yIGJhc2ljIGV4YW1wbGVzLCBob3cgdG8g
dXNlIGBuZ01vZGVsYCwgc2VlOgorICoKKyAqICAtIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQg
aW5wdXR9CisgKiAgICAtIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQudGV4dCB0ZXh0fQorICog
ICAgLSB7QGxpbmsgbmcuZGlyZWN0aXZlOmlucHV0LmNoZWNrYm94IGNoZWNrYm94fQorICogICAg
LSB7QGxpbmsgbmcuZGlyZWN0aXZlOmlucHV0LnJhZGlvIHJhZGlvfQorICogICAgLSB7QGxpbmsg
bmcuZGlyZWN0aXZlOmlucHV0Lm51bWJlciBudW1iZXJ9CisgKiAgICAtIHtAbGluayBuZy5kaXJl
Y3RpdmU6aW5wdXQuZW1haWwgZW1haWx9CisgKiAgICAtIHtAbGluayBuZy5kaXJlY3RpdmU6aW5w
dXQudXJsIHVybH0KKyAqICAtIHtAbGluayBuZy5kaXJlY3RpdmU6c2VsZWN0IHNlbGVjdH0KKyAq
ICAtIHtAbGluayBuZy5kaXJlY3RpdmU6dGV4dGFyZWEgdGV4dGFyZWF9CisgKgorICovCit2YXIg
bmdNb2RlbERpcmVjdGl2ZSA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4geworICAgIHJlcXVpcmU6
IFsnbmdNb2RlbCcsICdeP2Zvcm0nXSwKKyAgICBjb250cm9sbGVyOiBOZ01vZGVsQ29udHJvbGxl
ciwKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybHMpIHsKKyAg
ICAgIC8vIG5vdGlmeSBvdGhlcnMsIGVzcGVjaWFsbHkgcGFyZW50IGZvcm1zCisKKyAgICAgIHZh
ciBtb2RlbEN0cmwgPSBjdHJsc1swXSwKKyAgICAgICAgICBmb3JtQ3RybCA9IGN0cmxzWzFdIHx8
IG51bGxGb3JtQ3RybDsKKworICAgICAgZm9ybUN0cmwuJGFkZENvbnRyb2wobW9kZWxDdHJsKTsK
KworICAgICAgZWxlbWVudC5iaW5kKCckZGVzdHJveScsIGZ1bmN0aW9uKCkgeworICAgICAgICBm
b3JtQ3RybC4kcmVtb3ZlQ29udHJvbChtb2RlbEN0cmwpOworICAgICAgfSk7CisgICAgfQorICB9
OworfTsKKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRpcmVjdGl2
ZTpuZ0NoYW5nZQorICogQHJlc3RyaWN0IEUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEV2YWx1
YXRlIGdpdmVuIGV4cHJlc3Npb24gd2hlbiB1c2VyIGNoYW5nZXMgdGhlIGlucHV0LgorICogVGhl
IGV4cHJlc3Npb24gaXMgbm90IGV2YWx1YXRlZCB3aGVuIHRoZSB2YWx1ZSBjaGFuZ2UgaXMgY29t
aW5nIGZyb20gdGhlIG1vZGVsLgorICoKKyAqIE5vdGUsIHRoaXMgZGlyZWN0aXZlIHJlcXVpcmVz
IGBuZ01vZGVsYCB0byBiZSBwcmVzZW50LgorICoKKyAqIEBlbGVtZW50IGlucHV0CisgKgorICog
QGV4YW1wbGUKKyAqIDxkb2M6ZXhhbXBsZT4KKyAqICAgPGRvYzpzb3VyY2U+CisgKiAgICAgPHNj
cmlwdD4KKyAqICAgICAgIGZ1bmN0aW9uIENvbnRyb2xsZXIoJHNjb3BlKSB7CisgKiAgICAgICAg
ICRzY29wZS5jb3VudGVyID0gMDsKKyAqICAgICAgICAgJHNjb3BlLmNoYW5nZSA9IGZ1bmN0aW9u
KCkgeworICogICAgICAgICAgICRzY29wZS5jb3VudGVyKys7CisgKiAgICAgICAgIH07CisgKiAg
ICAgICB9CisgKiAgICAgPC9zY3JpcHQ+CisgKiAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJDb250
cm9sbGVyIj4KKyAqICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImNvbmZp
cm1lZCIgbmctY2hhbmdlPSJjaGFuZ2UoKSIgaWQ9Im5nLWNoYW5nZS1leGFtcGxlMSIgLz4KKyAq
ICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImNvbmZpcm1lZCIgaWQ9Im5n
LWNoYW5nZS1leGFtcGxlMiIgLz4KKyAqICAgICAgIDxsYWJlbCBmb3I9Im5nLWNoYW5nZS1leGFt
cGxlMiI+Q29uZmlybWVkPC9sYWJlbD48YnIgLz4KKyAqICAgICAgIGRlYnVnID0ge3tjb25maXJt
ZWR9fTxiciAvPgorICogICAgICAgY291bnRlciA9IHt7Y291bnRlcn19CisgKiAgICAgPC9kaXY+
CisgKiAgIDwvZG9jOnNvdXJjZT4KKyAqICAgPGRvYzpzY2VuYXJpbz4KKyAqICAgICBpdCgnc2hv
dWxkIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGlmIGNoYW5naW5nIGZyb20gdmlldycsIGZ1bmN0
aW9uKCkgeworICogICAgICAgZXhwZWN0KGJpbmRpbmcoJ2NvdW50ZXInKSkudG9FcXVhbCgnMCcp
OworICogICAgICAgZWxlbWVudCgnI25nLWNoYW5nZS1leGFtcGxlMScpLmNsaWNrKCk7CisgKiAg
ICAgICBleHBlY3QoYmluZGluZygnY291bnRlcicpKS50b0VxdWFsKCcxJyk7CisgKiAgICAgICBl
eHBlY3QoYmluZGluZygnY29uZmlybWVkJykpLnRvRXF1YWwoJ3RydWUnKTsKKyAqICAgICB9KTsK
KyAqCisgKiAgICAgaXQoJ3Nob3VsZCBub3QgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gaWYgY2hh
bmdpbmcgZnJvbSBtb2RlbCcsIGZ1bmN0aW9uKCkgeworICogICAgICAgZWxlbWVudCgnI25nLWNo
YW5nZS1leGFtcGxlMicpLmNsaWNrKCk7CisgKiAgICAgICBleHBlY3QoYmluZGluZygnY291bnRl
cicpKS50b0VxdWFsKCcwJyk7CisgKiAgICAgICBleHBlY3QoYmluZGluZygnY29uZmlybWVkJykp
LnRvRXF1YWwoJ3RydWUnKTsKKyAqICAgICB9KTsKKyAqICAgPC9kb2M6c2NlbmFyaW8+CisgKiA8
L2RvYzpleGFtcGxlPgorICovCit2YXIgbmdDaGFuZ2VEaXJlY3RpdmUgPSB2YWx1ZUZuKHsKKyAg
cmVxdWlyZTogJ25nTW9kZWwnLAorICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0
ciwgY3RybCkgeworICAgIGN0cmwuJHZpZXdDaGFuZ2VMaXN0ZW5lcnMucHVzaChmdW5jdGlvbigp
IHsKKyAgICAgIHNjb3BlLiRldmFsKGF0dHIubmdDaGFuZ2UpOworICAgIH0pOworICB9Cit9KTsK
KworCit2YXIgcmVxdWlyZWREaXJlY3RpdmUgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHsKKyAg
ICByZXF1aXJlOiAnP25nTW9kZWwnLAorICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbG0sIGF0
dHIsIGN0cmwpIHsKKyAgICAgIGlmICghY3RybCkgcmV0dXJuOworICAgICAgYXR0ci5yZXF1aXJl
ZCA9IHRydWU7IC8vIGZvcmNlIHRydXRoeSBpbiBjYXNlIHdlIGFyZSBvbiBub24gaW5wdXQgZWxl
bWVudAorCisgICAgICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAg
aWYgKGF0dHIucmVxdWlyZWQgJiYgKGlzRW1wdHkodmFsdWUpIHx8IHZhbHVlID09PSBmYWxzZSkp
IHsKKyAgICAgICAgICBjdHJsLiRzZXRWYWxpZGl0eSgncmVxdWlyZWQnLCBmYWxzZSk7CisgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGN0cmwuJHNldFZhbGlk
aXR5KCdyZXF1aXJlZCcsIHRydWUpOworICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAg
fQorICAgICAgfTsKKworICAgICAgY3RybC4kZm9ybWF0dGVycy5wdXNoKHZhbGlkYXRvcik7Cisg
ICAgICBjdHJsLiRwYXJzZXJzLnVuc2hpZnQodmFsaWRhdG9yKTsKKworICAgICAgYXR0ci4kb2Jz
ZXJ2ZSgncmVxdWlyZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFsaWRhdG9yKGN0cmwuJHZp
ZXdWYWx1ZSk7CisgICAgICB9KTsKKyAgICB9CisgIH07Cit9OworCisKKy8qKgorICogQG5nZG9j
IGRpcmVjdGl2ZQorICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nTGlzdAorICoKKyAqIEBkZXNjcmlw
dGlvbgorICogVGV4dCBpbnB1dCB0aGF0IGNvbnZlcnRzIGJldHdlZW4gY29tbWEtc2VwYXJhdGVk
IHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MuCisgKgorICogQGVsZW1lbnQgaW5wdXQK
KyAqIEBwYXJhbSB7c3RyaW5nPX0gbmdMaXN0IG9wdGlvbmFsIGRlbGltaXRlciB0aGF0IHNob3Vs
ZCBiZSB1c2VkIHRvIHNwbGl0IHRoZSB2YWx1ZS4gSWYKKyAqICAgc3BlY2lmaWVkIGluIGZvcm0g
YC9zb21ldGhpbmcvYCB0aGVuIHRoZSB2YWx1ZSB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGEgcmVn
dWxhciBleHByZXNzaW9uLgorICoKKyAqIEBleGFtcGxlCisgICAgPGRvYzpleGFtcGxlPgorICAg
ICAgPGRvYzpzb3VyY2U+CisgICAgICAgPHNjcmlwdD4KKyAgICAgICAgIGZ1bmN0aW9uIEN0cmwo
JHNjb3BlKSB7CisgICAgICAgICAgICRzY29wZS5uYW1lcyA9IFsnaWdvcicsICdtaXNrbycsICd2
b2p0YSddOworICAgICAgICAgfQorICAgICAgIDwvc2NyaXB0PgorICAgICAgIDxmb3JtIG5hbWU9
Im15Rm9ybSIgbmctY29udHJvbGxlcj0iQ3RybCI+CisgICAgICAgICBMaXN0OiA8aW5wdXQgbmFt
ZT0ibmFtZXNJbnB1dCIgbmctbW9kZWw9Im5hbWVzIiBuZy1saXN0IHJlcXVpcmVkPgorICAgICAg
ICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0ubGlzdC4kZXJyb3IucmVxdWly
ZWQiPgorICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+CisgICAgICAgICA8dHQ+bmFtZXMgPSB7
e25hbWVzfX08L3R0Pjxici8+CisgICAgICAgICA8dHQ+bXlGb3JtLm5hbWVzSW5wdXQuJHZhbGlk
ID0ge3tteUZvcm0ubmFtZXNJbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgIDx0dD5t
eUZvcm0ubmFtZXNJbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5uYW1lc0lucHV0LiRlcnJvcn19PC90
dD48YnIvPgorICAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwv
dHQ+PGJyLz4KKyAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9y
bS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgPC9mb3JtPgorICAgICAgPC9k
b2M6c291cmNlPgorICAgICAgPGRvYzpzY2VuYXJpbz4KKyAgICAgICAgaXQoJ3Nob3VsZCBpbml0
aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgZXhwZWN0KGJpbmRpbmco
J25hbWVzJykpLnRvRXF1YWwoJ1siaWdvciIsIm1pc2tvIiwidm9qdGEiXScpOworICAgICAgICAg
IGV4cGVjdChiaW5kaW5nKCdteUZvcm0ubmFtZXNJbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgndHJ1
ZScpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1w
dHknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBpbnB1dCgnbmFtZXMnKS5lbnRlcignJyk7Cisg
ICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ25hbWVzJykpLnRvRXF1YWwoJ1tdJyk7CisgICAgICAg
ICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5uYW1lc0lucHV0LiR2YWxpZCcpKS50b0VxdWFsKCdm
YWxzZScpOworICAgICAgICB9KTsKKyAgICAgIDwvZG9jOnNjZW5hcmlvPgorICAgIDwvZG9jOmV4
YW1wbGU+CisgKi8KK3ZhciBuZ0xpc3REaXJlY3RpdmUgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJu
IHsKKyAgICByZXF1aXJlOiAnbmdNb2RlbCcsCisgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVs
ZW1lbnQsIGF0dHIsIGN0cmwpIHsKKyAgICAgIHZhciBtYXRjaCA9IC9cLyguKilcLy8uZXhlYyhh
dHRyLm5nTGlzdCksCisgICAgICAgICAgc2VwYXJhdG9yID0gbWF0Y2ggJiYgbmV3IFJlZ0V4cCht
YXRjaFsxXSkgfHwgYXR0ci5uZ0xpc3QgfHwgJywnOworCisgICAgICB2YXIgcGFyc2UgPSBmdW5j
dGlvbih2aWV3VmFsdWUpIHsKKyAgICAgICAgdmFyIGxpc3QgPSBbXTsKKworICAgICAgICBpZiAo
dmlld1ZhbHVlKSB7CisgICAgICAgICAgZm9yRWFjaCh2aWV3VmFsdWUuc3BsaXQoc2VwYXJhdG9y
KSwgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgbGlzdC5wdXNoKHRy
aW0odmFsdWUpKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBs
aXN0OworICAgICAgfTsKKworICAgICAgY3RybC4kcGFyc2Vycy5wdXNoKHBhcnNlKTsKKyAgICAg
IGN0cmwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBpZiAoaXNB
cnJheSh2YWx1ZSkpIHsKKyAgICAgICAgICByZXR1cm4gdmFsdWUuam9pbignLCAnKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICB9KTsKKyAgICB9CisgIH07
Cit9OworCisKK3ZhciBDT05TVEFOVF9WQUxVRV9SRUdFWFAgPSAvXih0cnVlfGZhbHNlfFxkKykk
LzsKKwordmFyIG5nVmFsdWVEaXJlY3RpdmUgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHsKKyAg
ICBwcmlvcml0eTogMTAwLAorICAgIGNvbXBpbGU6IGZ1bmN0aW9uKHRwbCwgdHBsQXR0cikgewor
ICAgICAgaWYgKENPTlNUQU5UX1ZBTFVFX1JFR0VYUC50ZXN0KHRwbEF0dHIubmdWYWx1ZSkpIHsK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbG0sIGF0dHIpIHsKKyAgICAgICAgICBh
dHRyLiRzZXQoJ3ZhbHVlJywgc2NvcGUuJGV2YWwoYXR0ci5uZ1ZhbHVlKSk7CisgICAgICAgIH07
CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsbSwgYXR0
cikgeworICAgICAgICAgIHNjb3BlLiR3YXRjaChhdHRyLm5nVmFsdWUsIGZ1bmN0aW9uIHZhbHVl
V2F0Y2hBY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgIGF0dHIuJHNldCgndmFsdWUnLCB2YWx1
ZSwgZmFsc2UpOworICAgICAgICAgIH0pOworICAgICAgICB9OworICAgICAgfQorICAgIH0KKyAg
fTsKK307CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmcuZGlyZWN0aXZl
Om5nQmluZAorICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIGBuZ0JpbmRgIGF0dHJpYnV0ZSB0
ZWxscyBBbmd1bGFyIHRvIHJlcGxhY2UgdGhlIHRleHQgY29udGVudCBvZiB0aGUgc3BlY2lmaWVk
IEhUTUwgZWxlbWVudAorICogd2l0aCB0aGUgdmFsdWUgb2YgYSBnaXZlbiBleHByZXNzaW9uLCBh
bmQgdG8gdXBkYXRlIHRoZSB0ZXh0IGNvbnRlbnQgd2hlbiB0aGUgdmFsdWUgb2YgdGhhdAorICog
ZXhwcmVzc2lvbiBjaGFuZ2VzLgorICoKKyAqIFR5cGljYWxseSwgeW91IGRvbid0IHVzZSBgbmdC
aW5kYCBkaXJlY3RseSwgYnV0IGluc3RlYWQgeW91IHVzZSB0aGUgZG91YmxlIGN1cmx5IG1hcmt1
cCBsaWtlCisgKiBge3sgZXhwcmVzc2lvbiB9fWAgd2hpY2ggaXMgc2ltaWxhciBidXQgbGVzcyB2
ZXJib3NlLgorICoKKyAqIE9uZSBzY2VuYXJpbyBpbiB3aGljaCB0aGUgdXNlIG9mIGBuZ0JpbmRg
IGlzIHByZWZlcnJlZCBvdmVyIGB7eyBleHByZXNzaW9uIH19YCBiaW5kaW5nIGlzIHdoZW4KKyAq
IGl0J3MgZGVzaXJhYmxlIHRvIHB1dCBiaW5kaW5ncyBpbnRvIHRlbXBsYXRlIHRoYXQgaXMgbW9t
ZW50YXJpbHkgZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIGluIGl0cworICogcmF3IHN0YXRlIGJl
Zm9yZSBBbmd1bGFyIGNvbXBpbGVzIGl0LiBTaW5jZSBgbmdCaW5kYCBpcyBhbiBlbGVtZW50IGF0
dHJpYnV0ZSwgaXQgbWFrZXMgdGhlCisgKiBiaW5kaW5ncyBpbnZpc2libGUgdG8gdGhlIHVzZXIg
d2hpbGUgdGhlIHBhZ2UgaXMgbG9hZGluZy4KKyAqCisgKiBBbiBhbHRlcm5hdGl2ZSBzb2x1dGlv
biB0byB0aGlzIHByb2JsZW0gd291bGQgYmUgdXNpbmcgdGhlCisgKiB7QGxpbmsgbmcuZGlyZWN0
aXZlOm5nQ2xvYWsgbmdDbG9ha30gZGlyZWN0aXZlLgorICoKKyAqCisgKiBAZWxlbWVudCBBTlkK
KyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdCaW5kIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4
cHJlc3Npb259IHRvIGV2YWx1YXRlLgorICoKKyAqIEBleGFtcGxlCisgKiBFbnRlciBhIG5hbWUg
aW4gdGhlIExpdmUgUHJldmlldyB0ZXh0IGJveDsgdGhlIGdyZWV0aW5nIGJlbG93IHRoZSB0ZXh0
IGJveCBjaGFuZ2VzIGluc3RhbnRseS4KKyAgIDxkb2M6ZXhhbXBsZT4KKyAgICAgPGRvYzpzb3Vy
Y2U+CisgICAgICAgPHNjcmlwdD4KKyAgICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7Cisg
ICAgICAgICAgICRzY29wZS5uYW1lID0gJ1doaXJsZWQnOworICAgICAgICAgfQorICAgICAgIDwv
c2NyaXB0PgorICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iQ3RybCI+CisgICAgICAgICBFbnRl
ciBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9Im5hbWUiPjxicj4KKyAgICAgICAg
IEhlbGxvIDxzcGFuIG5nLWJpbmQ9Im5hbWUiPjwvc3Bhbj4hCisgICAgICAgPC9kaXY+CisgICAg
IDwvZG9jOnNvdXJjZT4KKyAgICAgPGRvYzpzY2VuYXJpbz4KKyAgICAgICBpdCgnc2hvdWxkIGNo
ZWNrIG5nLWJpbmQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVjdCh1c2luZygnLmRvYy1l
eGFtcGxlLWxpdmUnKS5iaW5kaW5nKCduYW1lJykpLnRvQmUoJ1doaXJsZWQnKTsKKyAgICAgICAg
IHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmlucHV0KCduYW1lJykuZW50ZXIoJ3dvcmxkJyk7
CisgICAgICAgICBleHBlY3QodXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJykuYmluZGluZygnbmFt
ZScpKS50b0JlKCd3b3JsZCcpOworICAgICAgIH0pOworICAgICA8L2RvYzpzY2VuYXJpbz4KKyAg
IDwvZG9jOmV4YW1wbGU+CisgKi8KK3ZhciBuZ0JpbmREaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZShm
dW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikgeworICBlbGVtZW50LmFkZENsYXNzKCduZy1i
aW5kaW5nJykuZGF0YSgnJGJpbmRpbmcnLCBhdHRyLm5nQmluZCk7CisgIHNjb3BlLiR3YXRjaChh
dHRyLm5nQmluZCwgZnVuY3Rpb24gbmdCaW5kV2F0Y2hBY3Rpb24odmFsdWUpIHsKKyAgICBlbGVt
ZW50LnRleHQodmFsdWUgPT0gdW5kZWZpbmVkID8gJycgOiB2YWx1ZSk7CisgIH0pOworfSk7CisK
KworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdCaW5k
VGVtcGxhdGUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgbmdCaW5kVGVtcGxhdGVgIGRp
cmVjdGl2ZSBzcGVjaWZpZXMgdGhhdCB0aGUgZWxlbWVudAorICogdGV4dCBzaG91bGQgYmUgcmVw
bGFjZWQgd2l0aCB0aGUgdGVtcGxhdGUgaW4gbmdCaW5kVGVtcGxhdGUuCisgKiBVbmxpa2UgbmdC
aW5kIHRoZSBuZ0JpbmRUZW1wbGF0ZSBjYW4gY29udGFpbiBtdWx0aXBsZSBge3tgIGB9fWAKKyAq
IGV4cHJlc3Npb25zLiAoVGhpcyBpcyByZXF1aXJlZCBzaW5jZSBzb21lIEhUTUwgZWxlbWVudHMK
KyAqIGNhbiBub3QgaGF2ZSBTUEFOIGVsZW1lbnRzIHN1Y2ggYXMgVElUTEUsIG9yIE9QVElPTiB0
byBuYW1lIGEgZmV3LikKKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7c3RyaW5nfSBu
Z0JpbmRUZW1wbGF0ZSB0ZW1wbGF0ZSBvZiBmb3JtCisgKiAgIDx0dD57ezwvdHQ+IDx0dD5leHBy
ZXNzaW9uPC90dD4gPHR0Pn19PC90dD4gdG8gZXZhbC4KKyAqCisgKiBAZXhhbXBsZQorICogVHJ5
IGl0IGhlcmU6IGVudGVyIHRleHQgaW4gdGV4dCBib3ggYW5kIHdhdGNoIHRoZSBncmVldGluZyBj
aGFuZ2UuCisgICA8ZG9jOmV4YW1wbGU+CisgICAgIDxkb2M6c291cmNlPgorICAgICAgIDxzY3Jp
cHQ+CisgICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgeworICAgICAgICAgICAkc2NvcGUu
c2FsdXRhdGlvbiA9ICdIZWxsbyc7CisgICAgICAgICAgICRzY29wZS5uYW1lID0gJ1dvcmxkJzsK
KyAgICAgICAgIH0KKyAgICAgICA8L3NjcmlwdD4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9
IkN0cmwiPgorICAgICAgICBTYWx1dGF0aW9uOiA8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9
InNhbHV0YXRpb24iPjxicj4KKyAgICAgICAgTmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5nLW1v
ZGVsPSJuYW1lIj48YnI+CisgICAgICAgIDxwcmUgbmctYmluZC10ZW1wbGF0ZT0ie3tzYWx1dGF0
aW9ufX0ge3tuYW1lfX0hIj48L3ByZT4KKyAgICAgICA8L2Rpdj4KKyAgICAgPC9kb2M6c291cmNl
PgorICAgICA8ZG9jOnNjZW5hcmlvPgorICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctYmluZCcs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhwZWN0KHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScp
LmJpbmRpbmcoJ3NhbHV0YXRpb24nKSkuCisgICAgICAgICAgIHRvQmUoJ0hlbGxvJyk7CisgICAg
ICAgICBleHBlY3QodXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJykuYmluZGluZygnbmFtZScpKS4K
KyAgICAgICAgICAgdG9CZSgnV29ybGQnKTsKKyAgICAgICAgIHVzaW5nKCcuZG9jLWV4YW1wbGUt
bGl2ZScpLmlucHV0KCdzYWx1dGF0aW9uJykuZW50ZXIoJ0dyZWV0aW5ncycpOworICAgICAgICAg
dXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJykuaW5wdXQoJ25hbWUnKS5lbnRlcigndXNlcicpOwor
ICAgICAgICAgZXhwZWN0KHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmJpbmRpbmcoJ3NhbHV0
YXRpb24nKSkuCisgICAgICAgICAgIHRvQmUoJ0dyZWV0aW5ncycpOworICAgICAgICAgZXhwZWN0
KHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmJpbmRpbmcoJ25hbWUnKSkuCisgICAgICAgICAg
IHRvQmUoJ3VzZXInKTsKKyAgICAgICB9KTsKKyAgICAgPC9kb2M6c2NlbmFyaW8+CisgICA8L2Rv
YzpleGFtcGxlPgorICovCit2YXIgbmdCaW5kVGVtcGxhdGVEaXJlY3RpdmUgPSBbJyRpbnRlcnBv
bGF0ZScsIGZ1bmN0aW9uKCRpbnRlcnBvbGF0ZSkgeworICByZXR1cm4gZnVuY3Rpb24oc2NvcGUs
IGVsZW1lbnQsIGF0dHIpIHsKKyAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgdG8gc2NlbmFyaW8gcnVu
bmVyCisgICAgdmFyIGludGVycG9sYXRlRm4gPSAkaW50ZXJwb2xhdGUoZWxlbWVudC5hdHRyKGF0
dHIuJGF0dHIubmdCaW5kVGVtcGxhdGUpKTsKKyAgICBlbGVtZW50LmFkZENsYXNzKCduZy1iaW5k
aW5nJykuZGF0YSgnJGJpbmRpbmcnLCBpbnRlcnBvbGF0ZUZuKTsKKyAgICBhdHRyLiRvYnNlcnZl
KCduZ0JpbmRUZW1wbGF0ZScsIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICBlbGVtZW50LnRleHQo
dmFsdWUpOworICAgIH0pOworICB9Cit9XTsKKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUK
KyAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ0JpbmRIdG1sVW5zYWZlCisgKgorICogQGRlc2NyaXB0
aW9uCisgKiBDcmVhdGVzIGEgYmluZGluZyB0aGF0IHdpbGwgaW5uZXJIVE1MIHRoZSByZXN1bHQg
b2YgZXZhbHVhdGluZyB0aGUgYGV4cHJlc3Npb25gIGludG8gdGhlIGN1cnJlbnQKKyAqIGVsZW1l
bnQuICpUaGUgaW5uZXJIVE1MLWVkIGNvbnRlbnQgd2lsbCBub3QgYmUgc2FuaXRpemVkISogWW91
IHNob3VsZCB1c2UgdGhpcyBkaXJlY3RpdmUgb25seSBpZgorICoge0BsaW5rIG5nU2FuaXRpemUu
ZGlyZWN0aXZlOm5nQmluZEh0bWwgbmdCaW5kSHRtbH0gZGlyZWN0aXZlIGlzIHRvbworICogcmVz
dHJpY3RpdmUgYW5kIHdoZW4geW91IGFic29sdXRlbHkgdHJ1c3QgdGhlIHNvdXJjZSBvZiB0aGUg
Y29udGVudCB5b3UgYXJlIGJpbmRpbmcgdG8uCisgKgorICogU2VlIHtAbGluayBuZ1Nhbml0aXpl
LiRzYW5pdGl6ZSAkc2FuaXRpemV9IGRvY3MgZm9yIGV4YW1wbGVzLgorICoKKyAqIEBlbGVtZW50
IEFOWQorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0JpbmRIdG1sVW5zYWZlIHtAbGluayBndWlk
ZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlLgorICovCit2YXIgbmdCaW5kSHRt
bFVuc2FmZURpcmVjdGl2ZSA9IFtmdW5jdGlvbigpIHsKKyAgcmV0dXJuIGZ1bmN0aW9uKHNjb3Bl
LCBlbGVtZW50LCBhdHRyKSB7CisgICAgZWxlbWVudC5hZGRDbGFzcygnbmctYmluZGluZycpLmRh
dGEoJyRiaW5kaW5nJywgYXR0ci5uZ0JpbmRIdG1sVW5zYWZlKTsKKyAgICBzY29wZS4kd2F0Y2go
YXR0ci5uZ0JpbmRIdG1sVW5zYWZlLCBmdW5jdGlvbiBuZ0JpbmRIdG1sVW5zYWZlV2F0Y2hBY3Rp
b24odmFsdWUpIHsKKyAgICAgIGVsZW1lbnQuaHRtbCh2YWx1ZSB8fCAnJyk7CisgICAgfSk7Cisg
IH07Cit9XTsKKworZnVuY3Rpb24gY2xhc3NEaXJlY3RpdmUobmFtZSwgc2VsZWN0b3IpIHsKKyAg
bmFtZSA9ICduZ0NsYXNzJyArIG5hbWU7CisgIHJldHVybiBuZ0RpcmVjdGl2ZShmdW5jdGlvbihz
Y29wZSwgZWxlbWVudCwgYXR0cikgeworICAgIHZhciBvbGRWYWwgPSB1bmRlZmluZWQ7CisKKyAg
ICBzY29wZS4kd2F0Y2goYXR0cltuYW1lXSwgbmdDbGFzc1dhdGNoQWN0aW9uLCB0cnVlKTsKKwor
ICAgIGF0dHIuJG9ic2VydmUoJ2NsYXNzJywgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHZhciBu
Z0NsYXNzID0gc2NvcGUuJGV2YWwoYXR0cltuYW1lXSk7CisgICAgICBuZ0NsYXNzV2F0Y2hBY3Rp
b24obmdDbGFzcywgbmdDbGFzcyk7CisgICAgfSk7CisKKworICAgIGlmIChuYW1lICE9PSAnbmdD
bGFzcycpIHsKKyAgICAgIHNjb3BlLiR3YXRjaCgnJGluZGV4JywgZnVuY3Rpb24oJGluZGV4LCBv
bGQkaW5kZXgpIHsKKyAgICAgICAgdmFyIG1vZCA9ICRpbmRleCAmIDE7CisgICAgICAgIGlmICht
b2QgIT09IG9sZCRpbmRleCAmIDEpIHsKKyAgICAgICAgICBpZiAobW9kID09PSBzZWxlY3Rvcikg
eworICAgICAgICAgICAgYWRkQ2xhc3Moc2NvcGUuJGV2YWwoYXR0cltuYW1lXSkpOworICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZW1vdmVDbGFzcyhzY29wZS4kZXZhbChhdHRyW25h
bWVdKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKworICAg
IGZ1bmN0aW9uIG5nQ2xhc3NXYXRjaEFjdGlvbihuZXdWYWwpIHsKKyAgICAgIGlmIChzZWxlY3Rv
ciA9PT0gdHJ1ZSB8fCBzY29wZS4kaW5kZXggJSAyID09PSBzZWxlY3RvcikgeworICAgICAgICBp
ZiAob2xkVmFsICYmICFlcXVhbHMobmV3VmFsLG9sZFZhbCkpIHsKKyAgICAgICAgICByZW1vdmVD
bGFzcyhvbGRWYWwpOworICAgICAgICB9CisgICAgICAgIGFkZENsYXNzKG5ld1ZhbCk7CisgICAg
ICB9CisgICAgICBvbGRWYWwgPSBjb3B5KG5ld1ZhbCk7CisgICAgfQorCisKKyAgICBmdW5jdGlv
biByZW1vdmVDbGFzcyhjbGFzc1ZhbCkgeworICAgICAgaWYgKGlzT2JqZWN0KGNsYXNzVmFsKSAm
JiAhaXNBcnJheShjbGFzc1ZhbCkpIHsKKyAgICAgICAgY2xhc3NWYWwgPSBtYXAoY2xhc3NWYWws
IGZ1bmN0aW9uKHYsIGspIHsgaWYgKHYpIHJldHVybiBrIH0pOworICAgICAgfQorICAgICAgZWxl
bWVudC5yZW1vdmVDbGFzcyhpc0FycmF5KGNsYXNzVmFsKSA/IGNsYXNzVmFsLmpvaW4oJyAnKSA6
IGNsYXNzVmFsKTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIGFkZENsYXNzKGNsYXNzVmFsKSB7
CisgICAgICBpZiAoaXNPYmplY3QoY2xhc3NWYWwpICYmICFpc0FycmF5KGNsYXNzVmFsKSkgewor
ICAgICAgICBjbGFzc1ZhbCA9IG1hcChjbGFzc1ZhbCwgZnVuY3Rpb24odiwgaykgeyBpZiAodikg
cmV0dXJuIGsgfSk7CisgICAgICB9CisgICAgICBpZiAoY2xhc3NWYWwpIHsKKyAgICAgICAgZWxl
bWVudC5hZGRDbGFzcyhpc0FycmF5KGNsYXNzVmFsKSA/IGNsYXNzVmFsLmpvaW4oJyAnKSA6IGNs
YXNzVmFsKTsKKyAgICAgIH0KKyAgICB9CisgIH0pOworfQorCisvKioKKyAqIEBuZ2RvYyBkaXJl
Y3RpdmUKKyAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ0NsYXNzCisgKgorICogQGRlc2NyaXB0aW9u
CisgKiBUaGUgYG5nQ2xhc3NgIGFsbG93cyB5b3UgdG8gc2V0IENTUyBjbGFzcyBvbiBIVE1MIGVs
ZW1lbnQgZHluYW1pY2FsbHkgYnkgZGF0YWJpbmRpbmcgYW4KKyAqIGV4cHJlc3Npb24gdGhhdCBy
ZXByZXNlbnRzIGFsbCBjbGFzc2VzIHRvIGJlIGFkZGVkLgorICoKKyAqIFRoZSBkaXJlY3RpdmUg
d29uJ3QgYWRkIGR1cGxpY2F0ZSBjbGFzc2VzIGlmIGEgcGFydGljdWxhciBjbGFzcyB3YXMgYWxy
ZWFkeSBzZXQuCisgKgorICogV2hlbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2VzLCB0aGUgcHJldmlv
dXNseSBhZGRlZCBjbGFzc2VzIGFyZSByZW1vdmVkIGFuZCBvbmx5IHRoZW4gdGhlCisgKiBuZXcg
Y2xhc3NlcyBhcmUgYWRkZWQuCisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAcGFyYW0ge2V4cHJl
c3Npb259IG5nQ2xhc3Mge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZh
bC4gVGhlIHJlc3VsdAorICogICBvZiB0aGUgZXZhbHVhdGlvbiBjYW4gYmUgYSBzdHJpbmcgcmVw
cmVzZW50aW5nIHNwYWNlIGRlbGltaXRlZCBjbGFzcworICogICBuYW1lcywgYW4gYXJyYXksIG9y
IGEgbWFwIG9mIGNsYXNzIG5hbWVzIHRvIGJvb2xlYW4gdmFsdWVzLgorICoKKyAqIEBleGFtcGxl
CisgICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8aW5w
dXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ic2V0IiBuZy1jbGljaz0ibXlWYXI9J215LWNsYXNzJyI+
CisgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iY2xlYXIiIG5nLWNsaWNrPSJteVZh
cj0nJyI+CisgICAgICA8YnI+CisgICAgICA8c3BhbiBuZy1jbGFzcz0ibXlWYXIiPlNhbXBsZSBU
ZXh0PC9zcGFuPgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InN0eWxlLmNzcyI+Cisg
ICAgICAgLm15LWNsYXNzIHsKKyAgICAgICAgIGNvbG9yOiByZWQ7CisgICAgICAgfQorICAgICA8
L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InNjZW5hcmlvLmpzIj4KKyAgICAgICBpdCgnc2hvdWxk
IGNoZWNrIG5nLWNsYXNzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3QoZWxlbWVudCgn
LmRvYy1leGFtcGxlLWxpdmUgc3BhbicpLnByb3AoJ2NsYXNzTmFtZScpKS5ub3QoKS4KKyAgICAg
ICAgICAgdG9NYXRjaCgvbXktY2xhc3MvKTsKKworICAgICAgICAgdXNpbmcoJy5kb2MtZXhhbXBs
ZS1saXZlJykuZWxlbWVudCgnOmJ1dHRvbjpmaXJzdCcpLmNsaWNrKCk7CisKKyAgICAgICAgIGV4
cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBzcGFuJykucHJvcCgnY2xhc3NOYW1lJykp
LgorICAgICAgICAgICB0b01hdGNoKC9teS1jbGFzcy8pOworCisgICAgICAgICB1c2luZygnLmRv
Yy1leGFtcGxlLWxpdmUnKS5lbGVtZW50KCc6YnV0dG9uOmxhc3QnKS5jbGljaygpOworCisgICAg
ICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgc3BhbicpLnByb3AoJ2NsYXNz
TmFtZScpKS5ub3QoKS4KKyAgICAgICAgICAgdG9NYXRjaCgvbXktY2xhc3MvKTsKKyAgICAgICB9
KTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCit2YXIgbmdDbGFzc0RpcmVjdGl2
ZSA9IGNsYXNzRGlyZWN0aXZlKCcnLCB0cnVlKTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZl
CisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdDbGFzc09kZAorICoKKyAqIEBkZXNjcmlwdGlvbgor
ICogVGhlIGBuZ0NsYXNzT2RkYCBhbmQgYG5nQ2xhc3NFdmVuYCBkaXJlY3RpdmVzIHdvcmsgZXhh
Y3RseSBhcworICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsYXNzIG5nQ2xhc3N9LCBleGNlcHQg
aXQgd29ya3MgaW4KKyAqIGNvbmp1bmN0aW9uIHdpdGggYG5nUmVwZWF0YCBhbmQgdGFrZXMgYWZm
ZWN0IG9ubHkgb24gb2RkIChldmVuKSByb3dzLgorICoKKyAqIFRoaXMgZGlyZWN0aXZlIGNhbiBi
ZSBhcHBsaWVkIG9ubHkgd2l0aGluIGEgc2NvcGUgb2YgYW4KKyAqIHtAbGluayBuZy5kaXJlY3Rp
dmU6bmdSZXBlYXQgbmdSZXBlYXR9LgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHBhcmFtIHtl
eHByZXNzaW9ufSBuZ0NsYXNzT2RkIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259
IHRvIGV2YWwuIFRoZSByZXN1bHQKKyAqICAgb2YgdGhlIGV2YWx1YXRpb24gY2FuIGJlIGEgc3Ry
aW5nIHJlcHJlc2VudGluZyBzcGFjZSBkZWxpbWl0ZWQgY2xhc3MgbmFtZXMgb3IgYW4gYXJyYXku
CisgKgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5o
dG1sIj4KKyAgICAgICAgPG9sIG5nLWluaXQ9Im5hbWVzPVsnSm9obicsICdNYXJ5JywgJ0NhdGUn
LCAnU3V6J10iPgorICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9Im5hbWUgaW4gbmFtZXMiPgorICAg
ICAgICAgICA8c3BhbiBuZy1jbGFzcy1vZGQ9IidvZGQnIiBuZy1jbGFzcy1ldmVuPSInZXZlbici
PgorICAgICAgICAgICAgIHt7bmFtZX19CisgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICA8
L2xpPgorICAgICAgICA8L29sPgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InN0eWxl
LmNzcyI+CisgICAgICAgLm9kZCB7CisgICAgICAgICBjb2xvcjogcmVkOworICAgICAgIH0KKyAg
ICAgICAuZXZlbiB7CisgICAgICAgICBjb2xvcjogYmx1ZTsKKyAgICAgICB9CisgICAgIDwvZmls
ZT4KKyAgICAgPGZpbGUgbmFtZT0ic2NlbmFyaW8uanMiPgorICAgICAgIGl0KCdzaG91bGQgY2hl
Y2sgbmctY2xhc3Mtb2RkIGFuZCBuZy1jbGFzcy1ldmVuJywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbGk6Zmlyc3Qgc3BhbicpLnByb3Ao
J2NsYXNzTmFtZScpKS4KKyAgICAgICAgICAgdG9NYXRjaCgvb2RkLyk7CisgICAgICAgICBleHBl
Y3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbGk6bGFzdCBzcGFuJykucHJvcCgnY2xhc3NO
YW1lJykpLgorICAgICAgICAgICB0b01hdGNoKC9ldmVuLyk7CisgICAgICAgfSk7CisgICAgIDwv
ZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLwordmFyIG5nQ2xhc3NPZGREaXJlY3RpdmUgPSBjbGFz
c0RpcmVjdGl2ZSgnT2RkJywgMCk7CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5h
bWUgbmcuZGlyZWN0aXZlOm5nQ2xhc3NFdmVuCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUg
YG5nQ2xhc3NPZGRgIGFuZCBgbmdDbGFzc0V2ZW5gIGRpcmVjdGl2ZXMgd29yayBleGFjdGx5IGFz
CisgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xhc3MgbmdDbGFzc30sIGV4Y2VwdCBpdCB3b3Jr
cyBpbgorICogY29uanVuY3Rpb24gd2l0aCBgbmdSZXBlYXRgIGFuZCB0YWtlcyBhZmZlY3Qgb25s
eSBvbiBvZGQgKGV2ZW4pIHJvd3MuCisgKgorICogVGhpcyBkaXJlY3RpdmUgY2FuIGJlIGFwcGxp
ZWQgb25seSB3aXRoaW4gYSBzY29wZSBvZiBhbgorICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1Jl
cGVhdCBuZ1JlcGVhdH0uCisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAcGFyYW0ge2V4cHJlc3Np
b259IG5nQ2xhc3NFdmVuIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2
YWwuIFRoZQorICogICByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb24gY2FuIGJlIGEgc3RyaW5nIHJl
cHJlc2VudGluZyBzcGFjZSBkZWxpbWl0ZWQgY2xhc3MgbmFtZXMgb3IgYW4gYXJyYXkuCisgKgor
ICogQGV4YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4K
KyAgICAgICAgPG9sIG5nLWluaXQ9Im5hbWVzPVsnSm9obicsICdNYXJ5JywgJ0NhdGUnLCAnU3V6
J10iPgorICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9Im5hbWUgaW4gbmFtZXMiPgorICAgICAgICAg
ICA8c3BhbiBuZy1jbGFzcy1vZGQ9IidvZGQnIiBuZy1jbGFzcy1ldmVuPSInZXZlbiciPgorICAg
ICAgICAgICAgIHt7bmFtZX19ICZuYnNwOyAmbmJzcDsgJm5ic3A7CisgICAgICAgICAgIDwvc3Bh
bj4KKyAgICAgICAgICA8L2xpPgorICAgICAgICA8L29sPgorICAgICA8L2ZpbGU+CisgICAgIDxm
aWxlIG5hbWU9InN0eWxlLmNzcyI+CisgICAgICAgLm9kZCB7CisgICAgICAgICBjb2xvcjogcmVk
OworICAgICAgIH0KKyAgICAgICAuZXZlbiB7CisgICAgICAgICBjb2xvcjogYmx1ZTsKKyAgICAg
ICB9CisgICAgIDwvZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0ic2NlbmFyaW8uanMiPgorICAgICAg
IGl0KCdzaG91bGQgY2hlY2sgbmctY2xhc3Mtb2RkIGFuZCBuZy1jbGFzcy1ldmVuJywgZnVuY3Rp
b24oKSB7CisgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbGk6Zmly
c3Qgc3BhbicpLnByb3AoJ2NsYXNzTmFtZScpKS4KKyAgICAgICAgICAgdG9NYXRjaCgvb2RkLyk7
CisgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbGk6bGFzdCBzcGFu
JykucHJvcCgnY2xhc3NOYW1lJykpLgorICAgICAgICAgICB0b01hdGNoKC9ldmVuLyk7CisgICAg
ICAgfSk7CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLwordmFyIG5nQ2xhc3NFdmVu
RGlyZWN0aXZlID0gY2xhc3NEaXJlY3RpdmUoJ0V2ZW4nLCAxKTsKKworLyoqCisgKiBAbmdkb2Mg
ZGlyZWN0aXZlCisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdDbG9haworICoKKyAqIEBkZXNjcmlw
dGlvbgorICogVGhlIGBuZ0Nsb2FrYCBkaXJlY3RpdmUgaXMgdXNlZCB0byBwcmV2ZW50IHRoZSBB
bmd1bGFyIGh0bWwgdGVtcGxhdGUgZnJvbSBiZWluZyBicmllZmx5CisgKiBkaXNwbGF5ZWQgYnkg
dGhlIGJyb3dzZXIgaW4gaXRzIHJhdyAodW5jb21waWxlZCkgZm9ybSB3aGlsZSB5b3VyIGFwcGxp
Y2F0aW9uIGlzIGxvYWRpbmcuIFVzZSB0aGlzCisgKiBkaXJlY3RpdmUgdG8gYXZvaWQgdGhlIHVu
ZGVzaXJhYmxlIGZsaWNrZXIgZWZmZWN0IGNhdXNlZCBieSB0aGUgaHRtbCB0ZW1wbGF0ZSBkaXNw
bGF5LgorICoKKyAqIFRoZSBkaXJlY3RpdmUgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIGA8Ym9keT5g
IGVsZW1lbnQsIGJ1dCB0eXBpY2FsbHkgYSBmaW5lLWdyYWluZWQgYXBwbGljYXRpb24gaXMKKyAq
IHByZWZlcmVkIGluIG9yZGVyIHRvIGJlbmVmaXQgZnJvbSBwcm9ncmVzc2l2ZSByZW5kZXJpbmcg
b2YgdGhlIGJyb3dzZXIgdmlldy4KKyAqCisgKiBgbmdDbG9ha2Agd29ya3MgaW4gY29vcGVyYXRp
b24gd2l0aCBhIGNzcyBydWxlIHRoYXQgaXMgZW1iZWRkZWQgd2l0aGluIGBhbmd1bGFyLmpzYCBh
bmQKKyAqICBgYW5ndWxhci5taW4uanNgIGZpbGVzLiBGb2xsb3dpbmcgaXMgdGhlIGNzcyBydWxl
OgorICoKKyAqIDxwcmU+CisgKiBbbmdcOmNsb2FrXSwgW25nLWNsb2FrXSwgW2RhdGEtbmctY2xv
YWtdLCBbeC1uZy1jbG9ha10sIC5uZy1jbG9haywgLngtbmctY2xvYWsgeworICogICBkaXNwbGF5
OiBub25lOworICogfQorICogPC9wcmU+CisgKgorICogV2hlbiB0aGlzIGNzcyBydWxlIGlzIGxv
YWRlZCBieSB0aGUgYnJvd3NlciwgYWxsIGh0bWwgZWxlbWVudHMgKGluY2x1ZGluZyB0aGVpciBj
aGlsZHJlbikgdGhhdAorICogYXJlIHRhZ2dlZCB3aXRoIHRoZSBgbmctY2xvYWtgIGRpcmVjdGl2
ZSBhcmUgaGlkZGVuLiBXaGVuIEFuZ3VsYXIgY29tZXMgYWNyb3NzIHRoaXMgZGlyZWN0aXZlCisg
KiBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSB0ZW1wbGF0ZSBpdCBkZWxldGVzIHRoZSBg
bmdDbG9ha2AgZWxlbWVudCBhdHRyaWJ1dGUsIHdoaWNoCisgKiBtYWtlcyB0aGUgY29tcGlsZWQg
ZWxlbWVudCB2aXNpYmxlLgorICoKKyAqIEZvciB0aGUgYmVzdCByZXN1bHQsIGBhbmd1bGFyLmpz
YCBzY3JpcHQgbXVzdCBiZSBsb2FkZWQgaW4gdGhlIGhlYWQgc2VjdGlvbiBvZiB0aGUgaHRtbCBm
aWxlOworICogYWx0ZXJuYXRpdmVseSwgdGhlIGNzcyBydWxlIChhYm92ZSkgbXVzdCBiZSBpbmNs
dWRlZCBpbiB0aGUgZXh0ZXJuYWwgc3R5bGVzaGVldCBvZiB0aGUKKyAqIGFwcGxpY2F0aW9uLgor
ICoKKyAqIExlZ2FjeSBicm93c2VycywgbGlrZSBJRTcsIGRvIG5vdCBwcm92aWRlIGF0dHJpYnV0
ZSBzZWxlY3RvciBzdXBwb3J0IChhZGRlZCBpbiBDU1MgMi4xKSBzbyB0aGV5CisgKiBjYW5ub3Qg
bWF0Y2ggdGhlIGBbbmdcOmNsb2FrXWAgc2VsZWN0b3IuIFRvIHdvcmsgYXJvdW5kIHRoaXMgbGlt
aXRhdGlvbiwgeW91IG11c3QgYWRkIHRoZSBjc3MKKyAqIGNsYXNzIGBuZ0Nsb2FrYCBpbiBhZGRp
dGlvbiB0byBgbmdDbG9ha2AgZGlyZWN0aXZlIGFzIHNob3duIGluIHRoZSBleGFtcGxlIGJlbG93
LgorICoKKyAqIEBlbGVtZW50IEFOWQorICoKKyAqIEBleGFtcGxlCisgICA8ZG9jOmV4YW1wbGU+
CisgICAgIDxkb2M6c291cmNlPgorICAgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZTEiIG5nLWNsb2Fr
Pnt7ICdoZWxsbycgfX08L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0idGVtcGxhdGUyIiBuZy1jbG9h
ayBjbGFzcz0ibmctY2xvYWsiPnt7ICdoZWxsbyBJRTcnIH19PC9kaXY+CisgICAgIDwvZG9jOnNv
dXJjZT4KKyAgICAgPGRvYzpzY2VuYXJpbz4KKyAgICAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUg
dGVtcGxhdGUgZGlyZWN0aXZlIGFuZCBjc3MgY2xhc3MnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
IGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSAjdGVtcGxhdGUxJykuYXR0cignbmct
Y2xvYWsnKSkuCisgICAgICAgICAgIG5vdCgpLnRvQmVEZWZpbmVkKCk7CisgICAgICAgICBleHBl
Y3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgI3RlbXBsYXRlMicpLmF0dHIoJ25nLWNsb2Fr
JykpLgorICAgICAgICAgICBub3QoKS50b0JlRGVmaW5lZCgpOworICAgICAgIH0pOworICAgICA8
L2RvYzpzY2VuYXJpbz4KKyAgIDwvZG9jOmV4YW1wbGU+CisgKgorICovCit2YXIgbmdDbG9ha0Rp
cmVjdGl2ZSA9IG5nRGlyZWN0aXZlKHsKKyAgY29tcGlsZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0
cikgeworICAgIGF0dHIuJHNldCgnbmdDbG9haycsIHVuZGVmaW5lZCk7CisgICAgZWxlbWVudC5y
ZW1vdmVDbGFzcygnbmctY2xvYWsnKTsKKyAgfQorfSk7CisKKy8qKgorICogQG5nZG9jIGRpcmVj
dGl2ZQorICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nQ29udHJvbGxlcgorICoKKyAqIEBkZXNjcmlw
dGlvbgorICogVGhlIGBuZ0NvbnRyb2xsZXJgIGRpcmVjdGl2ZSBhc3NpZ25zIGJlaGF2aW9yIHRv
IGEgc2NvcGUuIFRoaXMgaXMgYSBrZXkgYXNwZWN0IG9mIGhvdyBhbmd1bGFyCisgKiBzdXBwb3J0
cyB0aGUgcHJpbmNpcGxlcyBiZWhpbmQgdGhlIE1vZGVsLVZpZXctQ29udHJvbGxlciBkZXNpZ24g
cGF0dGVybi4KKyAqCisgKiBNVkMgY29tcG9uZW50cyBpbiBhbmd1bGFyOgorICoKKyAqICogTW9k
ZWwg4oCUIFRoZSBNb2RlbCBpcyBkYXRhIGluIHNjb3BlIHByb3BlcnRpZXM7IHNjb3BlcyBhcmUg
YXR0YWNoZWQgdG8gdGhlIERPTS4KKyAqICogVmlldyDigJQgVGhlIHRlbXBsYXRlIChIVE1MIHdp
dGggZGF0YSBiaW5kaW5ncykgaXMgcmVuZGVyZWQgaW50byB0aGUgVmlldy4KKyAqICogQ29udHJv
bGxlciDigJQgVGhlIGBuZ0NvbnRyb2xsZXJgIGRpcmVjdGl2ZSBzcGVjaWZpZXMgYSBDb250cm9s
bGVyIGNsYXNzOyB0aGUgY2xhc3MgaGFzCisgKiAgIG1ldGhvZHMgdGhhdCB0eXBpY2FsbHkgZXhw
cmVzcyB0aGUgYnVzaW5lc3MgbG9naWMgYmVoaW5kIHRoZSBhcHBsaWNhdGlvbi4KKyAqCisgKiBO
b3RlIHRoYXQgYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIGRlZmluZSBjb250cm9sbGVycyBpcyB2aWEg
dGhlIHtAbGluayBuZy4kcm91dGUgJHJvdXRlfSBzZXJ2aWNlLgorICoKKyAqIEBlbGVtZW50IEFO
WQorICogQHNjb3BlCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ29udHJvbGxlciBOYW1lIG9m
IGEgZ2xvYmFsbHkgYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBvciBhbgorICogICAg
IHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IHRoYXQgb24gdGhlIGN1cnJlbnQg
c2NvcGUgZXZhbHVhdGVzIHRvIGEKKyAqICAgICBjb25zdHJ1Y3RvciBmdW5jdGlvbi4KKyAqCisg
KiBAZXhhbXBsZQorICogSGVyZSBpcyBhIHNpbXBsZSBmb3JtIGZvciBlZGl0aW5nIHVzZXIgY29u
dGFjdCBpbmZvcm1hdGlvbi4gQWRkaW5nLCByZW1vdmluZywgY2xlYXJpbmcsIGFuZAorICogZ3Jl
ZXRpbmcgYXJlIG1ldGhvZHMgZGVjbGFyZWQgb24gdGhlIGNvbnRyb2xsZXIgKHNlZSBzb3VyY2Ug
dGFiKS4gVGhlc2UgbWV0aG9kcyBjYW4KKyAqIGVhc2lseSBiZSBjYWxsZWQgZnJvbSB0aGUgYW5n
dWxhciBtYXJrdXAuIE5vdGljZSB0aGF0IHRoZSBzY29wZSBiZWNvbWVzIHRoZSBgdGhpc2AgZm9y
IHRoZQorICogY29udHJvbGxlcidzIGluc3RhbmNlLiBUaGlzIGFsbG93cyBmb3IgZWFzeSBhY2Nl
c3MgdG8gdGhlIHZpZXcgZGF0YSBmcm9tIHRoZSBjb250cm9sbGVyLiBBbHNvCisgKiBub3RpY2Ug
dGhhdCBhbnkgY2hhbmdlcyB0byB0aGUgZGF0YSBhcmUgYXV0b21hdGljYWxseSByZWZsZWN0ZWQg
aW4gdGhlIFZpZXcgd2l0aG91dCB0aGUgbmVlZAorICogZm9yIGEgbWFudWFsIHVwZGF0ZS4KKyAg
IDxkb2M6ZXhhbXBsZT4KKyAgICAgPGRvYzpzb3VyY2U+CisgICAgICA8c2NyaXB0PgorICAgICAg
ICBmdW5jdGlvbiBTZXR0aW5nc0NvbnRyb2xsZXIoJHNjb3BlKSB7CisgICAgICAgICAgJHNjb3Bl
Lm5hbWUgPSAiSm9obiBTbWl0aCI7CisgICAgICAgICAgJHNjb3BlLmNvbnRhY3RzID0gWworICAg
ICAgICAgICAge3R5cGU6J3Bob25lJywgdmFsdWU6JzQwOCA1NTUgMTIxMid9LAorICAgICAgICAg
ICAge3R5cGU6J2VtYWlsJywgdmFsdWU6J2pvaG4uc21pdGhAZXhhbXBsZS5vcmcnfSBdOworCisg
ICAgICAgICAgJHNjb3BlLmdyZWV0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgIGFsZXJ0KHRo
aXMubmFtZSk7CisgICAgICAgICAgfTsKKworICAgICAgICAgICRzY29wZS5hZGRDb250YWN0ID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgIHRoaXMuY29udGFjdHMucHVzaCh7dHlwZTonZW1haWwn
LCB2YWx1ZToneW91cm5hbWVAZXhhbXBsZS5vcmcnfSk7CisgICAgICAgICAgfTsKKworICAgICAg
ICAgICRzY29wZS5yZW1vdmVDb250YWN0ID0gZnVuY3Rpb24oY29udGFjdFRvUmVtb3ZlKSB7Cisg
ICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY29udGFjdHMuaW5kZXhPZihjb250YWN0VG9SZW1v
dmUpOworICAgICAgICAgICB0aGlzLmNvbnRhY3RzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAg
ICAgfTsKKworICAgICAgICAgICRzY29wZS5jbGVhckNvbnRhY3QgPSBmdW5jdGlvbihjb250YWN0
KSB7CisgICAgICAgICAgIGNvbnRhY3QudHlwZSA9ICdwaG9uZSc7CisgICAgICAgICAgIGNvbnRh
Y3QudmFsdWUgPSAnJzsKKyAgICAgICAgICB9OworICAgICAgICB9CisgICAgICA8L3NjcmlwdD4K
KyAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iU2V0dGluZ3NDb250cm9sbGVyIj4KKyAgICAgICAg
TmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJuYW1lIi8+CisgICAgICAgIFsgPGEg
aHJlZj0iIiBuZy1jbGljaz0iZ3JlZXQoKSI+Z3JlZXQ8L2E+IF08YnIvPgorICAgICAgICBDb250
YWN0OgorICAgICAgICA8dWw+CisgICAgICAgICAgPGxpIG5nLXJlcGVhdD0iY29udGFjdCBpbiBj
b250YWN0cyI+CisgICAgICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPSJjb250YWN0LnR5cGUiPgor
ICAgICAgICAgICAgICAgPG9wdGlvbj5waG9uZTwvb3B0aW9uPgorICAgICAgICAgICAgICAgPG9w
dGlvbj5lbWFpbDwvb3B0aW9uPgorICAgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgICAgICA8
aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9ImNvbnRhY3QudmFsdWUiLz4KKyAgICAgICAgICAg
IFsgPGEgaHJlZj0iIiBuZy1jbGljaz0iY2xlYXJDb250YWN0KGNvbnRhY3QpIj5jbGVhcjwvYT4K
KyAgICAgICAgICAgIHwgPGEgaHJlZj0iIiBuZy1jbGljaz0icmVtb3ZlQ29udGFjdChjb250YWN0
KSI+WDwvYT4gXQorICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPGxpPlsgPGEgaHJlZj0iIiBu
Zy1jbGljaz0iYWRkQ29udGFjdCgpIj5hZGQ8L2E+IF08L2xpPgorICAgICAgIDwvdWw+CisgICAg
ICA8L2Rpdj4KKyAgICAgPC9kb2M6c291cmNlPgorICAgICA8ZG9jOnNjZW5hcmlvPgorICAgICAg
IGl0KCdzaG91bGQgY2hlY2sgY29udHJvbGxlcicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIGRpdj46aW5wdXQnKS52YWwoKSkudG9CZSgn
Sm9obiBTbWl0aCcpOworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZl
IGxpOm50aC1jaGlsZCgxKSBpbnB1dCcpLnZhbCgpKQorICAgICAgICAgICAudG9CZSgnNDA4IDU1
NSAxMjEyJyk7CisgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbGk6
bnRoLWNoaWxkKDIpIGlucHV0JykudmFsKCkpCisgICAgICAgICAgIC50b0JlKCdqb2huLnNtaXRo
QGV4YW1wbGUub3JnJyk7CisKKyAgICAgICAgIGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIGxp
OmZpcnN0IGE6Y29udGFpbnMoImNsZWFyIiknKS5jbGljaygpOworICAgICAgICAgZXhwZWN0KGVs
ZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIGxpOmZpcnN0IGlucHV0JykudmFsKCkpLnRvQmUoJycp
OworCisgICAgICAgICBlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBsaTpsYXN0IGE6Y29udGFp
bnMoImFkZCIpJykuY2xpY2soKTsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1w
bGUtbGl2ZSBsaTpudGgtY2hpbGQoMykgaW5wdXQnKS52YWwoKSkKKyAgICAgICAgICAgLnRvQmUo
J3lvdXJuYW1lQGV4YW1wbGUub3JnJyk7CisgICAgICAgfSk7CisgICAgIDwvZG9jOnNjZW5hcmlv
PgorICAgPC9kb2M6ZXhhbXBsZT4KKyAqLwordmFyIG5nQ29udHJvbGxlckRpcmVjdGl2ZSA9IFtm
dW5jdGlvbigpIHsKKyAgcmV0dXJuIHsKKyAgICBzY29wZTogdHJ1ZSwKKyAgICBjb250cm9sbGVy
OiAnQCcKKyAgfTsKK31dOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5n
LmRpcmVjdGl2ZTpuZ0NzcAorICogQHByaW9yaXR5IDEwMDAKKyAqCisgKiBAZWxlbWVudCBodG1s
CisgKiBAZGVzY3JpcHRpb24KKyAqIEVuYWJsZXMgW0NTUCAoQ29udGVudCBTZWN1cml0eSBQb2xp
Y3kpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9DU1ApIHN1cHBv
cnQuCisgKiAKKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gZGV2ZWxvcGluZyB0aGluZ3MgbGlr
ZSBHb29nbGUgQ2hyb21lIEV4dGVuc2lvbnMuCisgKiAKKyAqIENTUCBmb3JiaWRzIGFwcHMgdG8g
dXNlIGBldmFsYCBvciBgRnVuY3Rpb24oc3RyaW5nKWAgZ2VuZXJhdGVkIGZ1bmN0aW9ucyAoYW1v
bmcgb3RoZXIgdGhpbmdzKS4KKyAqIEZvciB1cyB0byBiZSBjb21wYXRpYmxlLCB3ZSBqdXN0IG5l
ZWQgdG8gaW1wbGVtZW50IHRoZSAiZ2V0dGVyRm4iIGluICRwYXJzZSB3aXRob3V0IHZpb2xhdGlu
ZworICogYW55IG9mIHRoZXNlIHJlc3RyaWN0aW9ucy4KKyAqIAorICogQW5ndWxhckpTIHVzZXMg
YEZ1bmN0aW9uKHN0cmluZylgIGdlbmVyYXRlZCBmdW5jdGlvbnMgYXMgYSBzcGVlZCBvcHRpbWl6
YXRpb24uIEJ5IGFwcGx5aW5nIGBuZ0NzcGAKKyAqIGl0IGlzIGJlIHBvc3NpYmxlIHRvIG9wdCBp
bnRvIHRoZSBDU1AgY29tcGF0aWJsZSBtb2RlLiBXaGVuIHRoaXMgbW9kZSBpcyBvbiBBbmd1bGFy
SlMgd2lsbAorICogZXZhbHVhdGUgYWxsIGV4cHJlc3Npb25zIHVwIHRvIDMwJSBzbG93ZXIgdGhh
biBpbiBub24tQ1NQIG1vZGUsIGJ1dCBubyBzZWN1cml0eSB2aW9sYXRpb25zIHdpbGwKKyAqIGJl
IHJhaXNlZC4KKyAqIAorICogSW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZSBwdXQgYG5nQ3Nw
YCBkaXJlY3RpdmUgb24gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgYXBwbGljYXRpb24uCisgKiAK
KyAqIEBleGFtcGxlCisgKiBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIGFwcGx5IHRoZSBgbmdD
c3BgIGRpcmVjdGl2ZSB0byB0aGUgYGh0bWxgIHRhZy4KKyAgIDxwcmU+CisgICAgIDwhZG9jdHlw
ZSBodG1sPgorICAgICA8aHRtbCBuZy1hcHAgbmctY3NwPgorICAgICAuLi4KKyAgICAgLi4uCisg
ICAgIDwvaHRtbD4KKyAgIDwvcHJlPgorICovCisKK3ZhciBuZ0NzcERpcmVjdGl2ZSA9IFsnJHNu
aWZmZXInLCBmdW5jdGlvbigkc25pZmZlcikgeworICByZXR1cm4geworICAgIHByaW9yaXR5OiAx
MDAwLAorICAgIGNvbXBpbGU6IGZ1bmN0aW9uKCkgeworICAgICAgJHNuaWZmZXIuY3NwID0gdHJ1
ZTsKKyAgICB9CisgIH07Cit9XTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFt
ZSBuZy5kaXJlY3RpdmU6bmdDbGljaworICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIG5nQ2xp
Y2sgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciB3aGVuCisgKiBlbGVtZW50
IGlzIGNsaWNrZWQuCisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAcGFyYW0ge2V4cHJlc3Npb259
IG5nQ2xpY2sge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUg
dXBvbgorICogY2xpY2suIChFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgKQor
ICoKKyAqIEBleGFtcGxlCisgICA8ZG9jOmV4YW1wbGU+CisgICAgIDxkb2M6c291cmNlPgorICAg
ICAgPGJ1dHRvbiBuZy1jbGljaz0iY291bnQgPSBjb3VudCArIDEiIG5nLWluaXQ9ImNvdW50PTAi
PgorICAgICAgICBJbmNyZW1lbnQKKyAgICAgIDwvYnV0dG9uPgorICAgICAgY291bnQ6IHt7Y291
bnR9fQorICAgICA8L2RvYzpzb3VyY2U+CisgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgaXQo
J3Nob3VsZCBjaGVjayBuZy1jbGljaycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhwZWN0KGJp
bmRpbmcoJ2NvdW50JykpLnRvQmUoJzAnKTsKKyAgICAgICAgIGVsZW1lbnQoJy5kb2MtZXhhbXBs
ZS1saXZlIDpidXR0b24nKS5jbGljaygpOworICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ2NvdW50
JykpLnRvQmUoJzEnKTsKKyAgICAgICB9KTsKKyAgICAgPC9kb2M6c2NlbmFyaW8+CisgICA8L2Rv
YzpleGFtcGxlPgorICovCisvKgorICogQSBkaXJlY3RpdmUgdGhhdCBhbGxvd3MgY3JlYXRpb24g
b2YgY3VzdG9tIG9uY2xpY2sgaGFuZGxlcnMgdGhhdCBhcmUgZGVmaW5lZCBhcyBhbmd1bGFyCisg
KiBleHByZXNzaW9ucyBhbmQgYXJlIGNvbXBpbGVkIGFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGN1
cnJlbnQgc2NvcGUuCisgKgorICogRXZlbnRzIHRoYXQgYXJlIGhhbmRsZWQgdmlhIHRoZXNlIGhh
bmRsZXIgYXJlIGFsd2F5cyBjb25maWd1cmVkIG5vdCB0byBwcm9wYWdhdGUgZnVydGhlci4KKyAq
LwordmFyIG5nRXZlbnREaXJlY3RpdmVzID0ge307Citmb3JFYWNoKAorICAnY2xpY2sgZGJsY2xp
Y2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlbW92ZSBtb3VzZWVu
dGVyIG1vdXNlbGVhdmUnLnNwbGl0KCcgJyksCisgIGZ1bmN0aW9uKG5hbWUpIHsKKyAgICB2YXIg
ZGlyZWN0aXZlTmFtZSA9IGRpcmVjdGl2ZU5vcm1hbGl6ZSgnbmctJyArIG5hbWUpOworICAgIG5n
RXZlbnREaXJlY3RpdmVzW2RpcmVjdGl2ZU5hbWVdID0gWyckcGFyc2UnLCBmdW5jdGlvbigkcGFy
c2UpIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikgeworICAg
ICAgICB2YXIgZm4gPSAkcGFyc2UoYXR0cltkaXJlY3RpdmVOYW1lXSk7CisgICAgICAgIGVsZW1l
bnQuYmluZChsb3dlcmNhc2UobmFtZSksIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgc2Nv
cGUuJGFwcGx5KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZm4oc2NvcGUsIHskZXZlbnQ6ZXZl
bnR9KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9OworICAgIH1dOworICB9
CispOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpu
Z0RibGNsaWNrCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUgYG5nRGJsY2xpY2tgIGRpcmVj
dGl2ZSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIGRibGNsaWNrIGV2
ZW50LgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0RibGNs
aWNrIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24K
KyAqIGRibGNsaWNrLiAoRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YCkKKyAq
CisgKiBAZXhhbXBsZQorICogU2VlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbGljayBuZ0NsaWNr
fQorICovCisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZy5kaXJlY3Rp
dmU6bmdNb3VzZWRvd24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBuZ01vdXNlZG93biBk
aXJlY3RpdmUgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBtb3VzZWRv
d24gZXZlbnQuCisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5n
TW91c2Vkb3duIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRl
IHVwb24KKyAqIG1vdXNlZG93bi4gKEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVu
dGApCisgKgorICogQGV4YW1wbGUKKyAqIFNlZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xpY2sg
bmdDbGlja30KKyAqLworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmcu
ZGlyZWN0aXZlOm5nTW91c2V1cAorICoKKyAqIEBkZXNjcmlwdGlvbgorICogU3BlY2lmeSBjdXN0
b20gYmVoYXZpb3Igb24gbW91c2V1cCBldmVudC4KKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBw
YXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZXVwIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJl
c3Npb259IHRvIGV2YWx1YXRlIHVwb24KKyAqIG1vdXNldXAuIChFdmVudCBvYmplY3QgaXMgYXZh
aWxhYmxlIGFzIGAkZXZlbnRgKQorICoKKyAqIEBleGFtcGxlCisgKiBTZWUge0BsaW5rIG5nLmRp
cmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9CisgKi8KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZl
CisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdNb3VzZW92ZXIKKyAqCisgKiBAZGVzY3JpcHRpb24K
KyAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNlb3ZlciBldmVudC4KKyAqCisgKiBA
ZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZW92ZXIge0BsaW5rIGd1
aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgorICogbW91c2VvdmVy
LiAoRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YCkKKyAqCisgKiBAZXhhbXBs
ZQorICogU2VlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbGljayBuZ0NsaWNrfQorICovCisKKwor
LyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdNb3VzZWVu
dGVyCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBt
b3VzZWVudGVyIGV2ZW50LgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHBhcmFtIHtleHByZXNz
aW9ufSBuZ01vdXNlZW50ZXIge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8g
ZXZhbHVhdGUgdXBvbgorICogbW91c2VlbnRlci4gKEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUg
YXMgYCRldmVudGApCisgKgorICogQGV4YW1wbGUKKyAqIFNlZSB7QGxpbmsgbmcuZGlyZWN0aXZl
Om5nQ2xpY2sgbmdDbGlja30KKyAqLworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICog
QG5hbWUgbmcuZGlyZWN0aXZlOm5nTW91c2VsZWF2ZQorICoKKyAqIEBkZXNjcmlwdGlvbgorICog
U3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gbW91c2VsZWF2ZSBldmVudC4KKyAqCisgKiBAZWxl
bWVudCBBTlkKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZWxlYXZlIHtAbGluayBndWlk
ZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24KKyAqIG1vdXNlbGVhdmUu
IChFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgKQorICoKKyAqIEBleGFtcGxl
CisgKiBTZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9CisgKi8KKworCisv
KioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ01vdXNlbW92
ZQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gbW91
c2Vtb3ZlIGV2ZW50LgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHBhcmFtIHtleHByZXNzaW9u
fSBuZ01vdXNlbW92ZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFs
dWF0ZSB1cG9uCisgKiBtb3VzZW1vdmUuIChFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAk
ZXZlbnRgKQorICoKKyAqIEBleGFtcGxlCisgKiBTZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0Ns
aWNrIG5nQ2xpY2t9CisgKi8KKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1l
IG5nLmRpcmVjdGl2ZTpuZ1N1Ym1pdAorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRW5hYmxlcyBi
aW5kaW5nIGFuZ3VsYXIgZXhwcmVzc2lvbnMgdG8gb25zdWJtaXQgZXZlbnRzLgorICoKKyAqIEFk
ZGl0aW9uYWxseSBpdCBwcmV2ZW50cyB0aGUgZGVmYXVsdCBhY3Rpb24gKHdoaWNoIGZvciBmb3Jt
IG1lYW5zIHNlbmRpbmcgdGhlIHJlcXVlc3QgdG8gdGhlCisgKiBzZXJ2ZXIgYW5kIHJlbG9hZGlu
ZyB0aGUgY3VycmVudCBwYWdlKS4KKyAqCisgKiBAZWxlbWVudCBmb3JtCisgKiBAcGFyYW0ge2V4
cHJlc3Npb259IG5nU3VibWl0IHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRv
IGV2YWwuCisgKgorICogQGV4YW1wbGUKKyAgIDxkb2M6ZXhhbXBsZT4KKyAgICAgPGRvYzpzb3Vy
Y2U+CisgICAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgeworICAg
ICAgICAgICRzY29wZS5saXN0ID0gW107CisgICAgICAgICAgJHNjb3BlLnRleHQgPSAnaGVsbG8n
OworICAgICAgICAgICRzY29wZS5zdWJtaXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLnRleHQpIHsKKyAgICAgICAgICAgICAgdGhpcy5saXN0LnB1c2godGhpcy50ZXh0KTsK
KyAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gJyc7CisgICAgICAgICAgICB9CisgICAgICAgICAg
fTsKKyAgICAgICAgfQorICAgICAgPC9zY3JpcHQ+CisgICAgICA8Zm9ybSBuZy1zdWJtaXQ9InN1
Ym1pdCgpIiBuZy1jb250cm9sbGVyPSJDdHJsIj4KKyAgICAgICAgRW50ZXIgdGV4dCBhbmQgaGl0
IGVudGVyOgorICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9InRleHQiIG5hbWU9
InRleHQiIC8+CisgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSJzdWJtaXQiIHZhbHVl
PSJTdWJtaXQiIC8+CisgICAgICAgIDxwcmU+bGlzdD17e2xpc3R9fTwvcHJlPgorICAgICAgPC9m
b3JtPgorICAgICA8L2RvYzpzb3VyY2U+CisgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgaXQo
J3Nob3VsZCBjaGVjayBuZy1zdWJtaXQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVjdChi
aW5kaW5nKCdsaXN0JykpLnRvQmUoJ1tdJyk7CisgICAgICAgICBlbGVtZW50KCcuZG9jLWV4YW1w
bGUtbGl2ZSAjc3VibWl0JykuY2xpY2soKTsKKyAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdsaXN0
JykpLnRvQmUoJ1siaGVsbG8iXScpOworICAgICAgICAgZXhwZWN0KGlucHV0KCd0ZXh0JykudmFs
KCkpLnRvQmUoJycpOworICAgICAgIH0pOworICAgICAgIGl0KCdzaG91bGQgaWdub3JlIGVtcHR5
IHN0cmluZ3MnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdsaXN0Jykp
LnRvQmUoJ1tdJyk7CisgICAgICAgICBlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSAjc3VibWl0
JykuY2xpY2soKTsKKyAgICAgICAgIGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlICNzdWJtaXQn
KS5jbGljaygpOworICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ2xpc3QnKSkudG9CZSgnWyJoZWxs
byJdJyk7CisgICAgICAgfSk7CisgICAgIDwvZG9jOnNjZW5hcmlvPgorICAgPC9kb2M6ZXhhbXBs
ZT4KKyAqLwordmFyIG5nU3VibWl0RGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoZnVuY3Rpb24oc2Nv
cGUsIGVsZW1lbnQsIGF0dHJzKSB7CisgIGVsZW1lbnQuYmluZCgnc3VibWl0JywgZnVuY3Rpb24o
KSB7CisgICAgc2NvcGUuJGFwcGx5KGF0dHJzLm5nU3VibWl0KTsKKyAgfSk7Cit9KTsKKworLyoq
CisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdJbmNsdWRlCisg
KiBAcmVzdHJpY3QgRUNBCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBGZXRjaGVzLCBjb21waWxl
cyBhbmQgaW5jbHVkZXMgYW4gZXh0ZXJuYWwgSFRNTCBmcmFnbWVudC4KKyAqCisgKiBLZWVwIGlu
IG1pbmQgdGhhdCBTYW1lIE9yaWdpbiBQb2xpY3kgYXBwbGllcyB0byBpbmNsdWRlZCByZXNvdXJj
ZXMKKyAqIChlLmcuIG5nSW5jbHVkZSB3b24ndCB3b3JrIGZvciBjcm9zcy1kb21haW4gcmVxdWVz
dHMgb24gYWxsIGJyb3dzZXJzIGFuZCBmb3IKKyAqICBmaWxlOi8vIGFjY2VzcyBvbiBzb21lIGJy
b3dzZXJzKS4KKyAqCisgKiBAc2NvcGUKKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmdJbmNsdWRl
fHNyYyBhbmd1bGFyIGV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBVUkwuIElmIHRoZSBzb3VyY2Ug
aXMgYSBzdHJpbmcgY29uc3RhbnQsCisgKiAgICAgICAgICAgICAgICAgbWFrZSBzdXJlIHlvdSB3
cmFwIGl0IGluIHF1b3RlcywgZS5nLiBgc3JjPSInbXlQYXJ0aWFsVGVtcGxhdGUuaHRtbCciYC4K
KyAqIEBwYXJhbSB7c3RyaW5nPX0gb25sb2FkIEV4cHJlc3Npb24gdG8gZXZhbHVhdGUgd2hlbiBh
IG5ldyBwYXJ0aWFsIGlzIGxvYWRlZC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZz19IGF1dG9zY3Jv
bGwgV2hldGhlciBgbmdJbmNsdWRlYCBzaG91bGQgY2FsbCB7QGxpbmsgbmcuJGFuY2hvclNjcm9s
bAorICogICAgICAgICAgICAgICAgICAkYW5jaG9yU2Nyb2xsfSB0byBzY3JvbGwgdGhlIHZpZXdw
b3J0IGFmdGVyIHRoZSBjb250ZW50IGlzIGxvYWRlZC4KKyAqCisgKiAgICAgICAgICAgICAgICAg
IC0gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCBkaXNhYmxlIHNjcm9sbGluZy4KKyAqICAg
ICAgICAgICAgICAgICAgLSBJZiB0aGUgYXR0cmlidXRlIGlzIHNldCB3aXRob3V0IHZhbHVlLCBl
bmFibGUgc2Nyb2xsaW5nLgorICogICAgICAgICAgICAgICAgICAtIE90aGVyd2lzZSBlbmFibGUg
c2Nyb2xsaW5nIG9ubHkgaWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydXRoeSB2YWx1
ZS4KKyAqCisgKiBAZXhhbXBsZQorICA8ZXhhbXBsZT4KKyAgICA8ZmlsZSBuYW1lPSJpbmRleC5o
dG1sIj4KKyAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJDdHJsIj4KKyAgICAgICA8c2VsZWN0IG5n
LW1vZGVsPSJ0ZW1wbGF0ZSIgbmctb3B0aW9ucz0idC5uYW1lIGZvciB0IGluIHRlbXBsYXRlcyI+
CisgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+KGJsYW5rKTwvb3B0aW9uPgorICAgICAgIDwvc2Vs
ZWN0PgorICAgICAgIHVybCBvZiB0aGUgdGVtcGxhdGU6IDx0dD57e3RlbXBsYXRlLnVybH19PC90
dD4KKyAgICAgICA8aHIvPgorICAgICAgIDxkaXYgbmctaW5jbHVkZSBzcmM9InRlbXBsYXRlLnVy
bCI+PC9kaXY+CisgICAgIDwvZGl2PgorICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJzY3Jp
cHQuanMiPgorICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKKyAgICAgICAgJHNjb3BlLnRl
bXBsYXRlcyA9CisgICAgICAgICAgWyB7IG5hbWU6ICd0ZW1wbGF0ZTEuaHRtbCcsIHVybDogJ3Rl
bXBsYXRlMS5odG1sJ30KKyAgICAgICAgICAsIHsgbmFtZTogJ3RlbXBsYXRlMi5odG1sJywgdXJs
OiAndGVtcGxhdGUyLmh0bWwnfSBdOworICAgICAgICAkc2NvcGUudGVtcGxhdGUgPSAkc2NvcGUu
dGVtcGxhdGVzWzBdOworICAgICAgfQorICAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0idGVt
cGxhdGUxLmh0bWwiPgorICAgICAgQ29udGVudCBvZiB0ZW1wbGF0ZTEuaHRtbAorICAgIDwvZmls
ZT4KKyAgICA8ZmlsZSBuYW1lPSJ0ZW1wbGF0ZTIuaHRtbCI+CisgICAgICBDb250ZW50IG9mIHRl
bXBsYXRlMi5odG1sCisgICAgPC9maWxlPgorICAgIDxmaWxlIG5hbWU9InNjZW5hcmlvLmpzIj4K
KyAgICAgIGl0KCdzaG91bGQgbG9hZCB0ZW1wbGF0ZTEuaHRtbCcsIGZ1bmN0aW9uKCkgeworICAg
ICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBbbmctaW5jbHVkZV0nKS50ZXh0
KCkpLgorICAgICAgICAgdG9NYXRjaCgvQ29udGVudCBvZiB0ZW1wbGF0ZTEuaHRtbC8pOworICAg
ICAgfSk7CisgICAgICBpdCgnc2hvdWxkIGxvYWQgdGVtcGxhdGUyLmh0bWwnLCBmdW5jdGlvbigp
IHsKKyAgICAgICBzZWxlY3QoJ3RlbXBsYXRlJykub3B0aW9uKCcxJyk7CisgICAgICAgZXhwZWN0
KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIFtuZy1pbmNsdWRlXScpLnRleHQoKSkuCisgICAg
ICAgICB0b01hdGNoKC9Db250ZW50IG9mIHRlbXBsYXRlMi5odG1sLyk7CisgICAgICB9KTsKKyAg
ICAgIGl0KCdzaG91bGQgY2hhbmdlIHRvIGJsYW5rJywgZnVuY3Rpb24oKSB7CisgICAgICAgc2Vs
ZWN0KCd0ZW1wbGF0ZScpLm9wdGlvbignJyk7CisgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2Mt
ZXhhbXBsZS1saXZlIFtuZy1pbmNsdWRlXScpLnRleHQoKSkudG9FcXVhbCgnJyk7CisgICAgICB9
KTsKKyAgICA8L2ZpbGU+CisgIDwvZXhhbXBsZT4KKyAqLworCisKKy8qKgorICogQG5nZG9jIGV2
ZW50CisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdJbmNsdWRlIyRpbmNsdWRlQ29udGVudExvYWRl
ZAorICogQGV2ZW50T2YgbmcuZGlyZWN0aXZlOm5nSW5jbHVkZQorICogQGV2ZW50VHlwZSBlbWl0
IG9uIHRoZSBjdXJyZW50IG5nSW5jbHVkZSBzY29wZQorICogQGRlc2NyaXB0aW9uCisgKiBFbWl0
dGVkIGV2ZXJ5IHRpbWUgdGhlIG5nSW5jbHVkZSBjb250ZW50IGlzIHJlbG9hZGVkLgorICovCit2
YXIgbmdJbmNsdWRlRGlyZWN0aXZlID0gWyckaHR0cCcsICckdGVtcGxhdGVDYWNoZScsICckYW5j
aG9yU2Nyb2xsJywgJyRjb21waWxlJywKKyAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRodHRw
LCAgICR0ZW1wbGF0ZUNhY2hlLCAgICRhbmNob3JTY3JvbGwsICAgJGNvbXBpbGUpIHsKKyAgcmV0
dXJuIHsKKyAgICByZXN0cmljdDogJ0VDQScsCisgICAgdGVybWluYWw6IHRydWUsCisgICAgY29t
cGlsZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0cikgeworICAgICAgdmFyIHNyY0V4cCA9IGF0dHIu
bmdJbmNsdWRlIHx8IGF0dHIuc3JjLAorICAgICAgICAgIG9ubG9hZEV4cCA9IGF0dHIub25sb2Fk
IHx8ICcnLAorICAgICAgICAgIGF1dG9TY3JvbGxFeHAgPSBhdHRyLmF1dG9zY3JvbGw7CisKKyAg
ICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCkgeworICAgICAgICB2YXIgY2hhbmdl
Q291bnRlciA9IDAsCisgICAgICAgICAgICBjaGlsZFNjb3BlOworCisgICAgICAgIHZhciBjbGVh
ckNvbnRlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICBpZiAoY2hpbGRTY29wZSkgeworICAg
ICAgICAgICAgY2hpbGRTY29wZS4kZGVzdHJveSgpOworICAgICAgICAgICAgY2hpbGRTY29wZSA9
IG51bGw7CisgICAgICAgICAgfQorCisgICAgICAgICAgZWxlbWVudC5odG1sKCcnKTsKKyAgICAg
ICAgfTsKKworICAgICAgICBzY29wZS4kd2F0Y2goc3JjRXhwLCBmdW5jdGlvbiBuZ0luY2x1ZGVX
YXRjaEFjdGlvbihzcmMpIHsKKyAgICAgICAgICB2YXIgdGhpc0NoYW5nZUlkID0gKytjaGFuZ2VD
b3VudGVyOworCisgICAgICAgICAgaWYgKHNyYykgeworICAgICAgICAgICAgJGh0dHAuZ2V0KHNy
Yywge2NhY2hlOiAkdGVtcGxhdGVDYWNoZX0pLnN1Y2Nlc3MoZnVuY3Rpb24ocmVzcG9uc2UpIHsK
KyAgICAgICAgICAgICAgaWYgKHRoaXNDaGFuZ2VJZCAhPT0gY2hhbmdlQ291bnRlcikgcmV0dXJu
OworCisgICAgICAgICAgICAgIGlmIChjaGlsZFNjb3BlKSBjaGlsZFNjb3BlLiRkZXN0cm95KCk7
CisgICAgICAgICAgICAgIGNoaWxkU2NvcGUgPSBzY29wZS4kbmV3KCk7CisKKyAgICAgICAgICAg
ICAgZWxlbWVudC5odG1sKHJlc3BvbnNlKTsKKyAgICAgICAgICAgICAgJGNvbXBpbGUoZWxlbWVu
dC5jb250ZW50cygpKShjaGlsZFNjb3BlKTsKKworICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVk
KGF1dG9TY3JvbGxFeHApICYmICghYXV0b1Njcm9sbEV4cCB8fCBzY29wZS4kZXZhbChhdXRvU2Ny
b2xsRXhwKSkpIHsKKyAgICAgICAgICAgICAgICAkYW5jaG9yU2Nyb2xsKCk7CisgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICBjaGlsZFNjb3BlLiRlbWl0KCckaW5jbHVkZUNvbnRlbnRM
b2FkZWQnKTsKKyAgICAgICAgICAgICAgc2NvcGUuJGV2YWwob25sb2FkRXhwKTsKKyAgICAgICAg
ICAgIH0pLmVycm9yKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICBpZiAodGhpc0NoYW5nZUlk
ID09PSBjaGFuZ2VDb3VudGVyKSBjbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgIH0gZWxzZSBjbGVhckNvbnRlbnQoKTsKKyAgICAgICAgfSk7CisgICAgICB9OworICAg
IH0KKyAgfTsKK31dOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRp
cmVjdGl2ZTpuZ0luaXQKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgbmdJbml0YCBkaXJl
Y3RpdmUgc3BlY2lmaWVzIGluaXRpYWxpemF0aW9uIHRhc2tzIHRvIGJlIGV4ZWN1dGVkCisgKiAg
YmVmb3JlIHRoZSB0ZW1wbGF0ZSBlbnRlcnMgZXhlY3V0aW9uIG1vZGUgZHVyaW5nIGJvb3RzdHJh
cC4KKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdJbml0IHtA
bGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWwuCisgKgorICogQGV4YW1w
bGUKKyAgIDxkb2M6ZXhhbXBsZT4KKyAgICAgPGRvYzpzb3VyY2U+CisgICAgPGRpdiBuZy1pbml0
PSJncmVldGluZz0nSGVsbG8nOyBwZXJzb249J1dvcmxkJyI+CisgICAgICB7e2dyZWV0aW5nfX0g
e3twZXJzb259fSEKKyAgICA8L2Rpdj4KKyAgICAgPC9kb2M6c291cmNlPgorICAgICA8ZG9jOnNj
ZW5hcmlvPgorICAgICAgIGl0KCdzaG91bGQgY2hlY2sgZ3JlZXRpbmcnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdncmVldGluZycpKS50b0JlKCdIZWxsbycpOworICAg
ICAgICAgZXhwZWN0KGJpbmRpbmcoJ3BlcnNvbicpKS50b0JlKCdXb3JsZCcpOworICAgICAgIH0p
OworICAgICA8L2RvYzpzY2VuYXJpbz4KKyAgIDwvZG9jOmV4YW1wbGU+CisgKi8KK3ZhciBuZ0lu
aXREaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZSh7CisgIGNvbXBpbGU6IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiB7CisgICAgICBwcmU6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycykgewor
ICAgICAgICBzY29wZS4kZXZhbChhdHRycy5uZ0luaXQpOworICAgICAgfQorICAgIH0KKyAgfQor
fSk7CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmcuZGlyZWN0aXZlOm5n
Tm9uQmluZGFibGUKKyAqIEBwcmlvcml0eSAxMDAwCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBT
b21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIHdyaXRlIGNvZGUgd2hpY2ggbG9va3MgbGlrZSBi
aW5kaW5ncyBidXQgd2hpY2ggc2hvdWxkIGJlIGxlZnQgYWxvbmUKKyAqIGJ5IGFuZ3VsYXIuIFVz
ZSBgbmdOb25CaW5kYWJsZWAgdG8gbWFrZSBhbmd1bGFyIGlnbm9yZSBhIGNodW5rIG9mIEhUTUwu
CisgKgorICogQGVsZW1lbnQgQU5ZCisgKgorICogQGV4YW1wbGUKKyAqIEluIHRoaXMgZXhhbXBs
ZSB0aGVyZSBhcmUgdHdvIGxvY2F0aW9uIHdoZXJlIGEgc2ltcGxlIGJpbmRpbmcgKGB7e319YCkg
aXMgcHJlc2VudCwgYnV0IHRoZSBvbmUKKyAqIHdyYXBwZWQgaW4gYG5nTm9uQmluZGFibGVgIGlz
IGxlZnQgYWxvbmUuCisgKgorICogQGV4YW1wbGUKKyAgICA8ZG9jOmV4YW1wbGU+CisgICAgICA8
ZG9jOnNvdXJjZT4KKyAgICAgICAgPGRpdj5Ob3JtYWw6IHt7MSArIDJ9fTwvZGl2PgorICAgICAg
ICA8ZGl2IG5nLW5vbi1iaW5kYWJsZT5JZ25vcmVkOiB7ezEgKyAyfX08L2Rpdj4KKyAgICAgIDwv
ZG9jOnNvdXJjZT4KKyAgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgaXQoJ3Nob3VsZCBjaGVj
ayBuZy1ub24tYmluZGFibGUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVjdCh1c2luZygn
LmRvYy1leGFtcGxlLWxpdmUnKS5iaW5kaW5nKCcxICsgMicpKS50b0JlKCczJyk7CisgICAgICAg
ICBleHBlY3QodXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJykuZWxlbWVudCgnZGl2Omxhc3QnKS50
ZXh0KCkpLgorICAgICAgICAgICB0b01hdGNoKC8xIFwrIDIvKTsKKyAgICAgICB9KTsKKyAgICAg
IDwvZG9jOnNjZW5hcmlvPgorICAgIDwvZG9jOmV4YW1wbGU+CisgKi8KK3ZhciBuZ05vbkJpbmRh
YmxlRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoeyB0ZXJtaW5hbDogdHJ1ZSwgcHJpb3JpdHk6IDEw
MDAgfSk7CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmcuZGlyZWN0aXZl
Om5nUGx1cmFsaXplCisgKiBAcmVzdHJpY3QgRUEKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqICMg
T3ZlcnZpZXcKKyAqIGBuZ1BsdXJhbGl6ZWAgaXMgYSBkaXJlY3RpdmUgdGhhdCBkaXNwbGF5cyBt
ZXNzYWdlcyBhY2NvcmRpbmcgdG8gZW4tVVMgbG9jYWxpemF0aW9uIHJ1bGVzLgorICogVGhlc2Ug
cnVsZXMgYXJlIGJ1bmRsZWQgd2l0aCBhbmd1bGFyLmpzIGFuZCB0aGUgcnVsZXMgY2FuIGJlIG92
ZXJyaWRkZW4KKyAqIChzZWUge0BsaW5rIGd1aWRlL2kxOG4gQW5ndWxhciBpMThufSBkZXYgZ3Vp
ZGUpLiBZb3UgY29uZmlndXJlIG5nUGx1cmFsaXplIGRpcmVjdGl2ZQorICogYnkgc3BlY2lmeWlu
ZyB0aGUgbWFwcGluZ3MgYmV0d2VlbgorICoge0BsaW5rIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBv
cy9jbGRyLXRtcC90cnVuay9kaWZmL3N1cHBsZW1lbnRhbC9sYW5ndWFnZV9wbHVyYWxfcnVsZXMu
aHRtbAorICogcGx1cmFsIGNhdGVnb3JpZXN9IGFuZCB0aGUgc3RyaW5ncyB0byBiZSBkaXNwbGF5
ZWQuCisgKgorICogIyBQbHVyYWwgY2F0ZWdvcmllcyBhbmQgZXhwbGljaXQgbnVtYmVyIHJ1bGVz
CisgKiBUaGVyZSBhcmUgdHdvCisgKiB7QGxpbmsgaHR0cDovL3VuaWNvZGUub3JnL3JlcG9zL2Ns
ZHItdG1wL3RydW5rL2RpZmYvc3VwcGxlbWVudGFsL2xhbmd1YWdlX3BsdXJhbF9ydWxlcy5odG1s
CisgKiBwbHVyYWwgY2F0ZWdvcmllc30gaW4gQW5ndWxhcidzIGRlZmF1bHQgZW4tVVMgbG9jYWxl
OiAib25lIiBhbmQgIm90aGVyIi4KKyAqCisgKiBXaGlsZSBhIHB1cmFsIGNhdGVnb3J5IG1heSBt
YXRjaCBtYW55IG51bWJlcnMgKGZvciBleGFtcGxlLCBpbiBlbi1VUyBsb2NhbGUsICJvdGhlciIg
Y2FuIG1hdGNoCisgKiBhbnkgbnVtYmVyIHRoYXQgaXMgbm90IDEpLCBhbiBleHBsaWNpdCBudW1i
ZXIgcnVsZSBjYW4gb25seSBtYXRjaCBvbmUgbnVtYmVyLiBGb3IgZXhhbXBsZSwgdGhlCisgKiBl
eHBsaWNpdCBudW1iZXIgcnVsZSBmb3IgIjMiIG1hdGNoZXMgdGhlIG51bWJlciAzLiBZb3Ugd2ls
bCBzZWUgdGhlIHVzZSBvZiBwbHVyYWwgY2F0ZWdvcmllcworICogYW5kIGV4cGxpY2l0IG51bWJl
ciBydWxlcyB0aHJvdWdob3V0IGxhdGVyIHBhcnRzIG9mIHRoaXMgZG9jdW1lbnRhdGlvbi4KKyAq
CisgKiAjIENvbmZpZ3VyaW5nIG5nUGx1cmFsaXplCisgKiBZb3UgY29uZmlndXJlIG5nUGx1cmFs
aXplIGJ5IHByb3ZpZGluZyAyIGF0dHJpYnV0ZXM6IGBjb3VudGAgYW5kIGB3aGVuYC4KKyAqIFlv
dSBjYW4gYWxzbyBwcm92aWRlIGFuIG9wdGlvbmFsIGF0dHJpYnV0ZSwgYG9mZnNldGAuCisgKgor
ICogVGhlIHZhbHVlIG9mIHRoZSBgY291bnRgIGF0dHJpYnV0ZSBjYW4gYmUgZWl0aGVyIGEgc3Ry
aW5nIG9yIGFuIHtAbGluayBndWlkZS9leHByZXNzaW9uCisgKiBBbmd1bGFyIGV4cHJlc3Npb259
OyB0aGVzZSBhcmUgZXZhbHVhdGVkIG9uIHRoZSBjdXJyZW50IHNjb3BlIGZvciBpdHMgYm91bmQg
dmFsdWUuCisgKgorICogVGhlIGB3aGVuYCBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBtYXBwaW5n
cyBiZXR3ZWVuIHBsdXJhbCBjYXRlZ29yaWVzIGFuZCB0aGUgYWN0dWFsCisgKiBzdHJpbmcgdG8g
YmUgZGlzcGxheWVkLiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBzaG91bGQgYmUgYSBKU09O
IG9iamVjdCBzbyB0aGF0IEFuZ3VsYXIKKyAqIGNhbiBpbnRlcnByZXQgaXQgY29ycmVjdGx5Lgor
ICoKKyAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gY29uZmlndXJlIG5nUGx1
cmFsaXplOgorICoKKyAqIDxwcmU+CisgKiA8bmctcGx1cmFsaXplIGNvdW50PSJwZXJzb25Db3Vu
dCIKKyAgICAgICAgICAgICAgICAgd2hlbj0ieycwJzogJ05vYm9keSBpcyB2aWV3aW5nLicsCisg
KiAgICAgICAgICAgICAgICAgICAgICAnb25lJzogJzEgcGVyc29uIGlzIHZpZXdpbmcuJywKKyAq
ICAgICAgICAgICAgICAgICAgICAgICdvdGhlcic6ICd7fSBwZW9wbGUgYXJlIHZpZXdpbmcuJ30i
PgorICogPC9uZy1wbHVyYWxpemU+CisgKjwvcHJlPgorICoKKyAqIEluIHRoZSBleGFtcGxlLCBg
IjA6IE5vYm9keSBpcyB2aWV3aW5nLiJgIGlzIGFuIGV4cGxpY2l0IG51bWJlciBydWxlLiBJZiB5
b3UgZGlkIG5vdAorICogc3BlY2lmeSB0aGlzIHJ1bGUsIDAgd291bGQgYmUgbWF0Y2hlZCB0byB0
aGUgIm90aGVyIiBjYXRlZ29yeSBhbmQgIjAgcGVvcGxlIGFyZSB2aWV3aW5nIgorICogd291bGQg
YmUgc2hvd24gaW5zdGVhZCBvZiAiTm9ib2R5IGlzIHZpZXdpbmciLiBZb3UgY2FuIHNwZWNpZnkg
YW4gZXhwbGljaXQgbnVtYmVyIHJ1bGUgZm9yCisgKiBvdGhlciBudW1iZXJzLCBmb3IgZXhhbXBs
ZSAxMiwgc28gdGhhdCBpbnN0ZWFkIG9mIHNob3dpbmcgIjEyIHBlb3BsZSBhcmUgdmlld2luZyIs
IHlvdSBjYW4KKyAqIHNob3cgImEgZG96ZW4gcGVvcGxlIGFyZSB2aWV3aW5nIi4KKyAqCisgKiBZ
b3UgY2FuIHVzZSBhIHNldCBvZiBjbG9zZWQgYnJhY2VzKGB7fWApIGFzIGEgcGxhY2Vob2xkZXIg
Zm9yIHRoZSBudW1iZXIgdGhhdCB5b3Ugd2FudCBzdWJzdGl0dXRlZAorICogaW50byBwbHVyYWxp
emVkIHN0cmluZ3MuIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCBBbmd1bGFyIHdpbGwgcmVwbGFj
ZSBge31gIHdpdGgKKyAqIDxzcGFuIG5nLW5vbi1iaW5kYWJsZT5ge3twZXJzb25Db3VudH19YDwv
c3Bhbj4uIFRoZSBjbG9zZWQgYnJhY2VzIGB7fWAgaXMgYSBwbGFjZWhvbGRlcgorICogZm9yIDxz
cGFuIG5nLW5vbi1iaW5kYWJsZT57e251bWJlckV4cHJlc3Npb259fTwvc3Bhbj4uCisgKgorICog
IyBDb25maWd1cmluZyBuZ1BsdXJhbGl6ZSB3aXRoIG9mZnNldAorICogVGhlIGBvZmZzZXRgIGF0
dHJpYnV0ZSBhbGxvd3MgZnVydGhlciBjdXN0b21pemF0aW9uIG9mIHBsdXJhbGl6ZWQgdGV4dCwg
d2hpY2ggY2FuIHJlc3VsdCBpbgorICogYSBiZXR0ZXIgdXNlciBleHBlcmllbmNlLiBGb3IgZXhh
bXBsZSwgaW5zdGVhZCBvZiB0aGUgbWVzc2FnZSAiNCBwZW9wbGUgYXJlIHZpZXdpbmcgdGhpcyBk
b2N1bWVudCIsCisgKiB5b3UgbWlnaHQgZGlzcGxheSAiSm9obiwgS2F0ZSBhbmQgMiBvdGhlcnMg
YXJlIHZpZXdpbmcgdGhpcyBkb2N1bWVudCIuCisgKiBUaGUgb2Zmc2V0IGF0dHJpYnV0ZSBhbGxv
d3MgeW91IHRvIG9mZnNldCBhIG51bWJlciBieSBhbnkgZGVzaXJlZCB2YWx1ZS4KKyAqIExldCdz
IHRha2UgYSBsb29rIGF0IGFuIGV4YW1wbGU6CisgKgorICogPHByZT4KKyAqIDxuZy1wbHVyYWxp
emUgY291bnQ9InBlcnNvbkNvdW50IiBvZmZzZXQ9MgorICogICAgICAgICAgICAgICB3aGVuPSJ7
JzAnOiAnTm9ib2R5IGlzIHZpZXdpbmcuJywKKyAqICAgICAgICAgICAgICAgICAgICAgICcxJzog
J3t7cGVyc29uMX19IGlzIHZpZXdpbmcuJywKKyAqICAgICAgICAgICAgICAgICAgICAgICcyJzog
J3t7cGVyc29uMX19IGFuZCB7e3BlcnNvbjJ9fSBhcmUgdmlld2luZy4nLAorICogICAgICAgICAg
ICAgICAgICAgICAgJ29uZSc6ICd7e3BlcnNvbjF9fSwge3twZXJzb24yfX0gYW5kIG9uZSBvdGhl
ciBwZXJzb24gYXJlIHZpZXdpbmcuJywKKyAqICAgICAgICAgICAgICAgICAgICAgICdvdGhlcic6
ICd7e3BlcnNvbjF9fSwge3twZXJzb24yfX0gYW5kIHt9IG90aGVyIHBlb3BsZSBhcmUgdmlld2lu
Zy4nfSI+CisgKiA8L25nLXBsdXJhbGl6ZT4KKyAqIDwvcHJlPgorICoKKyAqIE5vdGljZSB0aGF0
IHdlIGFyZSBzdGlsbCB1c2luZyB0d28gcGx1cmFsIGNhdGVnb3JpZXMob25lLCBvdGhlciksIGJ1
dCB3ZSBhZGRlZAorICogdGhyZWUgZXhwbGljaXQgbnVtYmVyIHJ1bGVzIDAsIDEgYW5kIDIuCisg
KiBXaGVuIG9uZSBwZXJzb24sIHBlcmhhcHMgSm9obiwgdmlld3MgdGhlIGRvY3VtZW50LCAiSm9o
biBpcyB2aWV3aW5nIiB3aWxsIGJlIHNob3duLgorICogV2hlbiB0aHJlZSBwZW9wbGUgdmlldyB0
aGUgZG9jdW1lbnQsIG5vIGV4cGxpY2l0IG51bWJlciBydWxlIGlzIGZvdW5kLCBzbworICogYW4g
b2Zmc2V0IG9mIDIgaXMgdGFrZW4gb2ZmIDMsIGFuZCBBbmd1bGFyIHVzZXMgMSB0byBkZWNpZGUg
dGhlIHBsdXJhbCBjYXRlZ29yeS4KKyAqIEluIHRoaXMgY2FzZSwgcGx1cmFsIGNhdGVnb3J5ICdv
bmUnIGlzIG1hdGNoZWQgYW5kICJKb2huLCBNYXJyeSBhbmQgb25lIG90aGVyIHBlcnNvbiBhcmUg
dmlld2luZyIKKyAqIGlzIHNob3duLgorICoKKyAqIE5vdGUgdGhhdCB3aGVuIHlvdSBzcGVjaWZ5
IG9mZnNldHMsIHlvdSBtdXN0IHByb3ZpZGUgZXhwbGljaXQgbnVtYmVyIHJ1bGVzIGZvcgorICog
bnVtYmVycyBmcm9tIDAgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgb2Zmc2V0LiBJZiB5b3UgdXNl
IGFuIG9mZnNldCBvZiAzLCBmb3IgZXhhbXBsZSwKKyAqIHlvdSBtdXN0IHByb3ZpZGUgZXhwbGlj
aXQgbnVtYmVyIHJ1bGVzIGZvciAwLCAxLCAyIGFuZCAzLiBZb3UgbXVzdCBhbHNvIHByb3ZpZGUg
cGx1cmFsIHN0cmluZ3MgZm9yCisgKiBwbHVyYWwgY2F0ZWdvcmllcyAib25lIiBhbmQgIm90aGVy
Ii4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ3xleHByZXNzaW9ufSBjb3VudCBUaGUgdmFyaWFibGUg
dG8gYmUgYm91bmRlZCB0by4KKyAqIEBwYXJhbSB7c3RyaW5nfSB3aGVuIFRoZSBtYXBwaW5nIGJl
dHdlZW4gcGx1cmFsIGNhdGVnb3J5IHRvIGl0cyBjb3JyZXNwb2Rpbmcgc3RyaW5ncy4KKyAqIEBw
YXJhbSB7bnVtYmVyPX0gb2Zmc2V0IE9mZnNldCB0byBkZWR1Y3QgZnJvbSB0aGUgdG90YWwgbnVt
YmVyLgorICoKKyAqIEBleGFtcGxlCisgICAgPGRvYzpleGFtcGxlPgorICAgICAgPGRvYzpzb3Vy
Y2U+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsK
KyAgICAgICAgICAgICRzY29wZS5wZXJzb24xID0gJ0lnb3InOworICAgICAgICAgICAgJHNjb3Bl
LnBlcnNvbjIgPSAnTWlza28nOworICAgICAgICAgICAgJHNjb3BlLnBlcnNvbkNvdW50ID0gMTsK
KyAgICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICA8ZGl2IG5nLWNvbnRyb2xs
ZXI9IkN0cmwiPgorICAgICAgICAgIFBlcnNvbiAxOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2Rl
bD0icGVyc29uMSIgdmFsdWU9Iklnb3IiIC8+PGJyLz4KKyAgICAgICAgICBQZXJzb24gMjo8aW5w
dXQgdHlwZT0idGV4dCIgbmctbW9kZWw9InBlcnNvbjIiIHZhbHVlPSJNaXNrbyIgLz48YnIvPgor
ICAgICAgICAgIE51bWJlciBvZiBQZW9wbGU6PGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJw
ZXJzb25Db3VudCIgdmFsdWU9IjEiIC8+PGJyLz4KKworICAgICAgICAgIDwhLS0tIEV4YW1wbGUg
d2l0aCBzaW1wbGUgcGx1cmFsaXphdGlvbiBydWxlcyBmb3IgZW4gbG9jYWxlIC0tLT4KKyAgICAg
ICAgICBXaXRob3V0IE9mZnNldDoKKyAgICAgICAgICA8bmctcGx1cmFsaXplIGNvdW50PSJwZXJz
b25Db3VudCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoZW49InsnMCc6ICdOb2JvZHkgaXMg
dmlld2luZy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmUnOiAnMSBwZXJz
b24gaXMgdmlld2luZy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdGhlcic6
ICd7fSBwZW9wbGUgYXJlIHZpZXdpbmcuJ30iPgorICAgICAgICAgIDwvbmctcGx1cmFsaXplPjxi
cj4KKworICAgICAgICAgIDwhLS0tIEV4YW1wbGUgd2l0aCBvZmZzZXQgLS0tPgorICAgICAgICAg
IFdpdGggT2Zmc2V0KDIpOgorICAgICAgICAgIDxuZy1wbHVyYWxpemUgY291bnQ9InBlcnNvbkNv
dW50IiBvZmZzZXQ9MgorICAgICAgICAgICAgICAgICAgICAgICAgd2hlbj0ieycwJzogJ05vYm9k
eSBpcyB2aWV3aW5nLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEnOiAne3tw
ZXJzb24xfX0gaXMgdmlld2luZy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcy
JzogJ3t7cGVyc29uMX19IGFuZCB7e3BlcnNvbjJ9fSBhcmUgdmlld2luZy4nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdvbmUnOiAne3twZXJzb24xfX0sIHt7cGVyc29uMn19IGFu
ZCBvbmUgb3RoZXIgcGVyc29uIGFyZSB2aWV3aW5nLicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ290aGVyJzogJ3t7cGVyc29uMX19LCB7e3BlcnNvbjJ9fSBhbmQge30gb3RoZXIg
cGVvcGxlIGFyZSB2aWV3aW5nLid9Ij4KKyAgICAgICAgICA8L25nLXBsdXJhbGl6ZT4KKyAgICAg
ICAgPC9kaXY+CisgICAgICA8L2RvYzpzb3VyY2U+CisgICAgICA8ZG9jOnNjZW5hcmlvPgorICAg
ICAgICBpdCgnc2hvdWxkIHNob3cgY29ycmVjdCBwbHVyYWxpemVkIHN0cmluZycsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBuZy1wbHVy
YWxpemU6Zmlyc3QnKS50ZXh0KCkpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9CZSgnMSBwZXJzb24gaXMgdmlld2luZy4nKTsKKyAgICAgICAgICBleHBl
Y3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXplOmxhc3QnKS50ZXh0KCkp
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9CZSgn
SWdvciBpcyB2aWV3aW5nLicpOworCisgICAgICAgICAgdXNpbmcoJy5kb2MtZXhhbXBsZS1saXZl
JykuaW5wdXQoJ3BlcnNvbkNvdW50JykuZW50ZXIoJzAnKTsKKyAgICAgICAgICBleHBlY3QoZWxl
bWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXplOmZpcnN0JykudGV4dCgpKS4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9CZSgnTm9ib2R5
IGlzIHZpZXdpbmcuJyk7CisgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1s
aXZlIG5nLXBsdXJhbGl6ZTpsYXN0JykudGV4dCgpKS4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b0JlKCdOb2JvZHkgaXMgdmlld2luZy4nKTsKKworICAg
ICAgICAgIHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmlucHV0KCdwZXJzb25Db3VudCcpLmVu
dGVyKCcyJyk7CisgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIG5n
LXBsdXJhbGl6ZTpmaXJzdCcpLnRleHQoKSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRvQmUoJzIgcGVvcGxlIGFyZSB2aWV3aW5nLicpOworICAgICAgICAg
IGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBuZy1wbHVyYWxpemU6bGFzdCcpLnRl
eHQoKSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0JlKCdJZ29yIGFuZCBNaXNr
byBhcmUgdmlld2luZy4nKTsKKworICAgICAgICAgIHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScp
LmlucHV0KCdwZXJzb25Db3VudCcpLmVudGVyKCczJyk7CisgICAgICAgICAgZXhwZWN0KGVsZW1l
bnQoJy5kb2MtZXhhbXBsZS1saXZlIG5nLXBsdXJhbGl6ZTpmaXJzdCcpLnRleHQoKSkuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvQmUoJzMgcGVvcGxlIGFy
ZSB2aWV3aW5nLicpOworICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2
ZSBuZy1wbHVyYWxpemU6bGFzdCcpLnRleHQoKSkuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b0JlKCdJZ29yLCBNaXNrbyBhbmQgb25lIG90aGVyIHBlcnNvbiBhcmUgdmlld2luZy4n
KTsKKworICAgICAgICAgIHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmlucHV0KCdwZXJzb25D
b3VudCcpLmVudGVyKCc0Jyk7CisgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBs
ZS1saXZlIG5nLXBsdXJhbGl6ZTpmaXJzdCcpLnRleHQoKSkuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvQmUoJzQgcGVvcGxlIGFyZSB2aWV3aW5nLicpOwor
ICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBuZy1wbHVyYWxpemU6
bGFzdCcpLnRleHQoKSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0JlKCdJZ29y
LCBNaXNrbyBhbmQgMiBvdGhlciBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7CisgICAgICAgIH0pOwor
CisgICAgICAgIGl0KCdzaG91bGQgc2hvdyBkYXRhLWJpbmRlZCBuYW1lcycsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgIHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmlucHV0KCdwZXJzb25Db3Vu
dCcpLmVudGVyKCc0Jyk7CisgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1s
aXZlIG5nLXBsdXJhbGl6ZTpsYXN0JykudGV4dCgpKS4KKyAgICAgICAgICAgICAgdG9CZSgnSWdv
ciwgTWlza28gYW5kIDIgb3RoZXIgcGVvcGxlIGFyZSB2aWV3aW5nLicpOworCisgICAgICAgICAg
dXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJykuaW5wdXQoJ3BlcnNvbjEnKS5lbnRlcignRGknKTsK
KyAgICAgICAgICB1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5pbnB1dCgncGVyc29uMicpLmVu
dGVyKCdWb2p0YScpOworICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2
ZSBuZy1wbHVyYWxpemU6bGFzdCcpLnRleHQoKSkuCisgICAgICAgICAgICAgIHRvQmUoJ0RpLCBW
b2p0YSBhbmQgMiBvdGhlciBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7CisgICAgICAgIH0pOworICAg
ICAgPC9kb2M6c2NlbmFyaW8+CisgICAgPC9kb2M6ZXhhbXBsZT4KKyAqLwordmFyIG5nUGx1cmFs
aXplRGlyZWN0aXZlID0gWyckbG9jYWxlJywgJyRpbnRlcnBvbGF0ZScsIGZ1bmN0aW9uKCRsb2Nh
bGUsICRpbnRlcnBvbGF0ZSkgeworICB2YXIgQlJBQ0UgPSAve30vZzsKKyAgcmV0dXJuIHsKKyAg
ICByZXN0cmljdDogJ0VBJywKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0
cikgeworICAgICAgdmFyIG51bWJlckV4cCA9IGF0dHIuY291bnQsCisgICAgICAgICAgd2hlbkV4
cCA9IGVsZW1lbnQuYXR0cihhdHRyLiRhdHRyLndoZW4pLCAvLyB0aGlzIGlzIGJlY2F1c2Ugd2Ug
aGF2ZSB7e319IGluIGF0dHJzCisgICAgICAgICAgb2Zmc2V0ID0gYXR0ci5vZmZzZXQgfHwgMCwK
KyAgICAgICAgICB3aGVucyA9IHNjb3BlLiRldmFsKHdoZW5FeHApLAorICAgICAgICAgIHdoZW5z
RXhwRm5zID0ge30sCisgICAgICAgICAgc3RhcnRTeW1ib2wgPSAkaW50ZXJwb2xhdGUuc3RhcnRT
eW1ib2woKSwKKyAgICAgICAgICBlbmRTeW1ib2wgPSAkaW50ZXJwb2xhdGUuZW5kU3ltYm9sKCk7
CisKKyAgICAgIGZvckVhY2god2hlbnMsIGZ1bmN0aW9uKGV4cHJlc3Npb24sIGtleSkgeworICAg
ICAgICB3aGVuc0V4cEZuc1trZXldID0KKyAgICAgICAgICAkaW50ZXJwb2xhdGUoZXhwcmVzc2lv
bi5yZXBsYWNlKEJSQUNFLCBzdGFydFN5bWJvbCArIG51bWJlckV4cCArICctJyArCisgICAgICAg
ICAgICBvZmZzZXQgKyBlbmRTeW1ib2wpKTsKKyAgICAgIH0pOworCisgICAgICBzY29wZS4kd2F0
Y2goZnVuY3Rpb24gbmdQbHVyYWxpemVXYXRjaCgpIHsKKyAgICAgICAgdmFyIHZhbHVlID0gcGFy
c2VGbG9hdChzY29wZS4kZXZhbChudW1iZXJFeHApKTsKKworICAgICAgICBpZiAoIWlzTmFOKHZh
bHVlKSkgeworICAgICAgICAgIC8vaWYgZXhwbGljaXQgbnVtYmVyIHJ1bGUgc3VjaCBhcyAxLCAy
LCAzLi4uIGlzIGRlZmluZWQsIGp1c3QgdXNlIGl0LiBPdGhlcndpc2UsCisgICAgICAgICAgLy9j
aGVjayBpdCBhZ2FpbnN0IHBsdXJhbGl6YXRpb24gcnVsZXMgaW4gJGxvY2FsZSBzZXJ2aWNlCisg
ICAgICAgICAgaWYgKCEodmFsdWUgaW4gd2hlbnMpKSB2YWx1ZSA9ICRsb2NhbGUucGx1cmFsQ2F0
KHZhbHVlIC0gb2Zmc2V0KTsKKyAgICAgICAgICAgcmV0dXJuIHdoZW5zRXhwRm5zW3ZhbHVlXShz
Y29wZSwgZWxlbWVudCwgdHJ1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJu
ICcnOworICAgICAgICB9CisgICAgICB9LCBmdW5jdGlvbiBuZ1BsdXJhbGl6ZVdhdGNoQWN0aW9u
KG5ld1ZhbCkgeworICAgICAgICBlbGVtZW50LnRleHQobmV3VmFsKTsKKyAgICAgIH0pOworICAg
IH0KKyAgfTsKK31dOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRp
cmVjdGl2ZTpuZ1JlcGVhdAorICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIGBuZ1JlcGVhdGAg
ZGlyZWN0aXZlIGluc3RhbnRpYXRlcyBhIHRlbXBsYXRlIG9uY2UgcGVyIGl0ZW0gZnJvbSBhIGNv
bGxlY3Rpb24uIEVhY2ggdGVtcGxhdGUKKyAqIGluc3RhbmNlIGdldHMgaXRzIG93biBzY29wZSwg
d2hlcmUgdGhlIGdpdmVuIGxvb3AgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGNvbGxl
Y3Rpb24gaXRlbSwKKyAqIGFuZCBgJGluZGV4YCBpcyBzZXQgdG8gdGhlIGl0ZW0gaW5kZXggb3Ig
a2V5LgorICoKKyAqIFNwZWNpYWwgcHJvcGVydGllcyBhcmUgZXhwb3NlZCBvbiB0aGUgbG9jYWwg
c2NvcGUgb2YgZWFjaCB0ZW1wbGF0ZSBpbnN0YW5jZSwgaW5jbHVkaW5nOgorICoKKyAqICAgKiBg
JGluZGV4YCDigJMgYHtudW1iZXJ9YCDigJMgaXRlcmF0b3Igb2Zmc2V0IG9mIHRoZSByZXBlYXRl
ZCBlbGVtZW50ICgwLi5sZW5ndGgtMSkKKyAqICAgKiBgJGZpcnN0YCDigJMgYHtib29sZWFufWAg
4oCTIHRydWUgaWYgdGhlIHJlcGVhdGVkIGVsZW1lbnQgaXMgZmlyc3QgaW4gdGhlIGl0ZXJhdG9y
LgorICogICAqIGAkbWlkZGxlYCDigJMgYHtib29sZWFufWAg4oCTIHRydWUgaWYgdGhlIHJlcGVh
dGVkIGVsZW1lbnQgaXMgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIGxhc3QgaW4gdGhlIGl0ZXJhdG9y
LgorICogICAqIGAkbGFzdGAg4oCTIGB7Ym9vbGVhbn1gIOKAkyB0cnVlIGlmIHRoZSByZXBlYXRl
ZCBlbGVtZW50IGlzIGxhc3QgaW4gdGhlIGl0ZXJhdG9yLgorICoKKyAqCisgKiBAZWxlbWVudCBB
TlkKKyAqIEBzY29wZQorICogQHByaW9yaXR5IDEwMDAKKyAqIEBwYXJhbSB7cmVwZWF0X2V4cHJl
c3Npb259IG5nUmVwZWF0IFRoZSBleHByZXNzaW9uIGluZGljYXRpbmcgaG93IHRvIGVudW1lcmF0
ZSBhIGNvbGxlY3Rpb24uIFR3bworICogICBmb3JtYXRzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVk
OgorICoKKyAqICAgKiBgdmFyaWFibGUgaW4gZXhwcmVzc2lvbmAg4oCTIHdoZXJlIHZhcmlhYmxl
IGlzIHRoZSB1c2VyIGRlZmluZWQgbG9vcCB2YXJpYWJsZSBhbmQgYGV4cHJlc3Npb25gCisgKiAg
ICAgaXMgYSBzY29wZSBleHByZXNzaW9uIGdpdmluZyB0aGUgY29sbGVjdGlvbiB0byBlbnVtZXJh
dGUuCisgKgorICogICAgIEZvciBleGFtcGxlOiBgdHJhY2sgaW4gY2QudHJhY2tzYC4KKyAqCisg
KiAgICogYChrZXksIHZhbHVlKSBpbiBleHByZXNzaW9uYCDigJMgd2hlcmUgYGtleWAgYW5kIGB2
YWx1ZWAgY2FuIGJlIGFueSB1c2VyIGRlZmluZWQgaWRlbnRpZmllcnMsCisgKiAgICAgYW5kIGBl
eHByZXNzaW9uYCBpcyB0aGUgc2NvcGUgZXhwcmVzc2lvbiBnaXZpbmcgdGhlIGNvbGxlY3Rpb24g
dG8gZW51bWVyYXRlLgorICoKKyAqICAgICBGb3IgZXhhbXBsZTogYChuYW1lLCBhZ2UpIGluIHsn
YWRhbSc6MTAsICdhbWFsaWUnOjEyfWAuCisgKgorICogQGV4YW1wbGUKKyAqIFRoaXMgZXhhbXBs
ZSBpbml0aWFsaXplcyB0aGUgc2NvcGUgdG8gYSBsaXN0IG9mIG5hbWVzIGFuZAorICogdGhlbiB1
c2VzIGBuZ1JlcGVhdGAgdG8gZGlzcGxheSBldmVyeSBwZXJzb246CisgICAgPGRvYzpleGFtcGxl
PgorICAgICAgPGRvYzpzb3VyY2U+CisgICAgICAgIDxkaXYgbmctaW5pdD0iZnJpZW5kcyA9IFt7
bmFtZTonSm9obicsIGFnZToyNX0sIHtuYW1lOidNYXJ5JywgYWdlOjI4fV0iPgorICAgICAgICAg
IEkgaGF2ZSB7e2ZyaWVuZHMubGVuZ3RofX0gZnJpZW5kcy4gVGhleSBhcmU6CisgICAgICAgICAg
PHVsPgorICAgICAgICAgICAgPGxpIG5nLXJlcGVhdD0iZnJpZW5kIGluIGZyaWVuZHMiPgorICAg
ICAgICAgICAgICBbe3skaW5kZXggKyAxfX1dIHt7ZnJpZW5kLm5hbWV9fSB3aG8gaXMge3tmcmll
bmQuYWdlfX0geWVhcnMgb2xkLgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgor
ICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZG9jOnNvdXJjZT4KKyAgICAgIDxkb2M6c2NlbmFyaW8+
CisgICAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLXJlcGVhdCcsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICB2YXIgciA9IHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLnJlcGVhdGVyKCd1bCBs
aScpOworICAgICAgICAgICBleHBlY3Qoci5jb3VudCgpKS50b0JlKDIpOworICAgICAgICAgICBl
eHBlY3Qoci5yb3coMCkpLnRvRXF1YWwoWyIxIiwiSm9obiIsIjI1Il0pOworICAgICAgICAgICBl
eHBlY3Qoci5yb3coMSkpLnRvRXF1YWwoWyIyIiwiTWFyeSIsIjI4Il0pOworICAgICAgICAgfSk7
CisgICAgICA8L2RvYzpzY2VuYXJpbz4KKyAgICA8L2RvYzpleGFtcGxlPgorICovCit2YXIgbmdS
ZXBlYXREaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZSh7CisgIHRyYW5zY2x1ZGU6ICdlbGVtZW50JywK
KyAgcHJpb3JpdHk6IDEwMDAsCisgIHRlcm1pbmFsOiB0cnVlLAorICBjb21waWxlOiBmdW5jdGlv
bihlbGVtZW50LCBhdHRyLCBsaW5rZXIpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGl0
ZXJTdGFydEVsZW1lbnQsIGF0dHIpeworICAgICAgdmFyIGV4cHJlc3Npb24gPSBhdHRyLm5nUmVw
ZWF0OworICAgICAgdmFyIG1hdGNoID0gZXhwcmVzc2lvbi5tYXRjaCgvXlxzKiguKylccytpblxz
KyguKilccyokLyksCisgICAgICAgIGxocywgcmhzLCB2YWx1ZUlkZW50LCBrZXlJZGVudDsKKyAg
ICAgIGlmICghIG1hdGNoKSB7CisgICAgICAgIHRocm93IEVycm9yKCJFeHBlY3RlZCBuZ1JlcGVh
dCBpbiBmb3JtIG9mICdfaXRlbV8gaW4gX2NvbGxlY3Rpb25fJyBidXQgZ290ICciICsKKyAgICAg
ICAgICBleHByZXNzaW9uICsgIicuIik7CisgICAgICB9CisgICAgICBsaHMgPSBtYXRjaFsxXTsK
KyAgICAgIHJocyA9IG1hdGNoWzJdOworICAgICAgbWF0Y2ggPSBsaHMubWF0Y2goL14oPzooW1wk
XHddKyl8XCgoW1wkXHddKylccyosXHMqKFtcJFx3XSspXCkpJC8pOworICAgICAgaWYgKCFtYXRj
aCkgeworICAgICAgICB0aHJvdyBFcnJvcigiJ2l0ZW0nIGluICdpdGVtIGluIGNvbGxlY3Rpb24n
IHNob3VsZCBiZSBpZGVudGlmaWVyIG9yIChrZXksIHZhbHVlKSBidXQgZ290ICciICsKKyAgICAg
ICAgICAgIGxocyArICInLiIpOworICAgICAgfQorICAgICAgdmFsdWVJZGVudCA9IG1hdGNoWzNd
IHx8IG1hdGNoWzFdOworICAgICAga2V5SWRlbnQgPSBtYXRjaFsyXTsKKworICAgICAgLy8gU3Rv
cmUgYSBsaXN0IG9mIGVsZW1lbnRzIGZyb20gcHJldmlvdXMgcnVuLiBUaGlzIGlzIGEgaGFzaCB3
aGVyZSBrZXkgaXMgdGhlIGl0ZW0gZnJvbSB0aGUKKyAgICAgIC8vIGl0ZXJhdG9yLCBhbmQgdGhl
IHZhbHVlIGlzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBmb2xsb3dpbmcgcHJvcGVydGllcy4K
KyAgICAgIC8vICAgLSBzY29wZTogYm91bmQgc2NvcGUKKyAgICAgIC8vICAgLSBlbGVtZW50OiBw
cmV2aW91cyBlbGVtZW50LgorICAgICAgLy8gICAtIGluZGV4OiBwb3NpdGlvbgorICAgICAgLy8g
V2UgbmVlZCBhbiBhcnJheSBvZiB0aGVzZSBvYmplY3RzIHNpbmNlIHRoZSBzYW1lIG9iamVjdCBj
YW4gYmUgcmV0dXJuZWQgZnJvbSB0aGUgaXRlcmF0b3IuCisgICAgICAvLyBXZSBleHBlY3QgdGhp
cyB0byBiZSBhIHJhcmUgY2FzZS4KKyAgICAgIHZhciBsYXN0T3JkZXIgPSBuZXcgSGFzaFF1ZXVl
TWFwKCk7CisKKyAgICAgIHNjb3BlLiR3YXRjaChmdW5jdGlvbiBuZ1JlcGVhdFdhdGNoKHNjb3Bl
KXsKKyAgICAgICAgdmFyIGluZGV4LCBsZW5ndGgsCisgICAgICAgICAgICBjb2xsZWN0aW9uID0g
c2NvcGUuJGV2YWwocmhzKSwKKyAgICAgICAgICAgIGN1cnNvciA9IGl0ZXJTdGFydEVsZW1lbnQs
ICAgICAvLyBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBub2RlCisgICAgICAgICAgICAvLyBTYW1l
IGFzIGxhc3RPcmRlciBidXQgaXQgaGFzIHRoZSBjdXJyZW50IHN0YXRlLiBJdCB3aWxsIGJlY29t
ZSB0aGUKKyAgICAgICAgICAgIC8vIGxhc3RPcmRlciBvbiB0aGUgbmV4dCBpdGVyYXRpb24uCisg
ICAgICAgICAgICBuZXh0T3JkZXIgPSBuZXcgSGFzaFF1ZXVlTWFwKCksCisgICAgICAgICAgICBh
cnJheUJvdW5kLAorICAgICAgICAgICAgY2hpbGRTY29wZSwKKyAgICAgICAgICAgIGtleSwgdmFs
dWUsIC8vIGtleS92YWx1ZSBvZiBpdGVyYXRpb24KKyAgICAgICAgICAgIGFycmF5LAorICAgICAg
ICAgICAgbGFzdDsgICAgICAgLy8gbGFzdCBvYmplY3QgaW5mb3JtYXRpb24ge3Njb3BlLCBlbGVt
ZW50LCBpbmRleH0KKworCisKKyAgICAgICAgaWYgKCFpc0FycmF5KGNvbGxlY3Rpb24pKSB7Cisg
ICAgICAgICAgLy8gaWYgb2JqZWN0LCBleHRyYWN0IGtleXMsIHNvcnQgdGhlbSBhbmQgdXNlIHRv
IGRldGVybWluZSBvcmRlciBvZiBpdGVyYXRpb24gb3ZlciBvYmogcHJvcHMKKyAgICAgICAgICBh
cnJheSA9IFtdOworICAgICAgICAgIGZvcihrZXkgaW4gY29sbGVjdGlvbikgeworICAgICAgICAg
ICAgaWYgKGNvbGxlY3Rpb24uaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXkuY2hhckF0KDApICE9
ICckJykgeworICAgICAgICAgICAgICBhcnJheS5wdXNoKGtleSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgfQorICAgICAgICAgIGFycmF5LnNvcnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBhcnJheSA9IGNvbGxlY3Rpb24gfHwgW107CisgICAgICAgIH0KKworICAgICAgICBh
cnJheUJvdW5kID0gYXJyYXkubGVuZ3RoLTE7CisKKyAgICAgICAgLy8gd2UgYXJlIG5vdCB1c2lu
ZyBmb3JFYWNoIGZvciBwZXJmIHJlYXNvbnMgKHRyeWluZyB0byBhdm9pZCAjY2FsbCkKKyAgICAg
ICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICBrZXkgPSAoY29sbGVjdGlvbiA9PT0gYXJyYXkpID8gaW5k
ZXggOiBhcnJheVtpbmRleF07CisgICAgICAgICAgdmFsdWUgPSBjb2xsZWN0aW9uW2tleV07CisK
KyAgICAgICAgICBsYXN0ID0gbGFzdE9yZGVyLnNoaWZ0KHZhbHVlKTsKKworICAgICAgICAgIGlm
IChsYXN0KSB7CisgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGFscmVhZHkgc2VlbiB0aGlzIG9i
amVjdCwgdGhlbiB3ZSBuZWVkIHRvIHJldXNlIHRoZQorICAgICAgICAgICAgLy8gYXNzb2NpYXRl
ZCBzY29wZS9lbGVtZW50CisgICAgICAgICAgICBjaGlsZFNjb3BlID0gbGFzdC5zY29wZTsKKyAg
ICAgICAgICAgIG5leHRPcmRlci5wdXNoKHZhbHVlLCBsYXN0KTsKKworICAgICAgICAgICAgaWYg
KGluZGV4ID09PSBsYXN0LmluZGV4KSB7CisgICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcKKyAg
ICAgICAgICAgICAgY3Vyc29yID0gbGFzdC5lbGVtZW50OworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgaXRlbSB3aGljaCBnb3QgbW92ZWQKKyAgICAgICAg
ICAgICAgbGFzdC5pbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAvLyBUaGlzIG1heSBiZSBh
IG5vb3AsIGlmIHRoZSBlbGVtZW50IGlzIG5leHQsIGJ1dCBJIGRvbid0IGtub3cgb2YgYSBnb29k
IHdheSB0bworICAgICAgICAgICAgICAvLyBmaWd1cmUgdGhpcyBvdXQsICBzaW5jZSBpdCB3b3Vs
ZCByZXF1aXJlIGV4dHJhIERPTSBhY2Nlc3MsIHNvIGxldCdzIGp1c3QgaG9wZSB0aGF0CisgICAg
ICAgICAgICAgIC8vIHRoZSBicm93c2VycyByZWFsaXplcyB0aGF0IGl0IGlzIG5vb3AsIGFuZCB0
cmVhdHMgaXQgYXMgc3VjaC4KKyAgICAgICAgICAgICAgY3Vyc29yLmFmdGVyKGxhc3QuZWxlbWVu
dCk7CisgICAgICAgICAgICAgIGN1cnNvciA9IGxhc3QuZWxlbWVudDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gbmV3IGl0ZW0gd2hpY2ggd2UgZG9u
J3Qga25vdyBhYm91dAorICAgICAgICAgICAgY2hpbGRTY29wZSA9IHNjb3BlLiRuZXcoKTsKKyAg
ICAgICAgICB9CisKKyAgICAgICAgICBjaGlsZFNjb3BlW3ZhbHVlSWRlbnRdID0gdmFsdWU7Cisg
ICAgICAgICAgaWYgKGtleUlkZW50KSBjaGlsZFNjb3BlW2tleUlkZW50XSA9IGtleTsKKyAgICAg
ICAgICBjaGlsZFNjb3BlLiRpbmRleCA9IGluZGV4OworCisgICAgICAgICAgY2hpbGRTY29wZS4k
Zmlyc3QgPSAoaW5kZXggPT09IDApOworICAgICAgICAgIGNoaWxkU2NvcGUuJGxhc3QgPSAoaW5k
ZXggPT09IGFycmF5Qm91bmQpOworICAgICAgICAgIGNoaWxkU2NvcGUuJG1pZGRsZSA9ICEoY2hp
bGRTY29wZS4kZmlyc3QgfHwgY2hpbGRTY29wZS4kbGFzdCk7CisKKyAgICAgICAgICBpZiAoIWxh
c3QpIHsKKyAgICAgICAgICAgIGxpbmtlcihjaGlsZFNjb3BlLCBmdW5jdGlvbihjbG9uZSl7Cisg
ICAgICAgICAgICAgIGN1cnNvci5hZnRlcihjbG9uZSk7CisgICAgICAgICAgICAgIGxhc3QgPSB7
CisgICAgICAgICAgICAgICAgICBzY29wZTogY2hpbGRTY29wZSwKKyAgICAgICAgICAgICAgICAg
IGVsZW1lbnQ6IChjdXJzb3IgPSBjbG9uZSksCisgICAgICAgICAgICAgICAgICBpbmRleDogaW5k
ZXgKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICBuZXh0T3JkZXIucHVzaCh2YWx1
ZSwgbGFzdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvL3NocmluayBjaGlsZHJlbgorICAgICAgICBmb3IgKGtleSBpbiBsYXN0T3JkZXIpIHsK
KyAgICAgICAgICBpZiAobGFzdE9yZGVyLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAg
ICAgIGFycmF5ID0gbGFzdE9yZGVyW2tleV07CisgICAgICAgICAgICB3aGlsZShhcnJheS5sZW5n
dGgpIHsKKyAgICAgICAgICAgICAgdmFsdWUgPSBhcnJheS5wb3AoKTsKKyAgICAgICAgICAgICAg
dmFsdWUuZWxlbWVudC5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgdmFsdWUuc2NvcGUuJGRlc3Ry
b3koKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBs
YXN0T3JkZXIgPSBuZXh0T3JkZXI7CisgICAgICB9KTsKKyAgICB9OworICB9Cit9KTsKKworLyoq
CisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdTaG93CisgKgor
ICogQGRlc2NyaXB0aW9uCisgKiBUaGUgYG5nU2hvd2AgYW5kIGBuZ0hpZGVgIGRpcmVjdGl2ZXMg
c2hvdyBvciBoaWRlIGEgcG9ydGlvbiBvZiB0aGUgRE9NIHRyZWUgKEhUTUwpCisgKiBjb25kaXRp
b25hbGx5LgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ1No
b3cgSWYgdGhlIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGlzIHRydXRoeQor
ICogICAgIHRoZW4gdGhlIGVsZW1lbnQgaXMgc2hvd24gb3IgaGlkZGVuIHJlc3BlY3RpdmVseS4K
KyAqCisgKiBAZXhhbXBsZQorICAgPGRvYzpleGFtcGxlPgorICAgICA8ZG9jOnNvdXJjZT4KKyAg
ICAgICAgQ2xpY2sgbWU6IDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImNoZWNrZWQi
Pjxici8+CisgICAgICAgIFNob3c6IDxzcGFuIG5nLXNob3c9ImNoZWNrZWQiPkkgc2hvdyB1cCB3
aGVuIHlvdXIgY2hlY2tib3ggaXMgY2hlY2tlZC48L3NwYW4+IDxici8+CisgICAgICAgIEhpZGU6
IDxzcGFuIG5nLWhpZGU9ImNoZWNrZWQiPkkgaGlkZSB3aGVuIHlvdXIgY2hlY2tib3ggaXMgY2hl
Y2tlZC48L3NwYW4+CisgICAgIDwvZG9jOnNvdXJjZT4KKyAgICAgPGRvYzpzY2VuYXJpbz4KKyAg
ICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLXNob3cgLyBuZy1oaWRlJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgc3BhbjpmaXJzdDpoaWRk
ZW4nKS5jb3VudCgpKS50b0VxdWFsKDEpOworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2Mt
ZXhhbXBsZS1saXZlIHNwYW46bGFzdDp2aXNpYmxlJykuY291bnQoKSkudG9FcXVhbCgxKTsKKwor
ICAgICAgICAgaW5wdXQoJ2NoZWNrZWQnKS5jaGVjaygpOworCisgICAgICAgICBleHBlY3QoZWxl
bWVudCgnLmRvYy1leGFtcGxlLWxpdmUgc3BhbjpmaXJzdDp2aXNpYmxlJykuY291bnQoKSkudG9F
cXVhbCgxKTsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBzcGFu
Omxhc3Q6aGlkZGVuJykuY291bnQoKSkudG9FcXVhbCgxKTsKKyAgICAgICB9KTsKKyAgICAgPC9k
b2M6c2NlbmFyaW8+CisgICA8L2RvYzpleGFtcGxlPgorICovCisvL1RPRE8obWlza28pOiByZWZh
Y3RvciB0byByZW1vdmUgZWxlbWVudCBmcm9tIHRoZSBET00KK3ZhciBuZ1Nob3dEaXJlY3RpdmUg
PSBuZ0RpcmVjdGl2ZShmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cil7CisgIHNjb3BlLiR3
YXRjaChhdHRyLm5nU2hvdywgZnVuY3Rpb24gbmdTaG93V2F0Y2hBY3Rpb24odmFsdWUpeworICAg
IGVsZW1lbnQuY3NzKCdkaXNwbGF5JywgdG9Cb29sZWFuKHZhbHVlKSA/ICcnIDogJ25vbmUnKTsK
KyAgfSk7Cit9KTsKKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRp
cmVjdGl2ZTpuZ0hpZGUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgbmdIaWRlYCBhbmQg
YG5nU2hvd2AgZGlyZWN0aXZlcyBoaWRlIG9yIHNob3cgYSBwb3J0aW9uIG9mIHRoZSBET00gdHJl
ZSAoSFRNTCkKKyAqIGNvbmRpdGlvbmFsbHkuCisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAcGFy
YW0ge2V4cHJlc3Npb259IG5nSGlkZSBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhw
cmVzc2lvbn0gaXMgdHJ1dGh5IHRoZW4KKyAqICAgICB0aGUgZWxlbWVudCBpcyBzaG93biBvciBo
aWRkZW4gcmVzcGVjdGl2ZWx5LgorICoKKyAqIEBleGFtcGxlCisgICA8ZG9jOmV4YW1wbGU+Cisg
ICAgIDxkb2M6c291cmNlPgorICAgICAgICBDbGljayBtZTogPGlucHV0IHR5cGU9ImNoZWNrYm94
IiBuZy1tb2RlbD0iY2hlY2tlZCI+PGJyLz4KKyAgICAgICAgU2hvdzogPHNwYW4gbmctc2hvdz0i
Y2hlY2tlZCI+SSBzaG93IHVwIHdoZW4geW91IGNoZWNrYm94IGlzIGNoZWNrZWQ/PC9zcGFuPiA8
YnIvPgorICAgICAgICBIaWRlOiA8c3BhbiBuZy1oaWRlPSJjaGVja2VkIj5JIGhpZGUgd2hlbiB5
b3UgY2hlY2tib3ggaXMgY2hlY2tlZD88L3NwYW4+CisgICAgIDwvZG9jOnNvdXJjZT4KKyAgICAg
PGRvYzpzY2VuYXJpbz4KKyAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLXNob3cgLyBuZy1oaWRl
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxp
dmUgc3BhbjpmaXJzdDpoaWRkZW4nKS5jb3VudCgpKS50b0VxdWFsKDEpOworICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIHNwYW46bGFzdDp2aXNpYmxlJykuY291bnQo
KSkudG9FcXVhbCgxKTsKKworICAgICAgICAgaW5wdXQoJ2NoZWNrZWQnKS5jaGVjaygpOworCisg
ICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgc3BhbjpmaXJzdDp2aXNp
YmxlJykuY291bnQoKSkudG9FcXVhbCgxKTsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9j
LWV4YW1wbGUtbGl2ZSBzcGFuOmxhc3Q6aGlkZGVuJykuY291bnQoKSkudG9FcXVhbCgxKTsKKyAg
ICAgICB9KTsKKyAgICAgPC9kb2M6c2NlbmFyaW8+CisgICA8L2RvYzpleGFtcGxlPgorICovCisv
L1RPRE8obWlza28pOiByZWZhY3RvciB0byByZW1vdmUgZWxlbWVudCBmcm9tIHRoZSBET00KK3Zh
ciBuZ0hpZGVEaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZShmdW5jdGlvbihzY29wZSwgZWxlbWVudCwg
YXR0cil7CisgIHNjb3BlLiR3YXRjaChhdHRyLm5nSGlkZSwgZnVuY3Rpb24gbmdIaWRlV2F0Y2hB
Y3Rpb24odmFsdWUpeworICAgIGVsZW1lbnQuY3NzKCdkaXNwbGF5JywgdG9Cb29sZWFuKHZhbHVl
KSA/ICdub25lJyA6ICcnKTsKKyAgfSk7Cit9KTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZl
CisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdTdHlsZQorICoKKyAqIEBkZXNjcmlwdGlvbgorICog
VGhlIGBuZ1N0eWxlYCBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBzZXQgQ1NTIHN0eWxlIG9uIGFu
IEhUTUwgZWxlbWVudCBjb25kaXRpb25hbGx5LgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHBh
cmFtIHtleHByZXNzaW9ufSBuZ1N0eWxlIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Np
b259IHdoaWNoIGV2YWxzIHRvIGFuCisgKiAgICAgIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBDU1Mg
c3R5bGUgbmFtZXMgYW5kIHZhbHVlcyBhcmUgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9yIHRob3Nl
IENTUworICogICAgICBrZXlzLgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4KKyAgICAg
PGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZh
bHVlPSJzZXQiIG5nLWNsaWNrPSJteVN0eWxlPXtjb2xvcjoncmVkJ30iPgorICAgICAgICA8aW5w
dXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iY2xlYXIiIG5nLWNsaWNrPSJteVN0eWxlPXt9Ij4KKyAg
ICAgICAgPGJyLz4KKyAgICAgICAgPHNwYW4gbmctc3R5bGU9Im15U3R5bGUiPlNhbXBsZSBUZXh0
PC9zcGFuPgorICAgICAgICA8cHJlPm15U3R5bGU9e3tteVN0eWxlfX08L3ByZT4KKyAgICAgPC9m
aWxlPgorICAgICA8ZmlsZSBuYW1lPSJzdHlsZS5jc3MiPgorICAgICAgIHNwYW4geworICAgICAg
ICAgY29sb3I6IGJsYWNrOworICAgICAgIH0KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1l
PSJzY2VuYXJpby5qcyI+CisgICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1zdHlsZScsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIHNwYW4n
KS5jc3MoJ2NvbG9yJykpLnRvQmUoJ3JnYigwLCAwLCAwKScpOworICAgICAgICAgZWxlbWVudCgn
LmRvYy1leGFtcGxlLWxpdmUgOmJ1dHRvblt2YWx1ZT1zZXRdJykuY2xpY2soKTsKKyAgICAgICAg
IGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBzcGFuJykuY3NzKCdjb2xvcicpKS50
b0JlKCdyZ2IoMjU1LCAwLCAwKScpOworICAgICAgICAgZWxlbWVudCgnLmRvYy1leGFtcGxlLWxp
dmUgOmJ1dHRvblt2YWx1ZT1jbGVhcl0nKS5jbGljaygpOworICAgICAgICAgZXhwZWN0KGVsZW1l
bnQoJy5kb2MtZXhhbXBsZS1saXZlIHNwYW4nKS5jc3MoJ2NvbG9yJykpLnRvQmUoJ3JnYigwLCAw
LCAwKScpOworICAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KK3Zh
ciBuZ1N0eWxlRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQs
IGF0dHIpIHsKKyAgc2NvcGUuJHdhdGNoKGF0dHIubmdTdHlsZSwgZnVuY3Rpb24gbmdTdHlsZVdh
dGNoQWN0aW9uKG5ld1N0eWxlcywgb2xkU3R5bGVzKSB7CisgICAgaWYgKG9sZFN0eWxlcyAmJiAo
bmV3U3R5bGVzICE9PSBvbGRTdHlsZXMpKSB7CisgICAgICBmb3JFYWNoKG9sZFN0eWxlcywgZnVu
Y3Rpb24odmFsLCBzdHlsZSkgeyBlbGVtZW50LmNzcyhzdHlsZSwgJycpO30pOworICAgIH0KKyAg
ICBpZiAobmV3U3R5bGVzKSBlbGVtZW50LmNzcyhuZXdTdHlsZXMpOworICB9LCB0cnVlKTsKK30p
OworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ1N3
aXRjaAorICogQHJlc3RyaWN0IEVBCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBDb25kaXRpb25h
bGx5IGNoYW5nZSB0aGUgRE9NIHN0cnVjdHVyZS4KKyAqCisgKiBAdXNhZ2UKKyAqIDxBTlkgbmct
c3dpdGNoPSJleHByZXNzaW9uIj4KKyAqICAgPEFOWSBuZy1zd2l0Y2gtd2hlbj0ibWF0Y2hWYWx1
ZTEiPi4uLjwvQU5ZPgorICogICA8QU5ZIG5nLXN3aXRjaC13aGVuPSJtYXRjaFZhbHVlMiI+Li4u
PC9BTlk+CisgKiAgIC4uLgorICogICA8QU5ZIG5nLXN3aXRjaC1kZWZhdWx0Pi4uLjwvQU5ZPgor
ICogPC9BTlk+CisgKgorICogQHNjb3BlCisgKiBAcGFyYW0geyp9IG5nU3dpdGNofG9uIGV4cHJl
c3Npb24gdG8gbWF0Y2ggYWdhaW5zdCA8dHQ+bmctc3dpdGNoLXdoZW48L3R0Pi4KKyAqIEBwYXJh
bURlc2NyaXB0aW9uCisgKiBPbiBjaGlsZCBlbG1lbnRzIGFkZDoKKyAqCisgKiAqIGBuZ1N3aXRj
aFdoZW5gOiB0aGUgY2FzZSBzdGF0ZW1lbnQgdG8gbWF0Y2ggYWdhaW5zdC4gSWYgbWF0Y2ggdGhl
biB0aGlzCisgKiAgIGNhc2Ugd2lsbCBiZSBkaXNwbGF5ZWQuCisgKiAqIGBuZ1N3aXRjaERlZmF1
bHRgOiB0aGUgZGVmYXVsdCBjYXNlIHdoZW4gbm8gb3RoZXIgY2Fzc2VzIG1hdGNoLgorICoKKyAq
IEBleGFtcGxlCisgICAgPGRvYzpleGFtcGxlPgorICAgICAgPGRvYzpzb3VyY2U+CisgICAgICAg
IDxzY3JpcHQ+CisgICAgICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKKyAgICAgICAgICAg
ICRzY29wZS5pdGVtcyA9IFsnc2V0dGluZ3MnLCAnaG9tZScsICdvdGhlciddOworICAgICAgICAg
ICAgJHNjb3BlLnNlbGVjdGlvbiA9ICRzY29wZS5pdGVtc1swXTsKKyAgICAgICAgICB9CisgICAg
ICAgIDwvc2NyaXB0PgorICAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkN0cmwiPgorICAgICAg
ICAgIDxzZWxlY3QgbmctbW9kZWw9InNlbGVjdGlvbiIgbmctb3B0aW9ucz0iaXRlbSBmb3IgaXRl
bSBpbiBpdGVtcyI+CisgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgICAgPHR0PnNlbGVjdGlv
bj17e3NlbGVjdGlvbn19PC90dD4KKyAgICAgICAgICA8aHIvPgorICAgICAgICAgIDxkaXYgbmct
c3dpdGNoIG9uPSJzZWxlY3Rpb24iID4KKyAgICAgICAgICAgIDxkaXYgbmctc3dpdGNoLXdoZW49
InNldHRpbmdzIj5TZXR0aW5ncyBEaXY8L2Rpdj4KKyAgICAgICAgICAgIDxzcGFuIG5nLXN3aXRj
aC13aGVuPSJob21lIj5Ib21lIFNwYW48L3NwYW4+CisgICAgICAgICAgICA8c3BhbiBuZy1zd2l0
Y2gtZGVmYXVsdD5kZWZhdWx0PC9zcGFuPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rp
dj4KKyAgICAgIDwvZG9jOnNvdXJjZT4KKyAgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgIGl0
KCdzaG91bGQgc3RhcnQgaW4gc2V0dGluZ3MnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVj
dChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBbbmctc3dpdGNoXScpLnRleHQoKSkudG9NYXRj
aCgvU2V0dGluZ3MgRGl2Lyk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIGNoYW5n
ZSB0byBob21lJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBzZWxlY3QoJ3NlbGVjdGlvbicpLm9w
dGlvbignaG9tZScpOworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZl
IFtuZy1zd2l0Y2hdJykudGV4dCgpKS50b01hdGNoKC9Ib21lIFNwYW4vKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGl0KCdzaG91bGQgc2VsZWN0IGRlYWZhdWx0JywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICBzZWxlY3QoJ3NlbGVjdGlvbicpLm9wdGlvbignb3RoZXInKTsKKyAgICAgICAgIGV4cGVj
dChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBbbmctc3dpdGNoXScpLnRleHQoKSkudG9NYXRj
aCgvZGVmYXVsdC8pOworICAgICAgICB9KTsKKyAgICAgIDwvZG9jOnNjZW5hcmlvPgorICAgIDwv
ZG9jOmV4YW1wbGU+CisgKi8KK3ZhciBOR19TV0lUQ0ggPSAnbmctc3dpdGNoJzsKK3ZhciBuZ1N3
aXRjaERpcmVjdGl2ZSA9IHZhbHVlRm4oeworICByZXN0cmljdDogJ0VBJywKKyAgcmVxdWlyZTog
J25nU3dpdGNoJywKKyAgLy8gYXNrcyBmb3IgJHNjb3BlIHRvIGZvb2wgdGhlIEJDIGNvbnRyb2xs
ZXIgbW9kdWxlCisgIGNvbnRyb2xsZXI6IFsnJHNjb3BlJywgZnVuY3Rpb24gbmdTd2l0Y2hDb250
cm9sbGVyKCkgeworICAgIHRoaXMuY2FzZXMgPSB7fTsKKyAgfV0sCisgIGxpbms6IGZ1bmN0aW9u
KHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKSB7CisgICAgdmFyIHdhdGNoRXhwciA9IGF0dHIu
bmdTd2l0Y2ggfHwgYXR0ci5vbiwKKyAgICAgICAgc2VsZWN0ZWRUcmFuc2NsdWRlLAorICAgICAg
ICBzZWxlY3RlZEVsZW1lbnQsCisgICAgICAgIHNlbGVjdGVkU2NvcGU7CisKKyAgICBzY29wZS4k
d2F0Y2god2F0Y2hFeHByLCBmdW5jdGlvbiBuZ1N3aXRjaFdhdGNoQWN0aW9uKHZhbHVlKSB7Cisg
ICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50KSB7CisgICAgICAgIHNlbGVjdGVkU2NvcGUuJGRlc3Ry
b3koKTsKKyAgICAgICAgc2VsZWN0ZWRFbGVtZW50LnJlbW92ZSgpOworICAgICAgICBzZWxlY3Rl
ZEVsZW1lbnQgPSBzZWxlY3RlZFNjb3BlID0gbnVsbDsKKyAgICAgIH0KKyAgICAgIGlmICgoc2Vs
ZWN0ZWRUcmFuc2NsdWRlID0gY3RybC5jYXNlc1snIScgKyB2YWx1ZV0gfHwgY3RybC5jYXNlc1sn
PyddKSkgeworICAgICAgICBzY29wZS4kZXZhbChhdHRyLmNoYW5nZSk7CisgICAgICAgIHNlbGVj
dGVkU2NvcGUgPSBzY29wZS4kbmV3KCk7CisgICAgICAgIHNlbGVjdGVkVHJhbnNjbHVkZShzZWxl
Y3RlZFNjb3BlLCBmdW5jdGlvbihjYXNlRWxlbWVudCkgeworICAgICAgICAgIHNlbGVjdGVkRWxl
bWVudCA9IGNhc2VFbGVtZW50OworICAgICAgICAgIGVsZW1lbnQuYXBwZW5kKGNhc2VFbGVtZW50
KTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfSk7CisgIH0KK30pOworCit2YXIgbmdTd2l0
Y2hXaGVuRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoeworICB0cmFuc2NsdWRlOiAnZWxlbWVudCcs
CisgIHByaW9yaXR5OiA1MDAsCisgIHJlcXVpcmU6ICdebmdTd2l0Y2gnLAorICBjb21waWxlOiBm
dW5jdGlvbihlbGVtZW50LCBhdHRycywgdHJhbnNjbHVkZSkgeworICAgIHJldHVybiBmdW5jdGlv
bihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCkgeworICAgICAgY3RybC5jYXNlc1snIScgKyBh
dHRycy5uZ1N3aXRjaFdoZW5dID0gdHJhbnNjbHVkZTsKKyAgICB9OworICB9Cit9KTsKKwordmFy
IG5nU3dpdGNoRGVmYXVsdERpcmVjdGl2ZSA9IG5nRGlyZWN0aXZlKHsKKyAgdHJhbnNjbHVkZTog
J2VsZW1lbnQnLAorICBwcmlvcml0eTogNTAwLAorICByZXF1aXJlOiAnXm5nU3dpdGNoJywKKyAg
Y29tcGlsZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0cnMsIHRyYW5zY2x1ZGUpIHsKKyAgICByZXR1
cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpIHsKKyAgICAgIGN0cmwuY2Fz
ZXNbJz8nXSA9IHRyYW5zY2x1ZGU7CisgICAgfTsKKyAgfQorfSk7CisKKy8qKgorICogQG5nZG9j
IGRpcmVjdGl2ZQorICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nVHJhbnNjbHVkZQorICoKKyAqIEBk
ZXNjcmlwdGlvbgorICogSW5zZXJ0IHRoZSB0cmFuc2NsdWRlZCBET00gaGVyZS4KKyAqCisgKiBA
ZWxlbWVudCBBTlkKKyAqCisgKiBAZXhhbXBsZQorICAgPGRvYzpleGFtcGxlIG1vZHVsZT0idHJh
bnNjbHVkZSI+CisgICAgIDxkb2M6c291cmNlPgorICAgICAgIDxzY3JpcHQ+CisgICAgICAgICBm
dW5jdGlvbiBDdHJsKCRzY29wZSkgeworICAgICAgICAgICAkc2NvcGUudGl0bGUgPSAnTG9yZW0g
SXBzdW0nOworICAgICAgICAgICAkc2NvcGUudGV4dCA9ICdOZXF1ZSBwb3JybyBxdWlzcXVhbSBl
c3QgcXVpIGRvbG9yZW0gaXBzdW0gcXVpYSBkb2xvci4uLic7CisgICAgICAgICB9CisKKyAgICAg
ICAgIGFuZ3VsYXIubW9kdWxlKCd0cmFuc2NsdWRlJywgW10pCisgICAgICAgICAgLmRpcmVjdGl2
ZSgncGFuZScsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgIHJlc3RyaWN0OiAnRScsCisgICAgICAgICAgICAgICB0cmFuc2NsdWRlOiB0cnVlLAorICAg
ICAgICAgICAgICAgc2NvcGU6ICdpc29sYXRlJywKKyAgICAgICAgICAgICAgIGxvY2FsczogeyB0
aXRsZTonYmluZCcgfSwKKyAgICAgICAgICAgICAgIHRlbXBsYXRlOiAnPGRpdiBzdHlsZT0iYm9y
ZGVyOiAxcHggc29saWQgYmxhY2s7Ij4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICc8
ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBncmF5Ij57e3RpdGxlfX08L2Rpdj4nICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IG5nLXRyYW5zY2x1ZGU+PC9kaXY+JyArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicKKyAgICAgICAgICAgICB9OworICAgICAg
ICAgfSk7CisgICAgICAgPC9zY3JpcHQ+CisgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJDdHJs
Ij4KKyAgICAgICAgIDxpbnB1dCBuZy1tb2RlbD0idGl0bGUiPjxicj4KKyAgICAgICAgIDx0ZXh0
YXJlYSBuZy1tb2RlbD0idGV4dCI+PC90ZXh0YXJlYT4gPGJyLz4KKyAgICAgICAgIDxwYW5lIHRp
dGxlPSJ7e3RpdGxlfX0iPnt7dGV4dH19PC9wYW5lPgorICAgICAgIDwvZGl2PgorICAgICA8L2Rv
Yzpzb3VyY2U+CisgICAgIDxkb2M6c2NlbmFyaW8+CisgICAgICAgIGl0KCdzaG91bGQgaGF2ZSB0
cmFuc2NsdWRlZCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGlucHV0KCd0aXRsZScpLmVudGVy
KCdUSVRMRScpOworICAgICAgICAgIGlucHV0KCd0ZXh0JykuZW50ZXIoJ1RFWFQnKTsKKyAgICAg
ICAgICBleHBlY3QoYmluZGluZygndGl0bGUnKSkudG9FcXVhbCgnVElUTEUnKTsKKyAgICAgICAg
ICBleHBlY3QoYmluZGluZygndGV4dCcpKS50b0VxdWFsKCdURVhUJyk7CisgICAgICAgIH0pOwor
ICAgICA8L2RvYzpzY2VuYXJpbz4KKyAgIDwvZG9jOmV4YW1wbGU+CisgKgorICovCit2YXIgbmdU
cmFuc2NsdWRlRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoeworICBjb250cm9sbGVyOiBbJyR0cmFu
c2NsdWRlJywgJyRlbGVtZW50JywgZnVuY3Rpb24oJHRyYW5zY2x1ZGUsICRlbGVtZW50KSB7Cisg
ICAgJHRyYW5zY2x1ZGUoZnVuY3Rpb24oY2xvbmUpIHsKKyAgICAgICRlbGVtZW50LmFwcGVuZChj
bG9uZSk7CisgICAgfSk7CisgIH1dCit9KTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisg
KiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdWaWV3CisgKiBAcmVzdHJpY3QgRUNBCisgKgorICogQGRl
c2NyaXB0aW9uCisgKiAjIE92ZXJ2aWV3CisgKiBgbmdWaWV3YCBpcyBhIGRpcmVjdGl2ZSB0aGF0
IGNvbXBsZW1lbnRzIHRoZSB7QGxpbmsgbmcuJHJvdXRlICRyb3V0ZX0gc2VydmljZSBieQorICog
aW5jbHVkaW5nIHRoZSByZW5kZXJlZCB0ZW1wbGF0ZSBvZiB0aGUgY3VycmVudCByb3V0ZSBpbnRv
IHRoZSBtYWluIGxheW91dCAoYGluZGV4Lmh0bWxgKSBmaWxlLgorICogRXZlcnkgdGltZSB0aGUg
Y3VycmVudCByb3V0ZSBjaGFuZ2VzLCB0aGUgaW5jbHVkZWQgdmlldyBjaGFuZ2VzIHdpdGggaXQg
YWNjb3JkaW5nIHRvIHRoZQorICogY29uZmlndXJhdGlvbiBvZiB0aGUgYCRyb3V0ZWAgc2Vydmlj
ZS4KKyAqCisgKiBAc2NvcGUKKyAqIEBleGFtcGxlCisgICAgPGV4YW1wbGUgbW9kdWxlPSJuZ1Zp
ZXciPgorICAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgIDxkaXYgbmctY29u
dHJvbGxlcj0iTWFpbkNudGwiPgorICAgICAgICAgIENob29zZToKKyAgICAgICAgICA8YSBocmVm
PSJCb29rL01vYnkiPk1vYnk8L2E+IHwKKyAgICAgICAgICA8YSBocmVmPSJCb29rL01vYnkvY2gv
MSI+TW9ieTogQ2gxPC9hPiB8CisgICAgICAgICAgPGEgaHJlZj0iQm9vay9HYXRzYnkiPkdhdHNi
eTwvYT4gfAorICAgICAgICAgIDxhIGhyZWY9IkJvb2svR2F0c2J5L2NoLzQ/a2V5PXZhbHVlIj5H
YXRzYnk6IENoNDwvYT4gfAorICAgICAgICAgIDxhIGhyZWY9IkJvb2svU2NhcmxldCI+U2Nhcmxl
dCBMZXR0ZXI8L2E+PGJyLz4KKworICAgICAgICAgIDxkaXYgbmctdmlldz48L2Rpdj4KKyAgICAg
ICAgICA8aHIgLz4KKworICAgICAgICAgIDxwcmU+JGxvY2F0aW9uLnBhdGgoKSA9IHt7JGxvY2F0
aW9uLnBhdGgoKX19PC9wcmU+CisgICAgICAgICAgPHByZT4kcm91dGUuY3VycmVudC50ZW1wbGF0
ZVVybCA9IHt7JHJvdXRlLmN1cnJlbnQudGVtcGxhdGVVcmx9fTwvcHJlPgorICAgICAgICAgIDxw
cmU+JHJvdXRlLmN1cnJlbnQucGFyYW1zID0ge3skcm91dGUuY3VycmVudC5wYXJhbXN9fTwvcHJl
PgorICAgICAgICAgIDxwcmU+JHJvdXRlLmN1cnJlbnQuc2NvcGUubmFtZSA9IHt7JHJvdXRlLmN1
cnJlbnQuc2NvcGUubmFtZX19PC9wcmU+CisgICAgICAgICAgPHByZT4kcm91dGVQYXJhbXMgPSB7
eyRyb3V0ZVBhcmFtc319PC9wcmU+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9maWxlPgorCisg
ICAgICA8ZmlsZSBuYW1lPSJib29rLmh0bWwiPgorICAgICAgICBjb250cm9sbGVyOiB7e25hbWV9
fTxiciAvPgorICAgICAgICBCb29rIElkOiB7e3BhcmFtcy5ib29rSWR9fTxiciAvPgorICAgICAg
PC9maWxlPgorCisgICAgICA8ZmlsZSBuYW1lPSJjaGFwdGVyLmh0bWwiPgorICAgICAgICBjb250
cm9sbGVyOiB7e25hbWV9fTxiciAvPgorICAgICAgICBCb29rIElkOiB7e3BhcmFtcy5ib29rSWR9
fTxiciAvPgorICAgICAgICBDaGFwdGVyIElkOiB7e3BhcmFtcy5jaGFwdGVySWR9fQorICAgICAg
PC9maWxlPgorCisgICAgICA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgorICAgICAgICBhbmd1bGFy
Lm1vZHVsZSgnbmdWaWV3JywgW10sIGZ1bmN0aW9uKCRyb3V0ZVByb3ZpZGVyLCAkbG9jYXRpb25Q
cm92aWRlcikgeworICAgICAgICAgICRyb3V0ZVByb3ZpZGVyLndoZW4oJy9Cb29rLzpib29rSWQn
LCB7CisgICAgICAgICAgICB0ZW1wbGF0ZVVybDogJ2Jvb2suaHRtbCcsCisgICAgICAgICAgICBj
b250cm9sbGVyOiBCb29rQ250bAorICAgICAgICAgIH0pOworICAgICAgICAgICRyb3V0ZVByb3Zp
ZGVyLndoZW4oJy9Cb29rLzpib29rSWQvY2gvOmNoYXB0ZXJJZCcsIHsKKyAgICAgICAgICAgIHRl
bXBsYXRlVXJsOiAnY2hhcHRlci5odG1sJywKKyAgICAgICAgICAgIGNvbnRyb2xsZXI6IENoYXB0
ZXJDbnRsCisgICAgICAgICAgfSk7CisKKyAgICAgICAgICAvLyBjb25maWd1cmUgaHRtbDUgdG8g
Z2V0IGxpbmtzIHdvcmtpbmcgb24ganNmaWRkbGUKKyAgICAgICAgICAkbG9jYXRpb25Qcm92aWRl
ci5odG1sNU1vZGUodHJ1ZSk7CisgICAgICAgIH0pOworCisgICAgICAgIGZ1bmN0aW9uIE1haW5D
bnRsKCRzY29wZSwgJHJvdXRlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbikgeworICAgICAgICAg
ICRzY29wZS4kcm91dGUgPSAkcm91dGU7CisgICAgICAgICAgJHNjb3BlLiRsb2NhdGlvbiA9ICRs
b2NhdGlvbjsKKyAgICAgICAgICAkc2NvcGUuJHJvdXRlUGFyYW1zID0gJHJvdXRlUGFyYW1zOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gQm9va0NudGwoJHNjb3BlLCAkcm91dGVQYXJh
bXMpIHsKKyAgICAgICAgICAkc2NvcGUubmFtZSA9ICJCb29rQ250bCI7CisgICAgICAgICAgJHNj
b3BlLnBhcmFtcyA9ICRyb3V0ZVBhcmFtczsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IENoYXB0ZXJDbnRsKCRzY29wZSwgJHJvdXRlUGFyYW1zKSB7CisgICAgICAgICAgJHNjb3BlLm5h
bWUgPSAiQ2hhcHRlckNudGwiOworICAgICAgICAgICRzY29wZS5wYXJhbXMgPSAkcm91dGVQYXJh
bXM7CisgICAgICAgIH0KKyAgICAgIDwvZmlsZT4KKworICAgICAgPGZpbGUgbmFtZT0ic2NlbmFy
aW8uanMiPgorICAgICAgICBpdCgnc2hvdWxkIGxvYWQgYW5kIGNvbXBpbGUgY29ycmVjdCB0ZW1w
bGF0ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGVsZW1lbnQoJ2E6Y29udGFpbnMoIk1vYnk6
IENoMSIpJykuY2xpY2soKTsKKyAgICAgICAgICB2YXIgY29udGVudCA9IGVsZW1lbnQoJy5kb2Mt
ZXhhbXBsZS1saXZlIFtuZy12aWV3XScpLnRleHQoKTsKKyAgICAgICAgICBleHBlY3QoY29udGVu
dCkudG9NYXRjaCgvY29udHJvbGxlclw6IENoYXB0ZXJDbnRsLyk7CisgICAgICAgICAgZXhwZWN0
KGNvbnRlbnQpLnRvTWF0Y2goL0Jvb2sgSWRcOiBNb2J5Lyk7CisgICAgICAgICAgZXhwZWN0KGNv
bnRlbnQpLnRvTWF0Y2goL0NoYXB0ZXIgSWRcOiAxLyk7CisKKyAgICAgICAgICBlbGVtZW50KCdh
OmNvbnRhaW5zKCJTY2FybGV0IiknKS5jbGljaygpOworICAgICAgICAgIGNvbnRlbnQgPSBlbGVt
ZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBbbmctdmlld10nKS50ZXh0KCk7CisgICAgICAgICAgZXhw
ZWN0KGNvbnRlbnQpLnRvTWF0Y2goL2NvbnRyb2xsZXJcOiBCb29rQ250bC8pOworICAgICAgICAg
IGV4cGVjdChjb250ZW50KS50b01hdGNoKC9Cb29rIElkXDogU2NhcmxldC8pOworICAgICAgICB9
KTsKKyAgICAgIDwvZmlsZT4KKyAgICA8L2V4YW1wbGU+CisgKi8KKworCisvKioKKyAqIEBuZ2Rv
YyBldmVudAorICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nVmlldyMkdmlld0NvbnRlbnRMb2FkZWQK
KyAqIEBldmVudE9mIG5nLmRpcmVjdGl2ZTpuZ1ZpZXcKKyAqIEBldmVudFR5cGUgZW1pdCBvbiB0
aGUgY3VycmVudCBuZ1ZpZXcgc2NvcGUKKyAqIEBkZXNjcmlwdGlvbgorICogRW1pdHRlZCBldmVy
eSB0aW1lIHRoZSBuZ1ZpZXcgY29udGVudCBpcyByZWxvYWRlZC4KKyAqLwordmFyIG5nVmlld0Rp
cmVjdGl2ZSA9IFsnJGh0dHAnLCAnJHRlbXBsYXRlQ2FjaGUnLCAnJHJvdXRlJywgJyRhbmNob3JT
Y3JvbGwnLCAnJGNvbXBpbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnJGNvbnRyb2xsZXIn
LAorICAgICAgICAgICAgICAgZnVuY3Rpb24oJGh0dHAsICAgJHRlbXBsYXRlQ2FjaGUsICAgJHJv
dXRlLCAgICRhbmNob3JTY3JvbGwsICAgJGNvbXBpbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAkY29udHJvbGxlcikgeworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnRUNBJywKKyAgICB0
ZXJtaW5hbDogdHJ1ZSwKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikg
eworICAgICAgdmFyIGxhc3RTY29wZSwKKyAgICAgICAgICBvbmxvYWRFeHAgPSBhdHRyLm9ubG9h
ZCB8fCAnJzsKKworICAgICAgc2NvcGUuJG9uKCckcm91dGVDaGFuZ2VTdWNjZXNzJywgdXBkYXRl
KTsKKyAgICAgIHVwZGF0ZSgpOworCisKKyAgICAgIGZ1bmN0aW9uIGRlc3Ryb3lMYXN0U2NvcGUo
KSB7CisgICAgICAgIGlmIChsYXN0U2NvcGUpIHsKKyAgICAgICAgICBsYXN0U2NvcGUuJGRlc3Ry
b3koKTsKKyAgICAgICAgICBsYXN0U2NvcGUgPSBudWxsOworICAgICAgICB9CisgICAgICB9CisK
KyAgICAgIGZ1bmN0aW9uIGNsZWFyQ29udGVudCgpIHsKKyAgICAgICAgZWxlbWVudC5odG1sKCcn
KTsKKyAgICAgICAgZGVzdHJveUxhc3RTY29wZSgpOworICAgICAgfQorCisgICAgICBmdW5jdGlv
biB1cGRhdGUoKSB7CisgICAgICAgIHZhciBsb2NhbHMgPSAkcm91dGUuY3VycmVudCAmJiAkcm91
dGUuY3VycmVudC5sb2NhbHMsCisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxvY2FscyAmJiBsb2Nh
bHMuJHRlbXBsYXRlOworCisgICAgICAgIGlmICh0ZW1wbGF0ZSkgeworICAgICAgICAgIGVsZW1l
bnQuaHRtbCh0ZW1wbGF0ZSk7CisgICAgICAgICAgZGVzdHJveUxhc3RTY29wZSgpOworCisgICAg
ICAgICAgdmFyIGxpbmsgPSAkY29tcGlsZShlbGVtZW50LmNvbnRlbnRzKCkpLAorICAgICAgICAg
ICAgICBjdXJyZW50ID0gJHJvdXRlLmN1cnJlbnQsCisgICAgICAgICAgICAgIGNvbnRyb2xsZXI7
CisKKyAgICAgICAgICBsYXN0U2NvcGUgPSBjdXJyZW50LnNjb3BlID0gc2NvcGUuJG5ldygpOwor
ICAgICAgICAgIGlmIChjdXJyZW50LmNvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxvY2Fscy4k
c2NvcGUgPSBsYXN0U2NvcGU7CisgICAgICAgICAgICBjb250cm9sbGVyID0gJGNvbnRyb2xsZXIo
Y3VycmVudC5jb250cm9sbGVyLCBsb2NhbHMpOworICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJl
bigpLmRhdGEoJyRuZ0NvbnRyb2xsZXJDb250cm9sbGVyJywgY29udHJvbGxlcik7CisgICAgICAg
ICAgfQorCisgICAgICAgICAgbGluayhsYXN0U2NvcGUpOworICAgICAgICAgIGxhc3RTY29wZS4k
ZW1pdCgnJHZpZXdDb250ZW50TG9hZGVkJyk7CisgICAgICAgICAgbGFzdFNjb3BlLiRldmFsKG9u
bG9hZEV4cCk7CisKKyAgICAgICAgICAvLyAkYW5jaG9yU2Nyb2xsIG1pZ2h0IGxpc3RlbiBvbiBl
dmVudC4uLgorICAgICAgICAgICRhbmNob3JTY3JvbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBjbGVhckNvbnRlbnQoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfTsK
K31dOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpz
Y3JpcHQKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIExvYWQgY29udGVudCBvZiBhIHNjcmlwdCB0
YWcsIHdpdGggdHlwZSBgdGV4dC9uZy10ZW1wbGF0ZWAsIGludG8gYCR0ZW1wbGF0ZUNhY2hlYCwg
c28gdGhhdCB0aGUKKyAqIHRlbXBsYXRlIGNhbiBiZSB1c2VkIGJ5IGBuZ0luY2x1ZGVgLCBgbmdW
aWV3YCBvciBkaXJlY3RpdmUgdGVtcGxhdGVzLgorICoKKyAqIEByZXN0cmljdCBFCisgKiBAcGFy
YW0geyd0ZXh0L25nLXRlbXBsYXRlJ30gdHlwZSBtdXN0IGJlIHNldCB0byBgJ3RleHQvbmctdGVt
cGxhdGUnYAorICoKKyAqIEBleGFtcGxlCisgIDxkb2M6ZXhhbXBsZT4KKyAgICA8ZG9jOnNvdXJj
ZT4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9uZy10ZW1wbGF0ZSIgaWQ9Ii90cGwuaHRtbCI+
CisgICAgICAgIENvbnRlbnQgb2YgdGhlIHRlbXBsYXRlLgorICAgICAgPC9zY3JpcHQ+CisKKyAg
ICAgIDxhIG5nLWNsaWNrPSJjdXJyZW50VHBsPScvdHBsLmh0bWwnIiBpZD0idHBsLWxpbmsiPkxv
YWQgaW5saW5lZCB0ZW1wbGF0ZTwvYT4KKyAgICAgIDxkaXYgaWQ9InRwbC1jb250ZW50IiBuZy1p
bmNsdWRlIHNyYz0iY3VycmVudFRwbCI+PC9kaXY+CisgICAgPC9kb2M6c291cmNlPgorICAgIDxk
b2M6c2NlbmFyaW8+CisgICAgICBpdCgnc2hvdWxkIGxvYWQgdGVtcGxhdGUgZGVmaW5lZCBpbnNp
ZGUgc2NyaXB0IHRhZycsIGZ1bmN0aW9uKCkgeworICAgICAgICBlbGVtZW50KCcjdHBsLWxpbmsn
KS5jbGljaygpOworICAgICAgICBleHBlY3QoZWxlbWVudCgnI3RwbC1jb250ZW50JykudGV4dCgp
KS50b01hdGNoKC9Db250ZW50IG9mIHRoZSB0ZW1wbGF0ZS8pOworICAgICAgfSk7CisgICAgPC9k
b2M6c2NlbmFyaW8+CisgIDwvZG9jOmV4YW1wbGU+CisgKi8KK3ZhciBzY3JpcHREaXJlY3RpdmUg
PSBbJyR0ZW1wbGF0ZUNhY2hlJywgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHsKKyAgcmV0dXJu
IHsKKyAgICByZXN0cmljdDogJ0UnLAorICAgIHRlcm1pbmFsOiB0cnVlLAorICAgIGNvbXBpbGU6
IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHsKKyAgICAgIGlmIChhdHRyLnR5cGUgPT0gJ3RleHQv
bmctdGVtcGxhdGUnKSB7CisgICAgICAgIHZhciB0ZW1wbGF0ZVVybCA9IGF0dHIuaWQsCisgICAg
ICAgICAgICAvLyBJRSBpcyBub3QgY29uc2lzdGVudCwgaW4gc2NyaXB0cyB3ZSBoYXZlIHRvIHJl
YWQgLnRleHQgYnV0IGluIG90aGVyIG5vZGVzIHdlIGhhdmUgdG8gcmVhZCAudGV4dENvbnRlbnQK
KyAgICAgICAgICAgIHRleHQgPSBlbGVtZW50WzBdLnRleHQ7CisKKyAgICAgICAgJHRlbXBsYXRl
Q2FjaGUucHV0KHRlbXBsYXRlVXJsLCB0ZXh0KTsKKyAgICAgIH0KKyAgICB9CisgIH07Cit9XTsK
KworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZy5kaXJlY3RpdmU6c2VsZWN0
CisgKiBAcmVzdHJpY3QgRQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogSFRNTCBgU0VMRUNUYCBl
bGVtZW50IHdpdGggYW5ndWxhciBkYXRhLWJpbmRpbmcuCisgKgorICogIyBgbmdPcHRpb25zYAor
ICoKKyAqIE9wdGlvbmFsbHkgYG5nT3B0aW9uc2AgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGR5
bmFtaWNhbGx5IGdlbmVyYXRlIGEgbGlzdCBvZiBgPG9wdGlvbj5gCisgKiBlbGVtZW50cyBmb3Ig
YSBgPHNlbGVjdD5gIGVsZW1lbnQgdXNpbmcgYW4gYXJyYXkgb3IgYW4gb2JqZWN0IG9idGFpbmVk
IGJ5IGV2YWx1YXRpbmcgdGhlCisgKiBgbmdPcHRpb25zYCBleHByZXNzaW9uLgorICrLncudCisg
KiBXaGVuIGFuIGl0ZW0gaW4gdGhlIHNlbGVjdCBtZW51IGlzIHNlbGVjdCwgdGhlIHZhbHVlIG9m
IGFycmF5IGVsZW1lbnQgb3Igb2JqZWN0IHByb3BlcnR5CisgKiByZXByZXNlbnRlZCBieSB0aGUg
c2VsZWN0ZWQgb3B0aW9uIHdpbGwgYmUgYm91bmQgdG8gdGhlIG1vZGVsIGlkZW50aWZpZWQgYnkg
dGhlIGBuZ01vZGVsYAorICogZGlyZWN0aXZlIG9mIHRoZSBwYXJlbnQgc2VsZWN0IGVsZW1lbnQu
CisgKgorICogT3B0aW9uYWxseSwgYSBzaW5nbGUgaGFyZC1jb2RlZCBgPG9wdGlvbj5gIGVsZW1l
bnQsIHdpdGggdGhlIHZhbHVlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcsIGNhbgorICogYmUgbmVz
dGVkIGludG8gdGhlIGA8c2VsZWN0PmAgZWxlbWVudC4gVGhpcyBlbGVtZW50IHdpbGwgdGhlbiBy
ZXByZXNlbnQgYG51bGxgIG9yICJub3Qgc2VsZWN0ZWQiCisgKiBvcHRpb24uIFNlZSBleGFtcGxl
IGJlbG93IGZvciBkZW1vbnN0cmF0aW9uLgorICoKKyAqIE5vdGU6IGBuZ09wdGlvbnNgIHByb3Zp
ZGVzIGl0ZXJhdG9yIGZhY2lsaXR5IGZvciBgPG9wdGlvbj5gIGVsZW1lbnQgd2hpY2ggc2hvdWxk
IGJlIHVzZWQgaW5zdGVhZAorICogb2Yge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1JlcGVhdCBuZ1Jl
cGVhdH0gd2hlbiB5b3Ugd2FudCB0aGUKKyAqIGBzZWxlY3RgIG1vZGVsIHRvIGJlIGJvdW5kIHRv
IGEgbm9uLXN0cmluZyB2YWx1ZS4gVGhpcyBpcyBiZWNhdXNlIGFuIG9wdGlvbiBlbGVtZW50IGNh
biBjdXJyZW50bHkKKyAqIGJlIGJvdW5kIHRvIHN0cmluZyB2YWx1ZXMgb25seS4KKyAqCisgKiBA
cGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBk
YXRhLWJpbmQgdG8uCisgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0
aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuCisgKiBAcGFyYW0g
e3N0cmluZz19IHJlcXVpcmVkIFRoZSBjb250cm9sIGlzIGNvbnNpZGVyZWQgdmFsaWQgb25seSBp
ZiB2YWx1ZSBpcyBlbnRlcmVkLgorICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMg
YHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50
IHRvCisgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZh
bHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZgorICogICAgYHJlcXVp
cmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1
dGUuCisgKiBAcGFyYW0ge2NvbXByZWhlbnNpb25fZXhwcmVzc2lvbj19IG5nT3B0aW9ucyBpbiBv
bmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKyAqCisgKiAgICogZm9yIGFycmF5IGRhdGEgc291
cmNlczoKKyAqICAgICAqIGBsYWJlbGAgKipgZm9yYCoqIGB2YWx1ZWAgKipgaW5gKiogYGFycmF5
YAorICogICAgICogYHNlbGVjdGAgKipgYXNgKiogYGxhYmVsYCAqKmBmb3JgKiogYHZhbHVlYCAq
KmBpbmAqKiBgYXJyYXlgCisgKiAgICAgKiBgbGFiZWxgICAqKmBncm91cCBieWAqKiBgZ3JvdXBg
ICoqYGZvcmAqKiBgdmFsdWVgICoqYGluYCoqIGBhcnJheWAKKyAqICAgICAqIGBzZWxlY3RgICoq
YGFzYCoqIGBsYWJlbGAgKipgZ3JvdXAgYnlgKiogYGdyb3VwYCAqKmBmb3JgKiogYHZhbHVlYCAq
KmBpbmAqKiBgYXJyYXlgCisgKiAgICogZm9yIG9iamVjdCBkYXRhIHNvdXJjZXM6CisgKiAgICAg
KiBgbGFiZWxgICoqYGZvciAoYCoqYGtleWAgKipgLGAqKiBgdmFsdWVgKipgKSBpbmAqKiBgb2Jq
ZWN0YAorICogICAgICogYHNlbGVjdGAgKipgYXNgKiogYGxhYmVsYCAqKmBmb3IgKGAqKmBrZXlg
ICoqYCxgKiogYHZhbHVlYCoqYCkgaW5gKiogYG9iamVjdGAKKyAqICAgICAqIGBsYWJlbGAgKipg
Z3JvdXAgYnlgKiogYGdyb3VwYCAqKmBmb3IgKGAqKmBrZXlgKipgLGAqKiBgdmFsdWVgKipgKSBp
bmAqKiBgb2JqZWN0YAorICogICAgICogYHNlbGVjdGAgKipgYXNgKiogYGxhYmVsYCAqKmBncm91
cCBieWAqKiBgZ3JvdXBgCisgKiAgICAgICAgICoqYGZvcmAgYChgKipga2V5YCoqYCxgKiogYHZh
bHVlYCoqYCkgaW5gKiogYG9iamVjdGAKKyAqCisgKiBXaGVyZToKKyAqCisgKiAgICogYGFycmF5
YCAvIGBvYmplY3RgOiBhbiBleHByZXNzaW9uIHdoaWNoIGV2YWx1YXRlcyB0byBhbiBhcnJheSAv
IG9iamVjdCB0byBpdGVyYXRlIG92ZXIuCisgKiAgICogYHZhbHVlYDogbG9jYWwgdmFyaWFibGUg
d2hpY2ggd2lsbCByZWZlciB0byBlYWNoIGl0ZW0gaW4gdGhlIGBhcnJheWAgb3IgZWFjaCBwcm9w
ZXJ0eSB2YWx1ZQorICogICAgICBvZiBgb2JqZWN0YCBkdXJpbmcgaXRlcmF0aW9uLgorICogICAq
IGBrZXlgOiBsb2NhbCB2YXJpYWJsZSB3aGljaCB3aWxsIHJlZmVyIHRvIGEgcHJvcGVydHkgbmFt
ZSBpbiBgb2JqZWN0YCBkdXJpbmcgaXRlcmF0aW9uLgorICogICAqIGBsYWJlbGA6IFRoZSByZXN1
bHQgb2YgdGhpcyBleHByZXNzaW9uIHdpbGwgYmUgdGhlIGxhYmVsIGZvciBgPG9wdGlvbj5gIGVs
ZW1lbnQuIFRoZQorICogICAgIGBleHByZXNzaW9uYCB3aWxsIG1vc3QgbGlrZWx5IHJlZmVyIHRv
IHRoZSBgdmFsdWVgIHZhcmlhYmxlIChlLmcuIGB2YWx1ZS5wcm9wZXJ0eU5hbWVgKS4KKyAqICAg
KiBgc2VsZWN0YDogVGhlIHJlc3VsdCBvZiB0aGlzIGV4cHJlc3Npb24gd2lsbCBiZSBib3VuZCB0
byB0aGUgbW9kZWwgb2YgdGhlIHBhcmVudCBgPHNlbGVjdD5gCisgKiAgICAgIGVsZW1lbnQuIElm
IG5vdCBzcGVjaWZpZWQsIGBzZWxlY3RgIGV4cHJlc3Npb24gd2lsbCBkZWZhdWx0IHRvIGB2YWx1
ZWAuCisgKiAgICogYGdyb3VwYDogVGhlIHJlc3VsdCBvZiB0aGlzIGV4cHJlc3Npb24gd2lsbCBi
ZSB1c2VkIHRvIGdyb3VwIG9wdGlvbnMgdXNpbmcgdGhlIGA8b3B0Z3JvdXA+YAorICogICAgICBE
T00gZWxlbWVudC4KKyAqCisgKiBAZXhhbXBsZQorICAgIDxkb2M6ZXhhbXBsZT4KKyAgICAgIDxk
b2M6c291cmNlPgorICAgICAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBNeUNudHJsKCRz
Y29wZSkgeworICAgICAgICAgICRzY29wZS5jb2xvcnMgPSBbCisgICAgICAgICAgICB7bmFtZTon
YmxhY2snLCBzaGFkZTonZGFyayd9LAorICAgICAgICAgICAge25hbWU6J3doaXRlJywgc2hhZGU6
J2xpZ2h0J30sCisgICAgICAgICAgICB7bmFtZToncmVkJywgc2hhZGU6J2RhcmsnfSwKKyAgICAg
ICAgICAgIHtuYW1lOidibHVlJywgc2hhZGU6J2RhcmsnfSwKKyAgICAgICAgICAgIHtuYW1lOid5
ZWxsb3cnLCBzaGFkZTonbGlnaHQnfQorICAgICAgICAgIF07CisgICAgICAgICAgJHNjb3BlLmNv
bG9yID0gJHNjb3BlLmNvbG9yc1syXTsgLy8gcmVkCisgICAgICAgIH0KKyAgICAgICAgPC9zY3Jp
cHQ+CisgICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iTXlDbnRybCI+CisgICAgICAgICAgPHVs
PgorICAgICAgICAgICAgPGxpIG5nLXJlcGVhdD0iY29sb3IgaW4gY29sb3JzIj4KKyAgICAgICAg
ICAgICAgTmFtZTogPGlucHV0IG5nLW1vZGVsPSJjb2xvci5uYW1lIj4KKyAgICAgICAgICAgICAg
WzxhIGhyZWYgbmctY2xpY2s9ImNvbG9ycy5zcGxpY2UoJGluZGV4LCAxKSI+WDwvYT5dCisgICAg
ICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICBbPGEgaHJlZiBu
Zy1jbGljaz0iY29sb3JzLnB1c2goe30pIj5hZGQ8L2E+XQorICAgICAgICAgICAgPC9saT4KKyAg
ICAgICAgICA8L3VsPgorICAgICAgICAgIDxoci8+CisgICAgICAgICAgQ29sb3IgKG51bGwgbm90
IGFsbG93ZWQpOgorICAgICAgICAgIDxzZWxlY3QgbmctbW9kZWw9ImNvbG9yIiBuZy1vcHRpb25z
PSJjLm5hbWUgZm9yIGMgaW4gY29sb3JzIj48L3NlbGVjdD48YnI+CisKKyAgICAgICAgICBDb2xv
ciAobnVsbCBhbGxvd2VkKToKKyAgICAgICAgICA8c3BhbiAgY2xhc3M9Im51bGxhYmxlIj4KKyAg
ICAgICAgICAgIDxzZWxlY3QgbmctbW9kZWw9ImNvbG9yIiBuZy1vcHRpb25zPSJjLm5hbWUgZm9y
IGMgaW4gY29sb3JzIj4KKyAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj4tLSBjaG9zZSBj
b2xvciAtLTwvb3B0aW9uPgorICAgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgICAgPC9zcGFu
Pjxici8+CisKKyAgICAgICAgICBDb2xvciBncm91cGVkIGJ5IHNoYWRlOgorICAgICAgICAgIDxz
ZWxlY3QgbmctbW9kZWw9ImNvbG9yIiBuZy1vcHRpb25zPSJjLm5hbWUgZ3JvdXAgYnkgYy5zaGFk
ZSBmb3IgYyBpbiBjb2xvcnMiPgorICAgICAgICAgIDwvc2VsZWN0Pjxici8+CisKKworICAgICAg
ICAgIFNlbGVjdCA8YSBocmVmIG5nLWNsaWNrPSJjb2xvcj17bmFtZTonbm90IGluIGxpc3QnfSI+
Ym9ndXM8L2E+Ljxicj4KKyAgICAgICAgICA8aHIvPgorICAgICAgICAgIEN1cnJlbnRseSBzZWxl
Y3RlZDoge3sge3NlbGVjdGVkX2NvbG9yOmNvbG9yfSAgfX0KKyAgICAgICAgICA8ZGl2IHN0eWxl
PSJib3JkZXI6c29saWQgMXB4IGJsYWNrOyBoZWlnaHQ6MjBweCIKKyAgICAgICAgICAgICAgIG5n
LXN0eWxlPSJ7J2JhY2tncm91bmQtY29sb3InOmNvbG9yLm5hbWV9Ij4KKyAgICAgICAgICA8L2Rp
dj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2RvYzpzb3VyY2U+CisgICAgICA8ZG9jOnNjZW5h
cmlvPgorICAgICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1vcHRpb25zJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd7c2VsZWN0ZWRfY29sb3I6Y29sb3J9JykpLnRv
TWF0Y2goJ3JlZCcpOworICAgICAgICAgICBzZWxlY3QoJ2NvbG9yJykub3B0aW9uKCcwJyk7Cisg
ICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd7c2VsZWN0ZWRfY29sb3I6Y29sb3J9JykpLnRvTWF0
Y2goJ2JsYWNrJyk7CisgICAgICAgICAgIHVzaW5nKCcubnVsbGFibGUnKS5zZWxlY3QoJ2NvbG9y
Jykub3B0aW9uKCcnKTsKKyAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3tzZWxlY3RlZF9jb2xv
cjpjb2xvcn0nKSkudG9NYXRjaCgnbnVsbCcpOworICAgICAgICAgfSk7CisgICAgICA8L2RvYzpz
Y2VuYXJpbz4KKyAgICA8L2RvYzpleGFtcGxlPgorICovCisKK3ZhciBuZ09wdGlvbnNEaXJlY3Rp
dmUgPSB2YWx1ZUZuKHsgdGVybWluYWw6IHRydWUgfSk7Cit2YXIgc2VsZWN0RGlyZWN0aXZlID0g
WyckY29tcGlsZScsICckcGFyc2UnLCBmdW5jdGlvbigkY29tcGlsZSwgICAkcGFyc2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAvLzAwMDAxMTExMTAwMDAwMDAwMDAwMjIyMjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAzMzMzMDAwMDAwMDAwMDAwMDA0NDQ0NDQ0NDQ0NDQ0NDQ0NDAwMDAwMDAw
MDU1NTU1NTU1NTU1NTU1NTU1MDAwMDAwMDY2NjY2NjY2NjY2NjY2NjY2MDAwMDAwMDAwMDAwMDAw
Nzc3NzAKKyAgdmFyIE5HX09QVElPTlNfUkVHRVhQID0gL15ccyooLio/KSg/OlxzK2FzXHMrKC4q
PykpPyg/OlxzK2dyb3VwXHMrYnlccysoLiopKT9ccytmb3JccysoPzooW1wkXHddW1wkXHdcZF0q
KXwoPzpcKFxzKihbXCRcd11bXCRcd1xkXSopXHMqLFxzKihbXCRcd11bXCRcd1xkXSopXHMqXCkp
KVxzK2luXHMrKC4qKSQvLAorICAgICAgbnVsbE1vZGVsQ3RybCA9IHskc2V0Vmlld1ZhbHVlOiBu
b29wfTsKKworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnRScsCisgICAgcmVxdWlyZTogWydz
ZWxlY3QnLCAnP25nTW9kZWwnXSwKKyAgICBjb250cm9sbGVyOiBbJyRlbGVtZW50JywgJyRzY29w
ZScsICckYXR0cnMnLCBmdW5jdGlvbigkZWxlbWVudCwgJHNjb3BlLCAkYXR0cnMpIHsKKyAgICAg
IHZhciBzZWxmID0gdGhpcywKKyAgICAgICAgICBvcHRpb25zTWFwID0ge30sCisgICAgICAgICAg
bmdNb2RlbEN0cmwgPSBudWxsTW9kZWxDdHJsLAorICAgICAgICAgIG51bGxPcHRpb24sCisgICAg
ICAgICAgdW5rbm93bk9wdGlvbjsKKworCisgICAgICBzZWxmLmRhdGFib3VuZCA9ICRhdHRycy5u
Z01vZGVsOworCisKKyAgICAgIHNlbGYuaW5pdCA9IGZ1bmN0aW9uKG5nTW9kZWxDdHJsXywgbnVs
bE9wdGlvbl8sIHVua25vd25PcHRpb25fKSB7CisgICAgICAgIG5nTW9kZWxDdHJsID0gbmdNb2Rl
bEN0cmxfOworICAgICAgICBudWxsT3B0aW9uID0gbnVsbE9wdGlvbl87CisgICAgICAgIHVua25v
d25PcHRpb24gPSB1bmtub3duT3B0aW9uXzsKKyAgICAgIH0KKworCisgICAgICBzZWxmLmFkZE9w
dGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIG9wdGlvbnNNYXBbdmFsdWVdID0gdHJ1
ZTsKKworICAgICAgICBpZiAobmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSA9PSB2YWx1ZSkgeworICAg
ICAgICAgICRlbGVtZW50LnZhbCh2YWx1ZSk7CisgICAgICAgICAgaWYgKHVua25vd25PcHRpb24u
cGFyZW50KCkpIHVua25vd25PcHRpb24ucmVtb3ZlKCk7CisgICAgICAgIH0KKyAgICAgIH07CisK
KworICAgICAgc2VsZi5yZW1vdmVPcHRpb24gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBp
ZiAodGhpcy5oYXNPcHRpb24odmFsdWUpKSB7CisgICAgICAgICAgZGVsZXRlIG9wdGlvbnNNYXBb
dmFsdWVdOworICAgICAgICAgIGlmIChuZ01vZGVsQ3RybC4kdmlld1ZhbHVlID09IHZhbHVlKSB7
CisgICAgICAgICAgICB0aGlzLnJlbmRlclVua25vd25PcHRpb24odmFsdWUpOworICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfTsKKworCisgICAgICBzZWxmLnJlbmRlclVua25vd25PcHRp
b24gPSBmdW5jdGlvbih2YWwpIHsKKyAgICAgICAgdmFyIHVua25vd25WYWwgPSAnPyAnICsgaGFz
aEtleSh2YWwpICsgJyA/JzsKKyAgICAgICAgdW5rbm93bk9wdGlvbi52YWwodW5rbm93blZhbCk7
CisgICAgICAgICRlbGVtZW50LnByZXBlbmQodW5rbm93bk9wdGlvbik7CisgICAgICAgICRlbGVt
ZW50LnZhbCh1bmtub3duVmFsKTsKKyAgICAgICAgdW5rbm93bk9wdGlvbi5wcm9wKCdzZWxlY3Rl
ZCcsIHRydWUpOyAvLyBuZWVkZWQgZm9yIElFCisgICAgICB9CisKKworICAgICAgc2VsZi5oYXNP
cHRpb24gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICByZXR1cm4gb3B0aW9uc01hcC5oYXNP
d25Qcm9wZXJ0eSh2YWx1ZSk7CisgICAgICB9CisKKyAgICAgICRzY29wZS4kb24oJyRkZXN0cm95
JywgZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIGRpc2FibGUgdW5rbm93biBvcHRpb24gc28gdGhh
dCB3ZSBkb24ndCBkbyB3b3JrIHdoZW4gdGhlIHdob2xlIHNlbGVjdCBpcyBiZWluZyBkZXN0cm95
ZWQKKyAgICAgICAgc2VsZi5yZW5kZXJVbmtub3duT3B0aW9uID0gbm9vcDsKKyAgICAgIH0pOwor
ICAgIH1dLAorCisgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmxz
KSB7CisgICAgICAvLyBpZiBuZ01vZGVsIGlzIG5vdCBkZWZpbmVkLCB3ZSBkb24ndCBuZWVkIHRv
IGRvIGFueXRoaW5nCisgICAgICBpZiAoIWN0cmxzWzFdKSByZXR1cm47CisKKyAgICAgIHZhciBz
ZWxlY3RDdHJsID0gY3RybHNbMF0sCisgICAgICAgICAgbmdNb2RlbEN0cmwgPSBjdHJsc1sxXSwK
KyAgICAgICAgICBtdWx0aXBsZSA9IGF0dHIubXVsdGlwbGUsCisgICAgICAgICAgb3B0aW9uc0V4
cCA9IGF0dHIubmdPcHRpb25zLAorICAgICAgICAgIG51bGxPcHRpb24gPSBmYWxzZSwgLy8gaWYg
ZmFsc2UsIHVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBzZWxlY3QgaXQgKHVzZWQgYnkgbmdPcHRp
b25zKQorICAgICAgICAgIGVtcHR5T3B0aW9uLAorICAgICAgICAgIC8vIHdlIGNhbid0IGp1c3Qg
anFMaXRlKCc8b3B0aW9uPicpIHNpbmNlIGpxTGl0ZSBpcyBub3Qgc21hcnQgZW5vdWdoCisgICAg
ICAgICAgLy8gdG8gY3JlYXRlIGl0IGluIDxzZWxlY3Q+IGFuZCBJRSBiYXJmcyBvdGhlcndpc2Uu
CisgICAgICAgICAgb3B0aW9uVGVtcGxhdGUgPSBqcUxpdGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnb3B0aW9uJykpLAorICAgICAgICAgIG9wdEdyb3VwVGVtcGxhdGUgPWpxTGl0ZShkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdvcHRncm91cCcpKSwKKyAgICAgICAgICB1bmtub3duT3B0aW9uID0g
b3B0aW9uVGVtcGxhdGUuY2xvbmUoKTsKKworICAgICAgLy8gZmluZCAibnVsbCIgb3B0aW9uCisg
ICAgICBmb3IodmFyIGkgPSAwLCBjaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW4oKSwgaWkgPSBj
aGlsZHJlbi5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgIGlmIChjaGlsZHJlbltpXS52
YWx1ZSA9PSAnJykgeworICAgICAgICAgIGVtcHR5T3B0aW9uID0gbnVsbE9wdGlvbiA9IGNoaWxk
cmVuLmVxKGkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAg
IHNlbGVjdEN0cmwuaW5pdChuZ01vZGVsQ3RybCwgbnVsbE9wdGlvbiwgdW5rbm93bk9wdGlvbik7
CisKKyAgICAgIC8vIHJlcXVpcmVkIHZhbGlkYXRvcgorICAgICAgaWYgKG11bHRpcGxlICYmIChh
dHRyLnJlcXVpcmVkIHx8IGF0dHIubmdSZXF1aXJlZCkpIHsKKyAgICAgICAgdmFyIHJlcXVpcmVk
VmFsaWRhdG9yID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICBuZ01vZGVsQ3RybC4kc2V0
VmFsaWRpdHkoJ3JlcXVpcmVkJywgIWF0dHIucmVxdWlyZWQgfHwgKHZhbHVlICYmIHZhbHVlLmxl
bmd0aCkpOworICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBu
Z01vZGVsQ3RybC4kcGFyc2Vycy5wdXNoKHJlcXVpcmVkVmFsaWRhdG9yKTsKKyAgICAgICAgbmdN
b2RlbEN0cmwuJGZvcm1hdHRlcnMudW5zaGlmdChyZXF1aXJlZFZhbGlkYXRvcik7CisKKyAgICAg
ICAgYXR0ci4kb2JzZXJ2ZSgncmVxdWlyZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICByZXF1
aXJlZFZhbGlkYXRvcihuZ01vZGVsQ3RybC4kdmlld1ZhbHVlKTsKKyAgICAgICAgfSk7CisgICAg
ICB9CisKKyAgICAgIGlmIChvcHRpb25zRXhwKSBPcHRpb25zKHNjb3BlLCBlbGVtZW50LCBuZ01v
ZGVsQ3RybCk7CisgICAgICBlbHNlIGlmIChtdWx0aXBsZSkgTXVsdGlwbGUoc2NvcGUsIGVsZW1l
bnQsIG5nTW9kZWxDdHJsKTsKKyAgICAgIGVsc2UgU2luZ2xlKHNjb3BlLCBlbGVtZW50LCBuZ01v
ZGVsQ3RybCwgc2VsZWN0Q3RybCk7CisKKworICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworCisKKworICAgICAgZnVuY3Rpb24gU2luZ2xlKHNjb3BlLCBzZWxlY3RFbGVtZW50LCBu
Z01vZGVsQ3RybCwgc2VsZWN0Q3RybCkgeworICAgICAgICBuZ01vZGVsQ3RybC4kcmVuZGVyID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIHZpZXdWYWx1ZSA9IG5nTW9kZWxDdHJsLiR2aWV3
VmFsdWU7CisKKyAgICAgICAgICBpZiAoc2VsZWN0Q3RybC5oYXNPcHRpb24odmlld1ZhbHVlKSkg
eworICAgICAgICAgICAgaWYgKHVua25vd25PcHRpb24ucGFyZW50KCkpIHVua25vd25PcHRpb24u
cmVtb3ZlKCk7CisgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnZhbCh2aWV3VmFsdWUpOworICAg
ICAgICAgICAgaWYgKHZpZXdWYWx1ZSA9PT0gJycpIGVtcHR5T3B0aW9uLnByb3AoJ3NlbGVjdGVk
JywgdHJ1ZSk7IC8vIHRvIG1ha2UgSUU5IGhhcHB5CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChpc1VuZGVmaW5lZCh2aWV3VmFsdWUpICYmIGVtcHR5T3B0aW9uKSB7CisgICAg
ICAgICAgICAgIHNlbGVjdEVsZW1lbnQudmFsKCcnKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgIHNlbGVjdEN0cmwucmVuZGVyVW5rbm93bk9wdGlvbih2aWV3VmFsdWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzZWxlY3RF
bGVtZW50LmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHNjb3BlLiRhcHBs
eShmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICh1bmtub3duT3B0aW9uLnBhcmVudCgpKSB1
bmtub3duT3B0aW9uLnJlbW92ZSgpOworICAgICAgICAgICAgbmdNb2RlbEN0cmwuJHNldFZpZXdW
YWx1ZShzZWxlY3RFbGVtZW50LnZhbCgpKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIE11bHRpcGxlKHNjb3BlLCBzZWxlY3RFbGVtZW50LCBj
dHJsKSB7CisgICAgICAgIHZhciBsYXN0VmlldzsKKyAgICAgICAgY3RybC4kcmVuZGVyID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgdmFyIGl0ZW1zID0gbmV3IEhhc2hNYXAoY3RybC4kdmlld1Zh
bHVlKTsKKyAgICAgICAgICBmb3JFYWNoKHNlbGVjdEVsZW1lbnQuZmluZCgnb3B0aW9uJyksIGZ1
bmN0aW9uKG9wdGlvbikgeworICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gaXNEZWZpbmVk
KGl0ZW1zLmdldChvcHRpb24udmFsdWUpKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKwor
ICAgICAgICAvLyB3ZSBoYXZlIHRvIGRvIGl0IG9uIGVhY2ggd2F0Y2ggc2luY2UgbmdNb2RlbCB3
YXRjaGVzIHJlZmVyZW5jZSwgYnV0CisgICAgICAgIC8vIHdlIG5lZWQgdG8gd29yayBvZiBhbiBh
cnJheSwgc28gd2UgbmVlZCB0byBzZWUgaWYgYW55dGhpbmcgd2FzIGluc2VydGVkL3JlbW92ZWQK
KyAgICAgICAgc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIHNlbGVjdE11bHRpcGxlV2F0Y2goKSB7Cisg
ICAgICAgICAgaWYgKCFlcXVhbHMobGFzdFZpZXcsIGN0cmwuJHZpZXdWYWx1ZSkpIHsKKyAgICAg
ICAgICAgIGxhc3RWaWV3ID0gY29weShjdHJsLiR2aWV3VmFsdWUpOworICAgICAgICAgICAgY3Ry
bC4kcmVuZGVyKCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBzZWxlY3RF
bGVtZW50LmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHNjb3BlLiRhcHBs
eShmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBhcnJheSA9IFtdOworICAgICAgICAgICAg
Zm9yRWFjaChzZWxlY3RFbGVtZW50LmZpbmQoJ29wdGlvbicpLCBmdW5jdGlvbihvcHRpb24pIHsK
KyAgICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkgeworICAgICAgICAgICAgICAgIGFy
cmF5LnB1c2gob3B0aW9uLnZhbHVlKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBjdHJsLiRzZXRWaWV3VmFsdWUoYXJyYXkpOworICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gT3B0aW9ucyhzY29wZSwgc2Vs
ZWN0RWxlbWVudCwgY3RybCkgeworICAgICAgICB2YXIgbWF0Y2g7CisKKyAgICAgICAgaWYgKCEg
KG1hdGNoID0gb3B0aW9uc0V4cC5tYXRjaChOR19PUFRJT05TX1JFR0VYUCkpKSB7CisgICAgICAg
ICAgdGhyb3cgRXJyb3IoCisgICAgICAgICAgICAiRXhwZWN0ZWQgbmdPcHRpb25zIGluIGZvcm0g
b2YgJ19zZWxlY3RfIChhcyBfbGFiZWxfKT8gZm9yIChfa2V5XywpP192YWx1ZV8gaW4gX2NvbGxl
Y3Rpb25fJyIgKworICAgICAgICAgICAgIiBidXQgZ290ICciICsgb3B0aW9uc0V4cCArICInLiIp
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIGRpc3BsYXlGbiA9ICRwYXJzZShtYXRjaFsyXSB8
fCBtYXRjaFsxXSksCisgICAgICAgICAgICB2YWx1ZU5hbWUgPSBtYXRjaFs0XSB8fCBtYXRjaFs2
XSwKKyAgICAgICAgICAgIGtleU5hbWUgPSBtYXRjaFs1XSwKKyAgICAgICAgICAgIGdyb3VwQnlG
biA9ICRwYXJzZShtYXRjaFszXSB8fCAnJyksCisgICAgICAgICAgICB2YWx1ZUZuID0gJHBhcnNl
KG1hdGNoWzJdID8gbWF0Y2hbMV0gOiB2YWx1ZU5hbWUpLAorICAgICAgICAgICAgdmFsdWVzRm4g
PSAkcGFyc2UobWF0Y2hbN10pLAorICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhcnJheSBvZiBh
cnJheSBvZiBleGlzdGluZyBvcHRpb24gZ3JvdXBzIGluIERPTS4gV2UgdHJ5IHRvIHJldXNlIHRo
ZXNlIGlmIHBvc3NpYmxlCisgICAgICAgICAgICAvLyBvcHRpb25Hcm91cHNDYWNoZVswXSBpcyB0
aGUgb3B0aW9ucyB3aXRoIG5vIG9wdGlvbiBncm91cAorICAgICAgICAgICAgLy8gb3B0aW9uR3Jv
dXBzQ2FjaGVbP11bMF0gaXMgdGhlIHBhcmVudDogZWl0aGVyIHRoZSBTRUxFQ1Qgb3IgT1BUR1JP
VVAgZWxlbWVudAorICAgICAgICAgICAgb3B0aW9uR3JvdXBzQ2FjaGUgPSBbW3tlbGVtZW50OiBz
ZWxlY3RFbGVtZW50LCBsYWJlbDonJ31dXTsKKworICAgICAgICBpZiAobnVsbE9wdGlvbikgewor
ICAgICAgICAgIC8vIGNvbXBpbGUgdGhlIGVsZW1lbnQgc2luY2UgdGhlcmUgbWlnaHQgYmUgYmlu
ZGluZ3MgaW4gaXQKKyAgICAgICAgICAkY29tcGlsZShudWxsT3B0aW9uKShzY29wZSk7CisKKyAg
ICAgICAgICAvLyByZW1vdmUgdGhlIGNsYXNzLCB3aGljaCBpcyBhZGRlZCBhdXRvbWF0aWNhbGx5
IGJlY2F1c2Ugd2UgcmVjb21waWxlIHRoZSBlbGVtZW50IGFuZCBpdAorICAgICAgICAgIC8vIGJl
Y29tZXMgdGhlIGNvbXBpbGF0aW9uIHJvb3QKKyAgICAgICAgICBudWxsT3B0aW9uLnJlbW92ZUNs
YXNzKCduZy1zY29wZScpOworCisgICAgICAgICAgLy8gd2UgbmVlZCB0byByZW1vdmUgaXQgYmVm
b3JlIGNhbGxpbmcgc2VsZWN0RWxlbWVudC5odG1sKCcnKSBiZWNhdXNlIG90aGVyd2lzZSBJRSB3
aWxsCisgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBsYWJlbCBmcm9tIHRoZSBlbGVtZW50LiB3dGY/
CisgICAgICAgICAgbnVsbE9wdGlvbi5yZW1vdmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IGNsZWFyIGNvbnRlbnRzLCB3ZSdsbCBhZGQgd2hhdCdzIG5lZWRlZCBiYXNlZCBvbiB0aGUgbW9k
ZWwKKyAgICAgICAgc2VsZWN0RWxlbWVudC5odG1sKCcnKTsKKworICAgICAgICBzZWxlY3RFbGVt
ZW50LmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHNjb3BlLiRhcHBseShm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBvcHRpb25Hcm91cCwKKyAgICAgICAgICAgICAg
ICBjb2xsZWN0aW9uID0gdmFsdWVzRm4oc2NvcGUpIHx8IFtdLAorICAgICAgICAgICAgICAgIGxv
Y2FscyA9IHt9LAorICAgICAgICAgICAgICAgIGtleSwgdmFsdWUsIG9wdGlvbkVsZW1lbnQsIGlu
ZGV4LCBncm91cEluZGV4LCBsZW5ndGgsIGdyb3VwTGVuZ3RoOworCisgICAgICAgICAgICBpZiAo
bXVsdGlwbGUpIHsKKyAgICAgICAgICAgICAgdmFsdWUgPSBbXTsKKyAgICAgICAgICAgICAgZm9y
IChncm91cEluZGV4ID0gMCwgZ3JvdXBMZW5ndGggPSBvcHRpb25Hcm91cHNDYWNoZS5sZW5ndGg7
CisgICAgICAgICAgICAgICAgICAgZ3JvdXBJbmRleCA8IGdyb3VwTGVuZ3RoOworICAgICAgICAg
ICAgICAgICAgIGdyb3VwSW5kZXgrKykgeworICAgICAgICAgICAgICAgIC8vIGxpc3Qgb2Ygb3B0
aW9ucyBmb3IgdGhhdCBncm91cC4gKGZpcnN0IGl0ZW0gaGFzIHRoZSBwYXJlbnQpCisgICAgICAg
ICAgICAgICAgb3B0aW9uR3JvdXAgPSBvcHRpb25Hcm91cHNDYWNoZVtncm91cEluZGV4XTsKKwor
ICAgICAgICAgICAgICAgIGZvcihpbmRleCA9IDEsIGxlbmd0aCA9IG9wdGlvbkdyb3VwLmxlbmd0
aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgIGlmICgob3B0
aW9uRWxlbWVudCA9IG9wdGlvbkdyb3VwW2luZGV4XS5lbGVtZW50KVswXS5zZWxlY3RlZCkgewor
ICAgICAgICAgICAgICAgICAgICBrZXkgPSBvcHRpb25FbGVtZW50LnZhbCgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoa2V5TmFtZSkgbG9jYWxzW2tleU5hbWVdID0ga2V5OworICAgICAgICAg
ICAgICAgICAgICBsb2NhbHNbdmFsdWVOYW1lXSA9IGNvbGxlY3Rpb25ba2V5XTsKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWUucHVzaCh2YWx1ZUZuKHNjb3BlLCBsb2NhbHMpKTsKKyAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGtleSA9IHNlbGVjdEVsZW1lbnQudmFsKCk7Cisg
ICAgICAgICAgICAgIGlmIChrZXkgPT0gJz8nKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB1
bmRlZmluZWQ7CisgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICcnKXsKKyAgICAgICAg
ICAgICAgICB2YWx1ZSA9IG51bGw7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgbG9jYWxzW3ZhbHVlTmFtZV0gPSBjb2xsZWN0aW9uW2tleV07CisgICAgICAgICAgICAg
ICAgaWYgKGtleU5hbWUpIGxvY2Fsc1trZXlOYW1lXSA9IGtleTsKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IHZhbHVlRm4oc2NvcGUsIGxvY2Fscyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGN0cmwuJHNldFZpZXdWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAg
fSk7CisgICAgICAgIH0pOworCisgICAgICAgIGN0cmwuJHJlbmRlciA9IHJlbmRlcjsKKworICAg
ICAgICAvLyBUT0RPKHZvanRhKTogY2FuJ3Qgd2Ugb3B0aW1pemUgdGhpcyA/CisgICAgICAgIHNj
b3BlLiR3YXRjaChyZW5kZXIpOworCisgICAgICAgIGZ1bmN0aW9uIHJlbmRlcigpIHsKKyAgICAg
ICAgICB2YXIgb3B0aW9uR3JvdXBzID0geycnOltdfSwgLy8gVGVtcG9yYXJ5IGxvY2F0aW9uIGZv
ciB0aGUgb3B0aW9uIGdyb3VwcyBiZWZvcmUgd2UgcmVuZGVyIHRoZW0KKyAgICAgICAgICAgICAg
b3B0aW9uR3JvdXBOYW1lcyA9IFsnJ10sCisgICAgICAgICAgICAgIG9wdGlvbkdyb3VwTmFtZSwK
KyAgICAgICAgICAgICAgb3B0aW9uR3JvdXAsCisgICAgICAgICAgICAgIG9wdGlvbiwKKyAgICAg
ICAgICAgICAgZXhpc3RpbmdQYXJlbnQsIGV4aXN0aW5nT3B0aW9ucywgZXhpc3RpbmdPcHRpb24s
CisgICAgICAgICAgICAgIG1vZGVsVmFsdWUgPSBjdHJsLiRtb2RlbFZhbHVlLAorICAgICAgICAg
ICAgICB2YWx1ZXMgPSB2YWx1ZXNGbihzY29wZSkgfHwgW10sCisgICAgICAgICAgICAgIGtleXMg
PSBrZXlOYW1lID8gc29ydGVkS2V5cyh2YWx1ZXMpIDogdmFsdWVzLAorICAgICAgICAgICAgICBn
cm91cExlbmd0aCwgbGVuZ3RoLAorICAgICAgICAgICAgICBncm91cEluZGV4LCBpbmRleCwKKyAg
ICAgICAgICAgICAgbG9jYWxzID0ge30sCisgICAgICAgICAgICAgIHNlbGVjdGVkLAorICAgICAg
ICAgICAgICBzZWxlY3RlZFNldCA9IGZhbHNlLCAvLyBub3RoaW5nIGlzIHNlbGVjdGVkIHlldAor
ICAgICAgICAgICAgICBsYXN0RWxlbWVudCwKKyAgICAgICAgICAgICAgZWxlbWVudCwKKyAgICAg
ICAgICAgICAgbGFiZWw7CisKKyAgICAgICAgICBpZiAobXVsdGlwbGUpIHsKKyAgICAgICAgICAg
IHNlbGVjdGVkU2V0ID0gbmV3IEhhc2hNYXAobW9kZWxWYWx1ZSk7CisgICAgICAgICAgfQorCisg
ICAgICAgICAgLy8gV2Ugbm93IGJ1aWxkIHVwIHRoZSBsaXN0IG9mIG9wdGlvbnMgd2UgbmVlZCAo
d2UgbWVyZ2UgbGF0ZXIpCisgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGxlbmd0aCA9IGtleXMu
bGVuZ3RoLCBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgbG9jYWxz
W3ZhbHVlTmFtZV0gPSB2YWx1ZXNba2V5TmFtZSA/IGxvY2Fsc1trZXlOYW1lXT1rZXlzW2luZGV4
XTppbmRleF07CisgICAgICAgICAgICAgICBvcHRpb25Hcm91cE5hbWUgPSBncm91cEJ5Rm4oc2Nv
cGUsIGxvY2FscykgfHwgJyc7CisgICAgICAgICAgICBpZiAoIShvcHRpb25Hcm91cCA9IG9wdGlv
bkdyb3Vwc1tvcHRpb25Hcm91cE5hbWVdKSkgeworICAgICAgICAgICAgICBvcHRpb25Hcm91cCA9
IG9wdGlvbkdyb3Vwc1tvcHRpb25Hcm91cE5hbWVdID0gW107CisgICAgICAgICAgICAgIG9wdGlv
bkdyb3VwTmFtZXMucHVzaChvcHRpb25Hcm91cE5hbWUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKG11bHRpcGxlKSB7CisgICAgICAgICAgICAgIHNlbGVjdGVkID0gc2VsZWN0ZWRT
ZXQucmVtb3ZlKHZhbHVlRm4oc2NvcGUsIGxvY2FscykpICE9IHVuZGVmaW5lZDsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHNlbGVjdGVkID0gbW9kZWxWYWx1ZSA9PT0gdmFs
dWVGbihzY29wZSwgbG9jYWxzKTsKKyAgICAgICAgICAgICAgc2VsZWN0ZWRTZXQgPSBzZWxlY3Rl
ZFNldCB8fCBzZWxlY3RlZDsgLy8gc2VlIGlmIGF0IGxlYXN0IG9uZSBpdGVtIGlzIHNlbGVjdGVk
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYWJlbCA9IGRpc3BsYXlGbihzY29wZSwgbG9j
YWxzKTsgLy8gd2hhdCB3aWxsIGJlIHNlZW4gYnkgdGhlIHVzZXIKKyAgICAgICAgICAgIGxhYmVs
ID0gbGFiZWwgPT09IHVuZGVmaW5lZCA/ICcnIDogbGFiZWw7IC8vIGRvaW5nIGRpc3BsYXlGbihz
Y29wZSwgbG9jYWxzKSB8fCAnJyBvdmVyd3JpdGVzIHplcm8gdmFsdWVzCisgICAgICAgICAgICBv
cHRpb25Hcm91cC5wdXNoKHsKKyAgICAgICAgICAgICAgaWQ6IGtleU5hbWUgPyBrZXlzW2luZGV4
XSA6IGluZGV4LCAgIC8vIGVpdGhlciB0aGUgaW5kZXggaW50byBhcnJheSBvciBrZXkgZnJvbSBv
YmplY3QKKyAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAorICAgICAgICAgICAgICBzZWxlY3Rl
ZDogc2VsZWN0ZWQgICAgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBi
ZSBzZWxlY3RlZAorICAgICAgICAgICAgfSk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICgh
bXVsdGlwbGUpIHsKKyAgICAgICAgICAgIGlmIChudWxsT3B0aW9uIHx8IG1vZGVsVmFsdWUgPT09
IG51bGwpIHsKKyAgICAgICAgICAgICAgLy8gaW5zZXJ0IG51bGwgb3B0aW9uIGlmIHdlIGhhdmUg
YSBwbGFjZWhvbGRlciwgb3IgdGhlIG1vZGVsIGlzIG51bGwKKyAgICAgICAgICAgICAgb3B0aW9u
R3JvdXBzWycnXS51bnNoaWZ0KHtpZDonJywgbGFiZWw6JycsIHNlbGVjdGVkOiFzZWxlY3RlZFNl
dH0pOworICAgICAgICAgICAgfSBlbHNlIGlmICghc2VsZWN0ZWRTZXQpIHsKKyAgICAgICAgICAg
ICAgLy8gb3B0aW9uIGNvdWxkIG5vdCBiZSBmb3VuZCwgd2UgaGF2ZSB0byBpbnNlcnQgdGhlIHVu
ZGVmaW5lZCBpdGVtCisgICAgICAgICAgICAgIG9wdGlvbkdyb3Vwc1snJ10udW5zaGlmdCh7aWQ6
Jz8nLCBsYWJlbDonJywgc2VsZWN0ZWQ6dHJ1ZX0pOworICAgICAgICAgICAgfQorICAgICAgICAg
IH0KKworICAgICAgICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgbGlzdCBvZiBET00g
bm9kZXMgdG8gbWF0Y2ggdGhlIG9wdGlvbkdyb3VwcyB3ZSBjb21wdXRlZCBhYm92ZQorICAgICAg
ICAgIGZvciAoZ3JvdXBJbmRleCA9IDAsIGdyb3VwTGVuZ3RoID0gb3B0aW9uR3JvdXBOYW1lcy5s
ZW5ndGg7CisgICAgICAgICAgICAgICBncm91cEluZGV4IDwgZ3JvdXBMZW5ndGg7CisgICAgICAg
ICAgICAgICBncm91cEluZGV4KyspIHsKKyAgICAgICAgICAgIC8vIGN1cnJlbnQgb3B0aW9uIGdy
b3VwIG5hbWUgb3IgJycgaWYgbm8gZ3JvdXAKKyAgICAgICAgICAgIG9wdGlvbkdyb3VwTmFtZSA9
IG9wdGlvbkdyb3VwTmFtZXNbZ3JvdXBJbmRleF07CisKKyAgICAgICAgICAgIC8vIGxpc3Qgb2Yg
b3B0aW9ucyBmb3IgdGhhdCBncm91cC4gKGZpcnN0IGl0ZW0gaGFzIHRoZSBwYXJlbnQpCisgICAg
ICAgICAgICBvcHRpb25Hcm91cCA9IG9wdGlvbkdyb3Vwc1tvcHRpb25Hcm91cE5hbWVdOworCisg
ICAgICAgICAgICBpZiAob3B0aW9uR3JvdXBzQ2FjaGUubGVuZ3RoIDw9IGdyb3VwSW5kZXgpIHsK
KyAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBncm93IHRoZSBvcHRpb25Hcm91cHMKKyAgICAg
ICAgICAgICAgZXhpc3RpbmdQYXJlbnQgPSB7CisgICAgICAgICAgICAgICAgZWxlbWVudDogb3B0
R3JvdXBUZW1wbGF0ZS5jbG9uZSgpLmF0dHIoJ2xhYmVsJywgb3B0aW9uR3JvdXBOYW1lKSwKKyAg
ICAgICAgICAgICAgICBsYWJlbDogb3B0aW9uR3JvdXAubGFiZWwKKyAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgZXhpc3RpbmdPcHRpb25zID0gW2V4aXN0aW5nUGFyZW50XTsKKyAgICAg
ICAgICAgICAgb3B0aW9uR3JvdXBzQ2FjaGUucHVzaChleGlzdGluZ09wdGlvbnMpOworICAgICAg
ICAgICAgICBzZWxlY3RFbGVtZW50LmFwcGVuZChleGlzdGluZ1BhcmVudC5lbGVtZW50KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGV4aXN0aW5nT3B0aW9ucyA9IG9wdGlv
bkdyb3Vwc0NhY2hlW2dyb3VwSW5kZXhdOworICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudCA9
IGV4aXN0aW5nT3B0aW9uc1swXTsgIC8vIGVpdGhlciBTRUxFQ1QgKG5vIGdyb3VwKSBvciBPUFRH
Uk9VUCBlbGVtZW50CisKKyAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBPUFRHUk9VUCBsYWJl
bCBpZiBub3QgdGhlIHNhbWUuCisgICAgICAgICAgICAgIGlmIChleGlzdGluZ1BhcmVudC5sYWJl
bCAhPSBvcHRpb25Hcm91cE5hbWUpIHsKKyAgICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudC5l
bGVtZW50LmF0dHIoJ2xhYmVsJywgZXhpc3RpbmdQYXJlbnQubGFiZWwgPSBvcHRpb25Hcm91cE5h
bWUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxhc3RF
bGVtZW50ID0gbnVsbDsgIC8vIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgIGZv
cihpbmRleCA9IDAsIGxlbmd0aCA9IG9wdGlvbkdyb3VwLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uR3JvdXBbaW5kZXhdOwor
ICAgICAgICAgICAgICBpZiAoKGV4aXN0aW5nT3B0aW9uID0gZXhpc3RpbmdPcHRpb25zW2luZGV4
KzFdKSkgeworICAgICAgICAgICAgICAgIC8vIHJldXNlIGVsZW1lbnRzCisgICAgICAgICAgICAg
ICAgbGFzdEVsZW1lbnQgPSBleGlzdGluZ09wdGlvbi5lbGVtZW50OworICAgICAgICAgICAgICAg
IGlmIChleGlzdGluZ09wdGlvbi5sYWJlbCAhPT0gb3B0aW9uLmxhYmVsKSB7CisgICAgICAgICAg
ICAgICAgICBsYXN0RWxlbWVudC50ZXh0KGV4aXN0aW5nT3B0aW9uLmxhYmVsID0gb3B0aW9uLmxh
YmVsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nT3B0
aW9uLmlkICE9PSBvcHRpb24uaWQpIHsKKyAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LnZh
bChleGlzdGluZ09wdGlvbi5pZCA9IG9wdGlvbi5pZCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIC8vIGxhc3RFbGVtZW50LnByb3AoJ3NlbGVjdGVkJykgcHJvdmlkZWQgYnkg
alF1ZXJ5IGhhcyBzaWRlLWVmZmVjdHMKKyAgICAgICAgICAgICAgICBpZiAobGFzdEVsZW1lbnRb
MF0uc2VsZWN0ZWQgIT09IG9wdGlvbi5zZWxlY3RlZCkgeworICAgICAgICAgICAgICAgICAgbGFz
dEVsZW1lbnQucHJvcCgnc2VsZWN0ZWQnLCAoZXhpc3RpbmdPcHRpb24uc2VsZWN0ZWQgPSBvcHRp
b24uc2VsZWN0ZWQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gZ3JvdyBlbGVtZW50cworCisgICAgICAgICAgICAgICAgLy8g
aWYgaXQncyBhIG51bGwgb3B0aW9uCisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5pZCA9PT0g
JycgJiYgbnVsbE9wdGlvbikgeworICAgICAgICAgICAgICAgICAgLy8gcHV0IGJhY2sgdGhlIHBy
ZS1jb21waWxlZCBlbGVtZW50CisgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbnVsbE9wdGlv
bjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgLy8galF1ZXJ5
KHYxLjQuMikgQnVnOiBXZSBzaG91bGQgYmUgYWJsZSB0byBjaGFpbiB0aGUgbWV0aG9kIGNhbGxz
LCBidXQKKyAgICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnkgb24g
c29tZSBicm93c2VyIHRoZSAudGV4dCgpIHJldHVybnMgYSBzdHJpbmcKKyAgICAgICAgICAgICAg
ICAgIC8vIHJhdGhlciB0aGVuIHRoZSBlbGVtZW50LgorICAgICAgICAgICAgICAgICAgKGVsZW1l
bnQgPSBvcHRpb25UZW1wbGF0ZS5jbG9uZSgpKQorICAgICAgICAgICAgICAgICAgICAgIC52YWwo
b3B0aW9uLmlkKQorICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdzZWxlY3RlZCcsIG9wdGlv
bi5zZWxlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgICAudGV4dChvcHRpb24ubGFiZWwpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGV4aXN0aW5nT3B0aW9ucy5wdXNo
KGV4aXN0aW5nT3B0aW9uID0geworICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50
LAorICAgICAgICAgICAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLAorICAgICAgICAgICAg
ICAgICAgICBpZDogb3B0aW9uLmlkLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogb3B0
aW9uLnNlbGVjdGVkCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKGxh
c3RFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICBsYXN0RWxlbWVudC5hZnRlcihlbGVtZW50
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgZXhpc3RpbmdQ
YXJlbnQuZWxlbWVudC5hcHBlbmQoZWxlbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGxhc3RFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gcmVtb3ZlIGFueSBleGNlc3NpdmUgT1BUSU9OcyBpbiBh
IGdyb3VwCisgICAgICAgICAgICBpbmRleCsrOyAvLyBpbmNyZW1lbnQgc2luY2UgdGhlIGV4aXN0
aW5nT3B0aW9uc1swXSBpcyBwYXJlbnQgZWxlbWVudCBub3QgT1BUSU9OCisgICAgICAgICAgICB3
aGlsZShleGlzdGluZ09wdGlvbnMubGVuZ3RoID4gaW5kZXgpIHsKKyAgICAgICAgICAgICAgZXhp
c3RpbmdPcHRpb25zLnBvcCgpLmVsZW1lbnQucmVtb3ZlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfQorICAgICAgICAgIC8vIHJlbW92ZSBhbnkgZXhjZXNzaXZlIE9QVEdST1VQcyBmcm9t
IHNlbGVjdAorICAgICAgICAgIHdoaWxlKG9wdGlvbkdyb3Vwc0NhY2hlLmxlbmd0aCA+IGdyb3Vw
SW5kZXgpIHsKKyAgICAgICAgICAgIG9wdGlvbkdyb3Vwc0NhY2hlLnBvcCgpWzBdLmVsZW1lbnQu
cmVtb3ZlKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9
XTsKKwordmFyIG9wdGlvbkRpcmVjdGl2ZSA9IFsnJGludGVycG9sYXRlJywgZnVuY3Rpb24oJGlu
dGVycG9sYXRlKSB7CisgIHZhciBudWxsU2VsZWN0Q3RybCA9IHsKKyAgICBhZGRPcHRpb246IG5v
b3AsCisgICAgcmVtb3ZlT3B0aW9uOiBub29wCisgIH07CisKKyAgcmV0dXJuIHsKKyAgICByZXN0
cmljdDogJ0UnLAorICAgIHByaW9yaXR5OiAxMDAsCisgICAgY29tcGlsZTogZnVuY3Rpb24oZWxl
bWVudCwgYXR0cikgeworICAgICAgaWYgKGlzVW5kZWZpbmVkKGF0dHIudmFsdWUpKSB7CisgICAg
ICAgIHZhciBpbnRlcnBvbGF0ZUZuID0gJGludGVycG9sYXRlKGVsZW1lbnQudGV4dCgpLCB0cnVl
KTsKKyAgICAgICAgaWYgKCFpbnRlcnBvbGF0ZUZuKSB7CisgICAgICAgICAgYXR0ci4kc2V0KCd2
YWx1ZScsIGVsZW1lbnQudGV4dCgpKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1
cm4gZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7CisgICAgICAgIHZhciBzZWxlY3RD
dHJsTmFtZSA9ICckc2VsZWN0Q29udHJvbGxlcicsCisgICAgICAgICAgICBwYXJlbnQgPSBlbGVt
ZW50LnBhcmVudCgpLAorICAgICAgICAgICAgc2VsZWN0Q3RybCA9IHBhcmVudC5kYXRhKHNlbGVj
dEN0cmxOYW1lKSB8fAorICAgICAgICAgICAgICBwYXJlbnQucGFyZW50KCkuZGF0YShzZWxlY3RD
dHJsTmFtZSk7IC8vIGluIGNhc2Ugd2UgYXJlIGluIG9wdGdyb3VwCisKKyAgICAgICAgaWYgKHNl
bGVjdEN0cmwgJiYgc2VsZWN0Q3RybC5kYXRhYm91bmQpIHsKKyAgICAgICAgICAvLyBGb3Igc29t
ZSByZWFzb24gT3BlcmEgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgaWYgbm90IG92ZXJyaWRkZW4gdGhp
cyBtZXNzZXMgdXAgdGhlIHJlcGVhdGVyLgorICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhl
IHZpZXcgdG8gZHJpdmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBtb2RlbCBhbnl3YXkuCisg
ICAgICAgICAgZWxlbWVudC5wcm9wKCdzZWxlY3RlZCcsIGZhbHNlKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICBzZWxlY3RDdHJsID0gbnVsbFNlbGVjdEN0cmw7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaW50ZXJwb2xhdGVGbikgeworICAgICAgICAgIHNjb3BlLiR3YXRjaChpbnRl
cnBvbGF0ZUZuLCBmdW5jdGlvbiBpbnRlcnBvbGF0ZVdhdGNoQWN0aW9uKG5ld1ZhbCwgb2xkVmFs
KSB7CisgICAgICAgICAgICBhdHRyLiRzZXQoJ3ZhbHVlJywgbmV3VmFsKTsKKyAgICAgICAgICAg
IGlmIChuZXdWYWwgIT09IG9sZFZhbCkgc2VsZWN0Q3RybC5yZW1vdmVPcHRpb24ob2xkVmFsKTsK
KyAgICAgICAgICAgIHNlbGVjdEN0cmwuYWRkT3B0aW9uKG5ld1ZhbCk7CisgICAgICAgICAgfSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2VsZWN0Q3RybC5hZGRPcHRpb24oYXR0ci52
YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBlbGVtZW50LmJpbmQoJyRkZXN0cm95JywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgc2VsZWN0Q3RybC5yZW1vdmVPcHRpb24oYXR0ci52YWx1ZSk7
CisgICAgICAgIH0pOworICAgICAgfTsKKyAgICB9CisgIH0KK31dOworCit2YXIgc3R5bGVEaXJl
Y3RpdmUgPSB2YWx1ZUZuKHsKKyAgcmVzdHJpY3Q6ICdFJywKKyAgdGVybWluYWw6IHRydWUKK30p
OworCisgIC8vdHJ5IHRvIGJpbmQgdG8ganF1ZXJ5IG5vdyBzbyB0aGF0IG9uZSBjYW4gd3JpdGUg
YW5ndWxhci5lbGVtZW50KCkucmVhZCgpCisgIC8vYnV0IHdlIHdpbGwgcmViaW5kIG9uIGJvb3Rz
dHJhcCBhZ2Fpbi4KKyAgYmluZEpRdWVyeSgpOworCisgIHB1Ymxpc2hFeHRlcm5hbEFQSShhbmd1
bGFyKTsKKworICBqcUxpdGUoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIGFuZ3Vs
YXJJbml0KGRvY3VtZW50LCBib290c3RyYXApOworICB9KTsKKworfSkod2luZG93LCBkb2N1bWVu
dCk7Cithbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQpLmZpbmQoJ2hlYWQnKS5hcHBlbmQoJzxzdHls
ZSB0eXBlPSJ0ZXh0L2NzcyI+QGNoYXJzZXQgIlVURi04IjtbbmdcXDpjbG9ha10sW25nLWNsb2Fr
XSxbZGF0YS1uZy1jbG9ha10sW3gtbmctY2xvYWtdLC5uZy1jbG9haywueC1uZy1jbG9ha3tkaXNw
bGF5Om5vbmU7fW5nXFw6Zm9ybXtkaXNwbGF5OmJsb2NrO308L3N0eWxlPicpOwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMv
dG9kb212Yy1jb21tb24vYmFzZS5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93
ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwkocmV2aXNpb24gMCkKKysrIFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NTUgQEAKK2h0bWwsCitib2R5IHsKKyAgICBtYXJnaW46
IDA7CisgICAgcGFkZGluZzogMDsKK30KKworYnV0dG9uIHsKKyAgICBtYXJnaW46IDA7CisgICAg
cGFkZGluZzogMDsKKyAgICBib3JkZXI6IDA7CisgICAgYmFja2dyb3VuZDogbm9uZTsKKyAgICBm
b250LXNpemU6IDEwMCU7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgIGZvbnQt
ZmFtaWx5OiBpbmhlcml0OworICAgIGNvbG9yOiBpbmhlcml0OworICAgIC13ZWJraXQtYXBwZWFy
YW5jZTogbm9uZTsKKyAgICAvKi1tb3otYXBwZWFyYW5jZTogbm9uZTsqLworICAgIC1tcy1hcHBl
YXJhbmNlOiBub25lOworICAgIC1vLWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTog
bm9uZTsKK30KKworYm9keSB7CisgICAgZm9udDogMTRweCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2
ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBi
YWNrZ3JvdW5kOiAjZWFlYWVhIHVybCgnYmcucG5nJyk7CisgICAgY29sb3I6ICM0ZDRkNGQ7Cisg
ICAgd2lkdGg6IDU1MHB4OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIC13ZWJraXQtZm9udC1z
bW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlh
c2VkOworICAgIC1tcy1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW8tZm9udC1z
bW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsK
K30KKworI3RvZG9hcHAgeworICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgYmFja2dyb3VuZDog
cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOworICAgIG1hcmdpbjogMTMwcHggMCA0MHB4IDA7Cisg
ICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAg
Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMnB4OworICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVz
OiAycHg7CisgICAgYm94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLAor
ICAgIDAgMjVweCA1MHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTsKK30KKworI3RvZG9hcHA6YmVm
b3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNmNWQ2
ZDY7CisgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2Y1ZDZkNjsKKyAgICB3aWR0aDogMnB4
OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogNDBweDsK
KyAgICBoZWlnaHQ6IDEwMCU7Cit9CisKKyN0b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBs
YWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKyN0b2RvYXBwIGlucHV0
OjotbW96LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgY29sb3I6
ICNhOWE5YTk7Cit9CisKKyN0b2RvYXBwIGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgdG9wOiAtMTIwcHg7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiA3MHB4Owor
ICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBjb2xv
cjogI2IzYjNiMzsKKyAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOworICAgIHRl
eHQtc2hhZG93OiAtMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpOworICAgIC13ZWJraXQtdGV4
dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5n
OiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgLW1zLXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxl
Z2liaWxpdHk7CisgICAgLW8tdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAg
ICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworfQorCisjaGVhZGVyIHsKKyAg
ICBwYWRkaW5nLXRvcDogMTVweDsKKyAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OworfQorCisj
aGVhZGVyOmJlZm9yZSB7CisgICAgY29udGVudDogJyc7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIHRvcDogMDsKKyAgICByaWdodDogMDsKKyAgICBsZWZ0OiAwOworICAgIGhlaWdodDog
MTVweDsKKyAgICB6LWluZGV4OiAyOworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNmM2
MTVjOworICAgIGJhY2tncm91bmQ6ICM4ZDdkNzc7CisgICAgYmFja2dyb3VuZDogLXdlYmtpdC1n
cmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2JhKDEzMiwgMTEw
LCAxMDAsIDAuOCkpLHRvKHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpKTsKKyAgICBiYWNrZ3JvdW5k
OiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwg
cmdiYSgxMDEsIDg0LCA3NiwgMC44KSk7CisgICAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3Jh
ZGllbnQodG9wLCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAu
OCkpOworICAgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMyLCAx
MTAsIDEwMCwgMC44KSwgcmdiYSgxMDEsIDg0LCA3NiwgMC44KSk7CisgICAgYmFja2dyb3VuZDog
LW1zLWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgx
MDEsIDg0LCA3NiwgMC44KSk7CisgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvcCwg
cmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKKyAgICBm
aWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVu
dFR5cGU9MCxTdGFydENvbG9yU3RyPScjOWQ4YjgzJywgRW5kQ29sb3JTdHI9JyM4NDc2NzAnKTsK
KyAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxcHg7CisgICAgYm9yZGVyLXRvcC1yaWdodC1y
YWRpdXM6IDFweDsKK30KKworI25ldy10b2RvLAorLmVkaXQgeworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKyAgICBtYXJnaW46IDA7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAy
NHB4OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsK
KyAgICBib3JkZXI6IDA7CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBjb2xvcjogaW5oZXJpdDsK
KyAgICBwYWRkaW5nOiA2cHg7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBib3gt
c2hhZG93OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOworICAgIC13ZWJr
aXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1i
b3g7CisgICAgLW1zLWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgLW8tYm94LXNpemluZzog
Ym9yZGVyLWJveDsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC13ZWJraXQtZm9u
dC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlh
bGlhc2VkOworICAgIC1tcy1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW8tZm9u
dC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNl
ZDsKK30KKworI25ldy10b2RvIHsKKyAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTZweCA2MHB4Owor
ICAgIGJvcmRlcjogbm9uZTsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDIpOwor
ICAgIHotaW5kZXg6IDI7CisgICAgYm94LXNoYWRvdzogbm9uZTsKK30KKworI21haW4geworICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB6LWluZGV4OiAyOworICAgIGJvcmRlci10b3A6IDFw
eCBkb3R0ZWQgI2FkYWRhZDsKK30KKworbGFiZWxbZm9yPSd0b2dnbGUtYWxsJ10geworICAgIGRp
c3BsYXk6IG5vbmU7Cit9CisKKyN0b2dnbGUtYWxsIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgdG9wOiAtNDJweDsKKyAgICBsZWZ0OiAtNHB4OworICAgIHdpZHRoOiA0MHB4OworICAg
IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkg
Ki8KK30KKworI3RvZ2dsZS1hbGw6YmVmb3JlIHsKKyAgICBjb250ZW50OiAnwrsnOworICAgIGZv
bnQtc2l6ZTogMjhweDsKKyAgICBjb2xvcjogI2Q5ZDlkOTsKKyAgICBwYWRkaW5nOiAwIDI1cHgg
N3B4OworfQorCisjdG9nZ2xlLWFsbDpjaGVja2VkOmJlZm9yZSB7CisgICAgY29sb3I6ICM3Mzcz
NzM7Cit9CisKKyN0b2RvLWxpc3QgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOwor
ICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkgeworICAgIHBvc2l0aW9u
OiByZWxhdGl2ZTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4
IGRvdHRlZCAjY2NjOworfQorCisjdG9kby1saXN0IGxpOmxhc3QtY2hpbGQgeworICAgIGJvcmRl
ci1ib3R0b206IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZyB7CisgICAgYm9yZGVy
LWJvdHRvbTogbm9uZTsKKyAgICBwYWRkaW5nOiAwOworfQorCisjdG9kby1saXN0IGxpLmVkaXRp
bmcgLmVkaXQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdpZHRoOiA1MDZweDsKKyAgICBw
YWRkaW5nOiAxM3B4IDE3cHggMTJweCAxN3B4OworICAgIG1hcmdpbjogMCAwIDAgNDNweDsKK30K
KworI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKKyAgICBkaXNwbGF5OiBub25lOworfQor
CisjdG9kby1saXN0IGxpIC50b2dnbGUgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICB3
aWR0aDogNDBweDsKKyAgICAvKiBhdXRvLCBzaW5jZSBub24tV2ViS2l0IGJyb3dzZXJzIGRvZXNu
J3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCisgICAgaGVpZ2h0OiBhdXRvOworICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgYm90dG9tOiAwOworICAgIG1hcmdpbjog
YXV0byAwOworICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICAvKi1tb3otYXBwZWFyYW5jZTogbm9uZTsqLworICAg
IC1tcy1hcHBlYXJhbmNlOiBub25lOworICAgIC1vLWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBw
ZWFyYW5jZTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVyIHsKKyAgICBj
b250ZW50OiAn4pyUJzsKKyAgICBsaW5lLWhlaWdodDogNDNweDsgLyogNDAgKyBhIGNvdXBsZSBv
ZiBwaXhlbHMgdmlzdWFsIGFkanVzdG1lbnQgKi8KKyAgICBmb250LXNpemU6IDIwcHg7CisgICAg
Y29sb3I6ICNkOWQ5ZDk7CisgICAgdGV4dC1zaGFkb3c6IDAgLTFweCAwICNiZmJmYmY7Cit9CisK
KyN0b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVyIHsKKyAgICBjb2xvcjogIzg1YWRh
NzsKKyAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjNjY5OTkxOworICAgIGJvdHRvbTogMXB4Owor
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKworI3RvZG8tbGlzdCBsaSBsYWJlbCB7CisgICAg
d29yZC1icmVhazogYnJlYWstd29yZDsKKyAgICBwYWRkaW5nOiAxNXB4OworICAgIG1hcmdpbi1s
ZWZ0OiA0NXB4OworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cisg
ICAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAwLjRzOworICAgIC1tb3otdHJhbnNpdGlvbjog
Y29sb3IgMC40czsKKyAgICAtbXMtdHJhbnNpdGlvbjogY29sb3IgMC40czsKKyAgICAtby10cmFu
c2l0aW9uOiBjb2xvciAwLjRzOworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuNHM7Cit9CisKKyN0
b2RvLWxpc3QgbGkuY29tcGxldGVkIGxhYmVsIHsKKyAgICBjb2xvcjogI2E5YTlhOTsKKyAgICB0
ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKK30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJv
eSB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9w
OiAwOworICAgIHJpZ2h0OiAxMHB4OworICAgIGJvdHRvbTogMDsKKyAgICB3aWR0aDogNDBweDsK
KyAgICBoZWlnaHQ6IDQwcHg7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgZm9udC1zaXplOiAy
MnB4OworICAgIGNvbG9yOiAjYTg4YThhOworICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAu
MnM7CisgICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4yczsKKyAgICAtbXMtdHJhbnNpdGlvbjog
YWxsIDAuMnM7CisgICAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMnM7CisgICAgdHJhbnNpdGlvbjog
YWxsIDAuMnM7Cit9CisKKyN0b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIgeworICAgIHRleHQt
c2hhZG93OiAwIDAgMXB4ICMwMDAsCisgICAgIDAgMCAxMHB4IHJnYmEoMTk5LCAxMDcsIDEwNywg
MC44KTsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4zKTsKKyAgICAtbW96LXRyYW5z
Zm9ybTogc2NhbGUoMS4zKTsKKyAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLjMpOworICAgIC1v
LXRyYW5zZm9ybTogc2NhbGUoMS4zKTsKKyAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMyk7Cit9CisK
KyN0b2RvLWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfinJYnOworfQor
CisjdG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBibG9jazsKK30K
KworI3RvZG8tbGlzdCBsaSAuZWRpdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworI3RvZG8t
bGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Cit9
CisKKyNmb290ZXIgeworICAgIGNvbG9yOiAjNzc3OworICAgIHBhZGRpbmc6IDAgMTVweDsKKyAg
ICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9tOiAtMzFweDsK
KyAgICBsZWZ0OiAwOworICAgIGhlaWdodDogMjBweDsKKyAgICB6LWluZGV4OiAxOworICAgIHRl
eHQtYWxpZ246IGNlbnRlcjsKK30KKworI2Zvb3RlcjpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICcn
OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDMx
cHg7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDUwcHg7CisgICAgei1pbmRleDogLTE7Cisg
ICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwKKyAgICAwIDZweCAw
IC0zcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpLAorICAgIDAgN3B4IDFweCAtM3B4IHJnYmEo
MCwgMCwgMCwgMC4zKSwKKyAgICAwIDQzcHggMCAtNnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44
KSwKKyAgICAwIDQ0cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOworfQorCisjdG9kby1j
b3VudCB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworI2Zp
bHRlcnMgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qtc3R5bGU6
IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGxlZnQ6
IDA7Cit9CisKKyNmaWx0ZXJzIGxpIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7Cit9CisKKyNmaWx0
ZXJzIGxpIGEgeworICAgIGNvbG9yOiAjODM3NTZmOworICAgIG1hcmdpbjogMnB4OworICAgIHRl
eHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworI2ZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAg
Zm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKyNjbGVhci1jb21wbGV0ZWQgeworICAgIGZsb2F0OiBy
aWdodDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7Cisg
ICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwg
MC4xKTsKKyAgICBmb250LXNpemU6IDExcHg7CisgICAgcGFkZGluZzogMCAxMHB4OworICAgIGJv
cmRlci1yYWRpdXM6IDNweDsKKyAgICBib3gtc2hhZG93OiAwIC0xcHggMCAwIHJnYmEoMCwgMCwg
MCwgMC4yKTsKK30KKworI2NsZWFyLWNvbXBsZXRlZDpob3ZlciB7CisgICAgYmFja2dyb3VuZDog
cmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgICBib3gtc2hhZG93OiAwIC0xcHggMCAwIHJnYmEoMCwg
MCwgMCwgMC4zKTsKK30KKworI2luZm8geworICAgIG1hcmdpbjogNjVweCBhdXRvIDA7CisgICAg
Y29sb3I6ICNhNmE2YTY7CisgICAgZm9udC1zaXplOiAxMnB4OworICAgIHRleHQtc2hhZG93OiAw
IDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7
Cit9CisKKyNpbmZvIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworfQorCisvKgorICAgIEhhY2sg
dG8gcmVtb3ZlIGJhY2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgorICAgIENhbid0IHVzZSBp
dCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZpcmVmb3ggYW5kIE9w
ZXJhCisqLworQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRp
bzowKSB7CisgICAgI3RvZ2dsZS1hbGwsCisgICAgI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAg
ICBiYWNrZ3JvdW5kOiBub25lOworICAgIH0KKworICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7
CisgICAgaGVpZ2h0OiA0MHB4OworICAgIH0KKworICAgICN0b2dnbGUtYWxsIHsKKyAgICB0b3A6
IC01NnB4OworICAgIGxlZnQ6IC0xNXB4OworICAgIHdpZHRoOiA2NXB4OworICAgIGhlaWdodDog
NDFweDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAgICB0cmFuc2Zv
cm06IHJvdGF0ZSg5MGRlZyk7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFw
cGVhcmFuY2U6IG5vbmU7CisgICAgfQorfQorCisuaGlkZGVueworICAgIGRpc3BsYXk6bm9uZTsK
K30KKworaHIgeworICAgIG1hcmdpbjogMjBweCAwOworICAgIGJvcmRlcjogMDsKKyAgICBib3Jk
ZXItdG9wOiAxcHggZGFzaGVkICNDNUM1QzU7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hl
ZCAjRjdGN0Y3OworfQorCisubGVhcm4gYSB7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAg
ICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6ICNiODNmNDU7Cit9CisKKy5sZWFy
biBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgICBjb2xvcjog
Izc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJuIGg0LAorLmxlYXJuIGg1IHsKKyAgICBt
YXJnaW46IDEwcHggMDsKKyAgICBmb250LXdlaWdodDogNTAwOworICAgIGxpbmUtaGVpZ2h0OiAx
LjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFybiBoMyB7CisgICAgZm9udC1zaXplOiAy
NHB4OworfQorCisubGVhcm4gaDQgeworICAgIGZvbnQtc2l6ZTogMThweDsKK30KKworLmxlYXJu
IGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIGZvbnQtc2l6ZTogMTRweDsKK30KKwor
LmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsK
K30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKK30KKworLmxlYXJuIHAg
eworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGxpbmUt
aGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwOwor
fQorCisucXVvdGUgeworICAgIGJvcmRlcjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4
IDA7Cit9CisKKy5xdW90ZSBwIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90
ZSBwOmJlZm9yZSB7CisgICAgY29udGVudDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1MHB4Owor
ICAgIG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBw
eDsKKyAgICBsZWZ0OiAzcHg7Cit9CisKKy5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn
4oCdJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisK
Ky5xdW90ZSBmb290ZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00
MHB4OworICAgIHJpZ2h0OiAwOworfQorCisucXVvdGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVy
LXJhZGl1czogM3B4OworfQorCisucXVvdGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1
cHg7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJibGUgewor
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91
bmQ6IHJnYmEoMCwgMCwgMCwgLjA0KTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5z
cGVlY2gtYnViYmxlOmFmdGVyIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgdG9wOiAxMDAlOworICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNw
eCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAs
IC4wNCk7Cit9CisKKy8qKmJvZHkqLy5sZWFybi1iYXIgPiAubGVhcm4geworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMjcycHg7CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDog
LTMwMHB4OworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAg
IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpOworICAgIHRyYW5zaXRp
b24tcHJvcGVydHk6IGxlZnQ7CisgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisK
K0BtZWRpYSAobWluLXdpZHRoOiA4OTlweCkgeworICAgIC8qKmJvZHkqLy5sZWFybi1iYXIgewor
ICAgIHdpZHRoOiBhdXRvOworICAgIG1hcmdpbjogMCAwIDAgMzAwcHg7CisgICAgfQorICAgIC8q
KmJvZHkqLy5sZWFybi1iYXIgPiAubGVhcm4geworICAgIGxlZnQ6IDhweDsKKyAgICB9CisgICAg
LyoqYm9keSovLmxlYXJuLWJhciAjdG9kb2FwcCB7CisgICAgd2lkdGg6IDU1MHB4OworICAgIG1h
cmdpbjogMTMwcHggYXV0byA0MHB4IGF1dG87CisgICAgfQorfQpJbmRleDogUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFy
anMvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qcwko
cmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1j
b21tb24vYmFzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOSBAQAorKGZ1bmN0aW9u
ICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvLyBVbmRlcnNjb3JlJ3MgVGVtcGxhdGUg
TW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2YgdW5kZXJzY29yZWpzLm9yZworICAgIHZhciBfID0g
KGZ1bmN0aW9uIChfKSB7CisgICAgXy5kZWZhdWx0cyA9IGZ1bmN0aW9uIChvYmplY3QpIHsKKyAg
ICBpZiAoIW9iamVjdCkgeworICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorICAgIGZvciAodmFy
IGFyZ3NJbmRleCA9IDEsIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBhcmdzSW5kZXgg
PCBhcmdzTGVuZ3RoOyBhcmdzSW5kZXgrKykgeworICAgIHZhciBpdGVyYWJsZSA9IGFyZ3VtZW50
c1thcmdzSW5kZXhdOworICAgIGlmIChpdGVyYWJsZSkgeworICAgIGZvciAodmFyIGtleSBpbiBp
dGVyYWJsZSkgeworICAgIGlmIChvYmplY3Rba2V5XSA9PSBudWxsKSB7CisgICAgb2JqZWN0W2tl
eV0gPSBpdGVyYWJsZVtrZXldOworICAgIH0KKyAgICB9CisgICAgfQorICAgIH0KKyAgICByZXR1
cm4gb2JqZWN0OworICAgIH0KKworICAgIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBF
UkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQorICAgIC8vIGZvbGxvd2lu
ZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4KKyAgICBf
LnRlbXBsYXRlU2V0dGluZ3MgPSB7CisgICAgZXZhbHVhdGUgICAgOiAvPCUoW1xzXFNdKz8pJT4v
ZywKKyAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xzXFNdKz8pJT4vZywKKyAgICBlc2NhcGUgICAg
ICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgIH07CisKKyAgICAvLyBXaGVuIGN1c3RvbWl6aW5n
IGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuCisgICAg
Ly8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBv
bmUgdGhhdCBpcworICAgIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLgorICAgIHZhciBub01h
dGNoID0gLyguKV4vOworCisgICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNj
YXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKKyAgICAvLyBzdHJpbmcgbGl0ZXJh
bC4KKyAgICB2YXIgZXNjYXBlcyA9IHsKKyAgICAiJyI6ICAgICAgIiciLAorICAgICdcXCc6ICAg
ICAnXFwnLAorICAgICdccic6ICAgICAncicsCisgICAgJ1xuJzogICAgICduJywKKyAgICAnXHQn
OiAgICAgJ3QnLAorICAgICdcdTIwMjgnOiAndTIwMjgnLAorICAgICdcdTIwMjknOiAndTIwMjkn
CisgICAgfTsKKworICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1MjAy
OS9nOworCisgICAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpv
aG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi4KKyAgICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcg
aGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsCisgICAg
Ly8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUu
CisgICAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIGRhdGEsIHNldHRpbmdzKSB7CisgICAg
dmFyIHJlbmRlcjsKKyAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRl
bXBsYXRlU2V0dGluZ3MpOworCisgICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJl
Z3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCisgICAgdmFyIG1hdGNoZXIgPSBuZXcg
UmVnRXhwKFsKKyAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAo
c2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAorICAgIChzZXR0aW5ncy5l
dmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKKyAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7
CisKKyAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBs
aXRlcmFscyBhcHByb3ByaWF0ZWx5LgorICAgIHZhciBpbmRleCA9IDA7CisgICAgdmFyIHNvdXJj
ZSA9ICJfX3ArPSciOworICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwg
ZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkgeworICAgIHNvdXJjZSArPSB0
ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpCisgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24o
bWF0Y2gpIHsgcmV0dXJuICdcXCcgKyBlc2NhcGVzW21hdGNoXTsgfSk7CisKKyAgICBpZiAoZXNj
YXBlKSB7CisgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUgKyAiKSk9PW51bGw/
Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICB9CisgICAgaWYgKGludGVycG9sYXRlKSB7Cisg
ICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSArICIpKT09bnVsbD8nJzpf
X3QpK1xuJyI7CisgICAgfQorICAgIGlmIChldmFsdWF0ZSkgeworICAgIHNvdXJjZSArPSAiJztc
biIgKyBldmFsdWF0ZSArICJcbl9fcCs9JyI7CisgICAgfQorICAgIGluZGV4ID0gb2Zmc2V0ICsg
bWF0Y2gubGVuZ3RoOworICAgIHJldHVybiBtYXRjaDsKKyAgICB9KTsKKyAgICBzb3VyY2UgKz0g
Iic7XG4iOworCisgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBk
YXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS4KKyAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBz
b3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxuJzsKKworICAgIHNvdXJj
ZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAgInBy
aW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iICsKKyAgICBz
b3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICB0cnkgeworICAgIHJlbmRlciA9IG5ldyBG
dW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpOworICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICBlLnNvdXJjZSA9IHNvdXJjZTsKKyAgICB0aHJvdyBlOworICAgIH0K
KworICAgIGlmIChkYXRhKSByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOworICAgIHZhciB0ZW1wbGF0
ZSA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwg
Xyk7CisgICAgfTsKKworICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIHNvdXJj
ZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi4KKyAgICB0ZW1wbGF0ZS5zb3Vy
Y2UgPSAnZnVuY3Rpb24oJyArIChzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAnKXtcbicg
KyBzb3VyY2UgKyAnfSc7CisKKyAgICByZXR1cm4gdGVtcGxhdGU7CisgICAgfTsKKworICAgIHJl
dHVybiBfOworICAgIH0pKHt9KTsKKworICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3Rv
ZG9tdmMuY29tJykgeworICAgIHdpbmRvdy5fZ2FxID0gW1snX3NldEFjY291bnQnLCdVQS0zMTA4
MTA2Mi0xJ10sWydfdHJhY2tQYWdldmlldyddXTsoZnVuY3Rpb24oZCx0KXt2YXIgZz1kLmNyZWF0
ZUVsZW1lbnQodCkscz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdO2cuc3JjPScvL3d3dy5n
b29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyc7cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMp
fShkb2N1bWVudCwnc2NyaXB0JykpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkg
eworICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3Rhc3RlanMuZ2l0aHViLmlvJykgewor
ICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMuZ2l0aHVi
LmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsKKyAgICB9CisgICAgfQorCisgICAgZnVuY3Rp
b24gZmluZFJvb3QoKSB7CisgICAgdmFyIGJhc2U7CisKKyAgICBbL2xhYnMvLCAvXHcqLWV4YW1w
bGVzL10uZm9yRWFjaChmdW5jdGlvbiAoaHJlZikgeworICAgIHZhciBtYXRjaCA9IGxvY2F0aW9u
LmhyZWYubWF0Y2goaHJlZik7CisKKyAgICBpZiAoIWJhc2UgJiYgbWF0Y2gpIHsKKyAgICBiYXNl
ID0gbG9jYXRpb24uaHJlZi5pbmRleE9mKG1hdGNoKTsKKyAgICB9CisgICAgfSk7CisKKyAgICBy
ZXR1cm4gbG9jYXRpb24uaHJlZi5zdWJzdHIoMCwgYmFzZSk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZ2V0RmlsZShmaWxlLCBjYWxsYmFjaykgeworICAgIGlmICghbG9jYXRpb24uaG9zdCkgewor
ICAgIHJldHVybiBjb25zb2xlLmluZm8oJ01pc3MgdGhlIGluZm8gYmFyPyBSdW4gVG9kb01WQyBm
cm9tIGEgc2VydmVyIHRvIGF2b2lkIGEgY3Jvc3Mtb3JpZ2luIGVycm9yLicpOworICAgIH0KKwor
ICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKworICAgIHhoci5vcGVuKCdHRVQn
LCBmaW5kUm9vdCgpICsgZmlsZSwgdHJ1ZSk7CisgICAgeGhyLnNlbmQoKTsKKworICAgIHhoci5v
bmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiBjYWxs
YmFjaykgeworICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgIH0KKyAgICB9Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7CisgICAgaWYg
KCEodGhpcyBpbnN0YW5jZW9mIExlYXJuKSkgeworICAgIHJldHVybiBuZXcgTGVhcm4obGVhcm5K
U09OLCBjb25maWcpOworICAgIH0KKworICAgIHZhciB0ZW1wbGF0ZSwgZnJhbWV3b3JrOworCisg
ICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdvYmplY3QnKSB7CisgICAgdHJ5IHsKKyAgICBs
ZWFybkpTT04gPSBKU09OLnBhcnNlKGxlYXJuSlNPTik7CisgICAgfSBjYXRjaCAoZSkgeworICAg
IHJldHVybjsKKyAgICB9CisgICAgfQorCisgICAgaWYgKGNvbmZpZykgeworICAgIHRlbXBsYXRl
ID0gY29uZmlnLnRlbXBsYXRlOworICAgIGZyYW1ld29yayA9IGNvbmZpZy5mcmFtZXdvcms7Cisg
ICAgfQorCisgICAgaWYgKCF0ZW1wbGF0ZSAmJiBsZWFybkpTT04udGVtcGxhdGVzKSB7CisgICAg
dGVtcGxhdGUgPSBsZWFybkpTT04udGVtcGxhdGVzLnRvZG9tdmM7CisgICAgfQorCisgICAgaWYg
KCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScp
KSB7CisgICAgZnJhbWV3b3JrID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3
b3JrXScpLmdldEF0dHJpYnV0ZSgnZGF0YS1mcmFtZXdvcmsnKTsKKyAgICB9CisKKworICAgIGlm
ICh0ZW1wbGF0ZSAmJiBsZWFybkpTT05bZnJhbWV3b3JrXSkgeworICAgIHRoaXMuZnJhbWV3b3Jr
SlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOworICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0
ZTsKKworICAgIHRoaXMuYXBwZW5kKCk7CisgICAgfQorICAgIH0KKworICAgIExlYXJuLnByb3Rv
dHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGFzaWRlID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnYXNpZGUnKTsKKyAgICBhc2lkZS5pbm5lckhUTUwgPSBfLnRlbXBsYXRlKHRo
aXMudGVtcGxhdGUsIHRoaXMuZnJhbWV3b3JrSlNPTik7CisgICAgYXNpZGUuY2xhc3NOYW1lID0g
J2xlYXJuJzsKKworICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKKyAgICB2YXIgZGVtb0xpbmtz
ID0gYXNpZGUucXVlcnlTZWxlY3RvckFsbCgnLmRlbW8tbGluaycpOworICAgIEFycmF5LnByb3Rv
dHlwZS5mb3JFYWNoLmNhbGwoZGVtb0xpbmtzLCBmdW5jdGlvbiAoZGVtb0xpbmspIHsKKyAgICBk
ZW1vTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBmaW5kUm9vdCgpICsgZGVtb0xpbmsuZ2V0QXR0
cmlidXRlKCdocmVmJykpOworICAgIH0pOworCisgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUg
PSAoZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsKKyAgICBk
b2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsIGFzaWRlLm91dGVy
SFRNTCk7CisgICAgfTsKKworICAgIHJlZGlyZWN0KCk7CisgICAgZ2V0RmlsZSgnbGVhcm4uanNv
bicsIExlYXJuKTsKK30pKCk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9hcHAuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvYXBwLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9h
bmd1bGFyanMvanMvYXBwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKy8qZ2xv
YmFsIGFuZ3VsYXIgKi8KKy8qanNoaW50IHVudXNlZDpmYWxzZSAqLworJ3VzZSBzdHJpY3QnOwor
CisvKioKKyAqIFRoZSBtYWluIFRvZG9NVkMgYXBwIG1vZHVsZQorICoKKyAqIEB0eXBlIHthbmd1
bGFyLk1vZHVsZX0KKyAqLwordmFyIHRvZG9tdmMgPSBhbmd1bGFyLm1vZHVsZSgndG9kb212Yycs
IFtdKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2NvbnRyb2xsZXJzL3RvZG9DdHJsLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2NvbnRyb2xsZXJzL3RvZG9DdHJsLmpzCShy
ZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvY29udHJvbGxlcnMvdG9kb0N0cmwuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLypnbG9iYWwgdG9kb212YywgYW5ndWxh
ciAqLworJ3VzZSBzdHJpY3QnOworCisvKioKKyAqIFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRo
ZSBhcHAuIFRoZSBjb250cm9sbGVyOgorICogLSByZXRyaWV2ZXMgYW5kIHBlcnNpc3RzIHRoZSBt
b2RlbCB2aWEgdGhlIHRvZG9TdG9yYWdlIHNlcnZpY2UKKyAqIC0gZXhwb3NlcyB0aGUgbW9kZWwg
dG8gdGhlIHRlbXBsYXRlIGFuZCBwcm92aWRlcyBldmVudCBoYW5kbGVycworICovCit0b2RvbXZj
LmNvbnRyb2xsZXIoJ1RvZG9DdHJsJywgZnVuY3Rpb24gVG9kb0N0cmwoJHNjb3BlLCAkbG9jYXRp
b24sIHRvZG9TdG9yYWdlLCBmaWx0ZXJGaWx0ZXIpIHsKKyAgICB2YXIgdG9kb3MgPSAkc2NvcGUu
dG9kb3MgPSB0b2RvU3RvcmFnZS5nZXQoKTsKKworICAgICRzY29wZS5uZXdUb2RvID0gJyc7Cisg
ICAgJHNjb3BlLmVkaXRlZFRvZG8gPSBudWxsOworCisgICAgJHNjb3BlLiR3YXRjaCgndG9kb3Mn
LCBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlKSB7CisgICAgJHNjb3BlLnJlbWFpbmluZ0Nv
dW50ID0gZmlsdGVyRmlsdGVyKHRvZG9zLCB7IGNvbXBsZXRlZDogZmFsc2UgfSkubGVuZ3RoOwor
ICAgICRzY29wZS5jb21wbGV0ZWRDb3VudCA9IHRvZG9zLmxlbmd0aCAtICRzY29wZS5yZW1haW5p
bmdDb3VudDsKKyAgICAkc2NvcGUuYWxsQ2hlY2tlZCA9ICEkc2NvcGUucmVtYWluaW5nQ291bnQ7
CisgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkgeyAvLyBUaGlzIHByZXZlbnRzIHVubmVl
ZGVkIGNhbGxzIHRvIHRoZSBsb2NhbCBzdG9yYWdlCisgICAgdG9kb1N0b3JhZ2UucHV0KHRvZG9z
KTsKKyAgICB9CisgICAgfSwgdHJ1ZSk7CisKKyAgICBpZiAoJGxvY2F0aW9uLnBhdGgoKSA9PT0g
JycpIHsKKyAgICAkbG9jYXRpb24ucGF0aCgnLycpOworICAgIH0KKworICAgICRzY29wZS5sb2Nh
dGlvbiA9ICRsb2NhdGlvbjsKKworICAgICRzY29wZS4kd2F0Y2goJ2xvY2F0aW9uLnBhdGgoKScs
IGZ1bmN0aW9uIChwYXRoKSB7CisgICAgJHNjb3BlLnN0YXR1c0ZpbHRlciA9IChwYXRoID09PSAn
L2FjdGl2ZScpID8KKyAgICB7IGNvbXBsZXRlZDogZmFsc2UgfSA6IChwYXRoID09PSAnL2NvbXBs
ZXRlZCcpID8KKyAgICB7IGNvbXBsZXRlZDogdHJ1ZSB9IDogbnVsbDsKKyAgICB9KTsKKworICAg
ICRzY29wZS5hZGRUb2RvID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBuZXdUb2RvID0gJHNjb3Bl
Lm5ld1RvZG8udHJpbSgpOworICAgIGlmICghbmV3VG9kby5sZW5ndGgpIHsKKyAgICByZXR1cm47
CisgICAgfQorCisgICAgdG9kb3MucHVzaCh7CisgICAgdGl0bGU6IG5ld1RvZG8sCisgICAgY29t
cGxldGVkOiBmYWxzZQorICAgIH0pOworCisgICAgJHNjb3BlLm5ld1RvZG8gPSAnJzsKKyAgICB9
OworCisgICAgJHNjb3BlLmVkaXRUb2RvID0gZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAkc2NvcGUu
ZWRpdGVkVG9kbyA9IHRvZG87CisgICAgLy8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8gdG8gcmVz
dG9yZSBpdCBvbiBkZW1hbmQuCisgICAgJHNjb3BlLm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIuZXh0
ZW5kKHt9LCB0b2RvKTsKKyAgICB9OworCisgICAgJHNjb3BlLmRvbmVFZGl0aW5nID0gZnVuY3Rp
b24gKHRvZG8pIHsKKyAgICAkc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7CisgICAgdG9kby50aXRs
ZSA9IHRvZG8udGl0bGUudHJpbSgpOworCisgICAgaWYgKCF0b2RvLnRpdGxlKSB7CisgICAgJHNj
b3BlLnJlbW92ZVRvZG8odG9kbyk7CisgICAgfQorICAgIH07CisKKyAgICAkc2NvcGUucmV2ZXJ0
RWRpdGluZyA9IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgdG9kb3NbdG9kb3MuaW5kZXhPZih0b2Rv
KV0gPSAkc2NvcGUub3JpZ2luYWxUb2RvOworICAgICRzY29wZS5kb25lRWRpdGluZygkc2NvcGUu
b3JpZ2luYWxUb2RvKTsKKyAgICB9OworCisgICAgJHNjb3BlLnJlbW92ZVRvZG8gPSBmdW5jdGlv
biAodG9kbykgeworICAgIHRvZG9zLnNwbGljZSh0b2Rvcy5pbmRleE9mKHRvZG8pLCAxKTsKKyAg
ICB9OworCisgICAgJHNjb3BlLmNsZWFyQ29tcGxldGVkVG9kb3MgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgJHNjb3BlLnRvZG9zID0gdG9kb3MgPSB0b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKHZhbCkgewor
ICAgIHJldHVybiAhdmFsLmNvbXBsZXRlZDsKKyAgICB9KTsKKyAgICB9OworCisgICAgJHNjb3Bl
Lm1hcmtBbGwgPSBmdW5jdGlvbiAoY29tcGxldGVkKSB7CisgICAgdG9kb3MuZm9yRWFjaChmdW5j
dGlvbiAodG9kbykgeworICAgIHRvZG8uY29tcGxldGVkID0gY29tcGxldGVkOworICAgIH0pOwor
ICAgIH07Cit9KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXMvdG9kb0JsdXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvZGlyZWN0aXZlcy90b2RvQmx1ci5q
cwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXMvdG9kb0JsdXIu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorLypnbG9iYWwgdG9kb212YyAqLwor
J3VzZSBzdHJpY3QnOworCisvKioKKyAqIERpcmVjdGl2ZSB0aGF0IGV4ZWN1dGVzIGFuIGV4cHJl
c3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIGxvc2VzIGZvY3VzCisgKi8K
K3RvZG9tdmMuZGlyZWN0aXZlKCd0b2RvQmx1cicsIGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4g
ZnVuY3Rpb24gKHNjb3BlLCBlbGVtLCBhdHRycykgeworICAgIGVsZW0uYmluZCgnYmx1cicsIGZ1
bmN0aW9uICgpIHsKKyAgICBzY29wZS4kYXBwbHkoYXR0cnMudG9kb0JsdXIpOworICAgIH0pOwor
ICAgIH07Cit9KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXMvdG9kb0VzY2Fw
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9Fc2Nh
cGUuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9F
c2NhcGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAorLypnbG9iYWwgdG9kb212
YyAqLworJ3VzZSBzdHJpY3QnOworCisvKioKKyAqIERpcmVjdGl2ZSB0aGF0IGV4ZWN1dGVzIGFu
IGV4cHJlc3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIGdldHMKKyAqIGFu
IGBlc2NhcGVgIGtleWRvd24gZXZlbnQuCisgKi8KK3RvZG9tdmMuZGlyZWN0aXZlKCd0b2RvRXNj
YXBlJywgZnVuY3Rpb24gKCkgeworICAgIHZhciBFU0NBUEVfS0VZID0gMjc7CisgICAgcmV0dXJu
IGZ1bmN0aW9uIChzY29wZSwgZWxlbSwgYXR0cnMpIHsKKyAgICBlbGVtLmJpbmQoJ2tleWRvd24n
LCBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFX0tF
WSkgeworICAgIHNjb3BlLiRhcHBseShhdHRycy50b2RvRXNjYXBlKTsKKyAgICB9CisgICAgfSk7
CisgICAgfTsKK30pOworCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9G
b2N1cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9G
b2N1cy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXMvdG9k
b0ZvY3VzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKKy8qZ2xvYmFsIHRvZG9t
dmMgKi8KKyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBEaXJlY3RpdmUgdGhhdCBwbGFjZXMgZm9j
dXMgb24gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZSBleHByZXNzaW9uIGl0
IGJpbmRzIHRvIGV2YWx1YXRlcyB0byB0cnVlCisgKi8KK3RvZG9tdmMuZGlyZWN0aXZlKCd0b2Rv
Rm9jdXMnLCBmdW5jdGlvbiB0b2RvRm9jdXMoJHRpbWVvdXQpIHsKKyAgICByZXR1cm4gZnVuY3Rp
b24gKHNjb3BlLCBlbGVtLCBhdHRycykgeworICAgIHNjb3BlLiR3YXRjaChhdHRycy50b2RvRm9j
dXMsIGZ1bmN0aW9uIChuZXdWYWwpIHsKKyAgICBpZiAobmV3VmFsKSB7CisgICAgJHRpbWVvdXQo
ZnVuY3Rpb24gKCkgeworICAgIGVsZW1bMF0uZm9jdXMoKTsKKyAgICB9LCAwLCBmYWxzZSk7Cisg
ICAgfQorICAgIH0pOworICAgIH07Cit9KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL3NlcnZp
Y2VzL3RvZG9TdG9yYWdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL3NlcnZp
Y2VzL3RvZG9TdG9yYWdlLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvc2Vy
dmljZXMvdG9kb1N0b3JhZ2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorLypn
bG9iYWwgdG9kb212YyAqLworJ3VzZSBzdHJpY3QnOworCisvKioKKyAqIFNlcnZpY2VzIHRoYXQg
cGVyc2lzdHMgYW5kIHJldHJpZXZlcyBUT0RPcyBmcm9tIGxvY2FsU3RvcmFnZQorICovCit0b2Rv
bXZjLmZhY3RvcnkoJ3RvZG9TdG9yYWdlJywgZnVuY3Rpb24gKCkgeworICAgIHZhciBTVE9SQUdF
X0lEID0gJ3RvZG9zLWFuZ3VsYXJqcyc7CisKKyAgICB2YXIgbG9jYWxTdG9yYWdlID0geworICAg
ICAgICBnZXRJdGVtOiBmdW5jdGlvbiAoaWQpIHsgdGhpc1tpZF07IH0sCisgICAgICAgIHNldEl0
ZW06IGZ1bmN0aW9uIChpZCwgdmFsdWUpIHsgdGhpc1tpZF0gPSB2YWx1ZTsgfQorICAgIH07CisK
KyAgICByZXR1cm4geworICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBKU09OLnBh
cnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfSUQpIHx8ICdbXScpOworICAgIH0sCisK
KyAgICBwdXQ6IGZ1bmN0aW9uICh0b2RvcykgeworICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNU
T1JBR0VfSUQsIEpTT04uc3RyaW5naWZ5KHRvZG9zKSk7CisgICAgfQorICAgIH07Cit9KTsKSW5k
ZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvcGFja2FnZS5qc29uCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YW5ndWxhcmpzL3Rlc3QvcGFja2FnZS5qc29uCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFy
anMvdGVzdC9wYWNrYWdlLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorewor
ICAibmFtZSI6ICJ0b2RvbXZjLWFuZ3VsYXItdGVzdHMiLAorICAiZGVzY3JpcHRpb24iOiAiVW5p
dCB0ZXN0cyBmb3IgdGhlIEFuZ3VsYXJKUyBleGFtcGxlIG9mIFRvZG9NVkMiLAorICAiYXV0aG9y
IjogIlBhc2NhbCBIYXJ0aWcgPHBoYXJ0aWdAcmRyZWkubmV0PiIsCisgICJ2ZXJzaW9uIjogIjEu
MC4wIiwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAia2FybWEiOiAifjAuOC41IgorICB9
LAorICAic2NyaXB0cyI6IHsKKyAgICAidGVzdCI6ICJrYXJtYSBzdGFydCBjb25maWcvdGVzdGFj
dWxhci5jb25mLmpzIgorICB9LAorICAiZGVwZW5kZW5jaWVzIjoge30KK30KSW5kZXg6IFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YW5ndWxhcmpzL3Rlc3QvcmVhZG1lLm1kCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rl
c3QvcmVhZG1lLm1kCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvdGVzdC9yZWFkbWUu
bWQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3IEBACitBbmd1bGFyIFVuaXQgVGVzdHMKKz09
PT09PT09PT09PT09PT09PQorCitUbyBydW4gdGhlIHRlc3Qgc3VpdGUsIHJ1biB0aGVzZSBjb21t
YW5kczoKKworICAgIG5wbSBpbnN0YWxsCisgICAgbnBtIHRlc3QKSW5kZXg6IFBlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxh
cmpzL3Rlc3QvY29uZmlnL3Rlc3RhY3VsYXIuY29uZi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Fu
Z3VsYXJqcy90ZXN0L2NvbmZpZy90ZXN0YWN1bGFyLmNvbmYuanMJKHJldmlzaW9uIDApCisrKyBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2FuZ3VsYXJqcy90ZXN0L2NvbmZpZy90ZXN0YWN1bGFyLmNvbmYuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNCBAQAorYmFzZVBhdGggPSAnLi4vLi4vJzsKKworZmlsZXMgPSBbCisg
IEpBU01JTkUsCisgIEpBU01JTkVfQURBUFRFUiwKKyAgJ2Jvd2VyX2NvbXBvbmVudHMvYW5ndWxh
ci9hbmd1bGFyLmpzJywKKyAgJ2Jvd2VyX2NvbXBvbmVudHMvYW5ndWxhci1tb2Nrcy9hbmd1bGFy
LW1vY2tzLmpzJywKKyAgJ2pzLyoqLyouanMnLAorICAndGVzdC91bml0LyoqLyouanMnCitdOwor
CithdXRvV2F0Y2ggPSB0cnVlOworCiticm93c2VycyA9IFsnQ2hyb21lJ107CkluZGV4OiBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2FuZ3VsYXJqcy90ZXN0L3VuaXQvZGlyZWN0aXZlc1NwZWMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9hbmd1bGFyanMvdGVzdC91bml0L2RpcmVjdGl2ZXNTcGVjLmpzCShyZXZpc2lvbiAwKQorKysg
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9hbmd1bGFyanMvdGVzdC91bml0L2RpcmVjdGl2ZXNTcGVjLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTYgQEAKKy8qZ2xvYmFsIGRlc2NyaWJlLCBpdCwgYmVmb3JlRWFjaCwgaW5q
ZWN0LCBleHBlY3QsIGFuZ3VsYXIqLworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7
CisKKyAgICBiZWZvcmVFYWNoKG1vZHVsZSgndG9kb212YycpKTsKKworICAgIGRlc2NyaWJlKCd0
b2RvQmx1ciBkaXJlY3RpdmUnLCBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHNjb3BlLCBjb21waWxl
OworCisgICAgYmVmb3JlRWFjaChpbmplY3QoZnVuY3Rpb24gKCRyb290U2NvcGUsICRjb21waWxl
KSB7CisgICAgc2NvcGUgPSAkcm9vdFNjb3BlLiRuZXcoKTsKKyAgICBjb21waWxlID0gJGNvbXBp
bGU7CisgICAgfSkpOworCisgICAgaXQoJ3Nob3VsZCAkYXBwbHkgb24gYmx1cicsIGZ1bmN0aW9u
ICgpIHsKKyAgICB2YXIgZWwsCisgICAgbW9jayA9IHsKKyAgICBjYWxsZWQ6IGZhbHNlLAorICAg
IGNhbGw6IGZ1bmN0aW9uICgpIHsgdGhpcy5jYWxsZWQgPSB0cnVlOyB9CisgICAgfTsKKworICAg
IHNjb3BlLm1vY2sgPSBtb2NrOworICAgIGVsID0gYW5ndWxhci5lbGVtZW50KCc8aW5wdXQgdG9k
by1ibHVyPSJtb2NrLmNhbGwoKSI+Jyk7CisgICAgY29tcGlsZShlbCkoc2NvcGUpOworCisgICAg
ZWwudHJpZ2dlckhhbmRsZXIoJ2JsdXInKTsKKyAgICBzY29wZS4kZGlnZXN0KCk7CisKKyAgICBl
eHBlY3QobW9jay5jYWxsZWQpLnRvQmVUcnV0aHkoKTsKKyAgICB9KTsKKyAgICB9KTsKKworICAg
IGRlc2NyaWJlKCd0b2RvRm9jdXMgZGlyZWN0aXZlJywgZnVuY3Rpb24gKCkgeworICAgIHZhciBz
Y29wZSwgY29tcGlsZSwgYnJvd3NlcjsKKworICAgIGJlZm9yZUVhY2goaW5qZWN0KGZ1bmN0aW9u
ICgkcm9vdFNjb3BlLCAkY29tcGlsZSwgJGJyb3dzZXIpIHsKKyAgICBzY29wZSA9ICRyb290U2Nv
cGUuJG5ldygpOworICAgIGNvbXBpbGUgPSAkY29tcGlsZTsKKyAgICBicm93c2VyID0gJGJyb3dz
ZXI7CisgICAgfSkpOworCisgICAgaXQoJ3Nob3VsZCBmb2N1cyBvbiB0cnV0aHkgZXhwcmVzc2lv
bicsIGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgZWwgPSBhbmd1bGFyLmVsZW1lbnQoJzxpbnB1dCB0
b2RvLWZvY3VzPSJmb2N1cyI+Jyk7CisgICAgc2NvcGUuZm9jdXMgPSBmYWxzZTsKKworICAgIGNv
bXBpbGUoZWwpKHNjb3BlKTsKKyAgICBleHBlY3QoYnJvd3Nlci5kZWZlcnJlZEZucy5sZW5ndGgp
LnRvQmUoMCk7CisKKyAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkgeworICAgIHNjb3BlLmZv
Y3VzID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIGV4cGVjdChicm93c2VyLmRlZmVycmVkRm5zLmxl
bmd0aCkudG9CZSgxKTsKKyAgICB9KTsKKyAgICB9KTsKK30oKSk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy90ZXN0L3VuaXQvdG9kb0N0cmxTcGVjLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxh
cmpzL3Rlc3QvdW5pdC90b2RvQ3RybFNwZWMuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy90ZXN0L3VuaXQvdG9kb0N0cmxTcGVjLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTg2IEBACisvKmdsb2JhbCBkZXNjcmliZSwgaXQsIGJlZm9yZUVhY2gsIGluamVjdCwgZXhwZWN0
Ki8KKyhmdW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgZGVzY3JpYmUoJ1Rv
ZG8gQ29udHJvbGxlcicsIGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgY3RybCwgc2NvcGU7CisgICAg
dmFyIHRvZG9MaXN0OworICAgIHZhciB0b2RvU3RvcmFnZSA9IHsKKyAgICBzdG9yYWdlOiB7fSwK
KyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy5zdG9yYWdlOworICAgIH0s
CisgICAgcHV0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICB0aGlzLnN0b3JhZ2UgPSB2YWx1ZTsK
KyAgICB9CisgICAgfTsKKworICAgIC8vIExvYWQgdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBh
cHAsIG9ubHkgJ25nJyBpcyBsb2FkZWQgYnkgZGVmYXVsdC4KKyAgICBiZWZvcmVFYWNoKG1vZHVs
ZSgndG9kb212YycpKTsKKworICAgIGJlZm9yZUVhY2goaW5qZWN0KGZ1bmN0aW9uICgkY29udHJv
bGxlciwgJHJvb3RTY29wZSkgeworICAgIHNjb3BlID0gJHJvb3RTY29wZS4kbmV3KCk7CisgICAg
Y3RybCA9ICRjb250cm9sbGVyKCdUb2RvQ3RybCcsIHsgJHNjb3BlOiBzY29wZSB9KTsKKyAgICB9
KSk7CisKKyAgICBpdCgnc2hvdWxkIG5vdCBoYXZlIGFuIGVkaXRlZCBUb2RvIG9uIHN0YXJ0Jywg
ZnVuY3Rpb24gKCkgeworICAgIGV4cGVjdChzY29wZS5lZGl0ZWRUb2RvKS50b0JlTnVsbCgpOwor
ICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBub3QgaGF2ZSBhbnkgVG9kb3Mgb24gc3RhcnQnLCBm
dW5jdGlvbiAoKSB7CisgICAgZXhwZWN0KHNjb3BlLnRvZG9zLmxlbmd0aCkudG9CZSgwKTsKKyAg
ICB9KTsKKworICAgIGl0KCdzaG91bGQgaGF2ZSBhbGwgVG9kb3MgY29tcGxldGVkJywgZnVuY3Rp
b24gKCkgeworICAgIHNjb3BlLiRkaWdlc3QoKTsKKyAgICBleHBlY3Qoc2NvcGUuYWxsQ2hlY2tl
ZCkudG9CZVRydXRoeSgpOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ3RoZSBwYXRoJywgZnVu
Y3Rpb24gKCkgeworICAgIGl0KCdzaG91bGQgZGVmYXVsdCB0byAiLyInLCBmdW5jdGlvbiAoKSB7
CisgICAgZXhwZWN0KHNjb3BlLmxvY2F0aW9uLnBhdGgoKSkudG9CZSgnLycpOworICAgIH0pOwor
CisgICAgZGVzY3JpYmUoJ2JlaW5nIGF0IC9hY3RpdmUnLCBmdW5jdGlvbiAoKSB7CisgICAgaXQo
J3Nob3VsZCBmaWx0ZXIgbm9uLWNvbXBsZXRlZCcsIGluamVjdChmdW5jdGlvbiAoJGNvbnRyb2xs
ZXIpIHsKKyAgICBjdHJsID0gJGNvbnRyb2xsZXIoJ1RvZG9DdHJsJywgeworICAgICRzY29wZTog
c2NvcGUsCisgICAgJGxvY2F0aW9uOiB7CisgICAgcGF0aDogZnVuY3Rpb24gKCkgeyByZXR1cm4g
Jy9hY3RpdmUnOyB9CisgICAgfQorICAgIH0pOworCisgICAgc2NvcGUuJGRpZ2VzdCgpOworICAg
IGV4cGVjdChzY29wZS5zdGF0dXNGaWx0ZXIuY29tcGxldGVkKS50b0JlRmFsc3koKTsKKyAgICB9
KSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgnYmVpbmcgYXQgL2NvbXBsZXRlZCcsIGZ1bmN0
aW9uICgpIHsKKyAgICBpdCgnc2hvdWxkIGZpbHRlciBjb21wbGV0ZWQnLCBpbmplY3QoZnVuY3Rp
b24gKCRjb250cm9sbGVyKSB7CisgICAgY3RybCA9ICRjb250cm9sbGVyKCdUb2RvQ3RybCcsIHsK
KyAgICAkc2NvcGU6IHNjb3BlLAorICAgICRsb2NhdGlvbjogeworICAgIHBhdGg6IGZ1bmN0aW9u
ICgpIHsgcmV0dXJuICcvY29tcGxldGVkJzsgfQorICAgIH0KKyAgICB9KTsKKworICAgIHNjb3Bl
LiRkaWdlc3QoKTsKKyAgICBleHBlY3Qoc2NvcGUuc3RhdHVzRmlsdGVyLmNvbXBsZXRlZCkudG9C
ZVRydXRoeSgpOworICAgIH0pKTsKKyAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdo
YXZpbmcgbm8gVG9kb3MnLCBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGN0cmw7CisKKyAgICBiZWZv
cmVFYWNoKGluamVjdChmdW5jdGlvbiAoJGNvbnRyb2xsZXIpIHsKKyAgICB0b2RvU3RvcmFnZS5z
dG9yYWdlID0gW107CisgICAgY3RybCA9ICRjb250cm9sbGVyKCdUb2RvQ3RybCcsIHsKKyAgICAk
c2NvcGU6IHNjb3BlLAorICAgIHRvZG9TdG9yYWdlOiB0b2RvU3RvcmFnZQorICAgIH0pOworICAg
IHNjb3BlLiRkaWdlc3QoKTsKKyAgICB9KSk7CisKKyAgICBpdCgnc2hvdWxkIG5vdCBhZGQgZW1w
dHkgVG9kb3MnLCBmdW5jdGlvbiAoKSB7CisgICAgc2NvcGUubmV3VG9kbyA9ICcnOworICAgIHNj
b3BlLmFkZFRvZG8oKTsKKyAgICBzY29wZS4kZGlnZXN0KCk7CisgICAgZXhwZWN0KHNjb3BlLnRv
ZG9zLmxlbmd0aCkudG9CZSgwKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgbm90IGFkZCBp
dGVtcyBjb25zaXN0aW5nIG9ubHkgb2Ygd2hpdGVzcGFjZXMnLCBmdW5jdGlvbiAoKSB7CisgICAg
c2NvcGUubmV3VG9kbyA9ICcgICAnOworICAgIHNjb3BlLmFkZFRvZG8oKTsKKyAgICBzY29wZS4k
ZGlnZXN0KCk7CisgICAgZXhwZWN0KHNjb3BlLnRvZG9zLmxlbmd0aCkudG9CZSgwKTsKKyAgICB9
KTsKKworCisgICAgaXQoJ3Nob3VsZCB0cmltIHdoaXRlc3BhY2UgZnJvbSBuZXcgVG9kb3MnLCBm
dW5jdGlvbiAoKSB7CisgICAgc2NvcGUubmV3VG9kbyA9ICcgIGJ1eSBzb21lIHVuaWNvcm5zICAn
OworICAgIHNjb3BlLmFkZFRvZG8oKTsKKyAgICBzY29wZS4kZGlnZXN0KCk7CisgICAgZXhwZWN0
KHNjb3BlLnRvZG9zLmxlbmd0aCkudG9CZSgxKTsKKyAgICBleHBlY3Qoc2NvcGUudG9kb3NbMF0u
dGl0bGUpLnRvQmUoJ2J1eSBzb21lIHVuaWNvcm5zJyk7CisgICAgfSk7CisgICAgfSk7CisKKyAg
ICBkZXNjcmliZSgnaGF2aW5nIHNvbWUgc2F2ZWQgVG9kb3MnLCBmdW5jdGlvbiAoKSB7CisgICAg
dmFyIGN0cmw7CisKKyAgICBiZWZvcmVFYWNoKGluamVjdChmdW5jdGlvbiAoJGNvbnRyb2xsZXIp
IHsKKyAgICB0b2RvTGlzdCA9IFt7CisgICAgJ3RpdGxlJzogJ1VuY29tcGxldGVkIEl0ZW0gMCcs
CisgICAgJ2NvbXBsZXRlZCc6IGZhbHNlCisgICAgfSwgeworICAgICd0aXRsZSc6ICdVbmNvbXBs
ZXRlZCBJdGVtIDEnLAorICAgICdjb21wbGV0ZWQnOiBmYWxzZQorICAgIH0sIHsKKyAgICAndGl0
bGUnOiAnVW5jb21wbGV0ZWQgSXRlbSAyJywKKyAgICAnY29tcGxldGVkJzogZmFsc2UKKyAgICB9
LCB7CisgICAgJ3RpdGxlJzogJ0NvbXBsZXRlZCBJdGVtIDAnLAorICAgICdjb21wbGV0ZWQnOiB0
cnVlCisgICAgfSwgeworICAgICd0aXRsZSc6ICdDb21wbGV0ZWQgSXRlbSAxJywKKyAgICAnY29t
cGxldGVkJzogdHJ1ZQorICAgIH1dOworCisgICAgdG9kb1N0b3JhZ2Uuc3RvcmFnZSA9IHRvZG9M
aXN0OworICAgIGN0cmwgPSAkY29udHJvbGxlcignVG9kb0N0cmwnLCB7CisgICAgJHNjb3BlOiBz
Y29wZSwKKyAgICB0b2RvU3RvcmFnZTogdG9kb1N0b3JhZ2UKKyAgICB9KTsKKyAgICBzY29wZS4k
ZGlnZXN0KCk7CisgICAgfSkpOworCisgICAgaXQoJ3Nob3VsZCBjb3VudCBUb2RvcyBjb3JyZWN0
bHknLCBmdW5jdGlvbiAoKSB7CisgICAgZXhwZWN0KHNjb3BlLnRvZG9zLmxlbmd0aCkudG9CZSg1
KTsKKyAgICBleHBlY3Qoc2NvcGUucmVtYWluaW5nQ291bnQpLnRvQmUoMyk7CisgICAgZXhwZWN0
KHNjb3BlLmNvbXBsZXRlZENvdW50KS50b0JlKDIpOworICAgIGV4cGVjdChzY29wZS5hbGxDaGVj
a2VkKS50b0JlRmFsc3koKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgc2F2ZSBUb2RvcyB0
byBsb2NhbCBzdG9yYWdlJywgZnVuY3Rpb24gKCkgeworICAgIGV4cGVjdCh0b2RvU3RvcmFnZS5z
dG9yYWdlLmxlbmd0aCkudG9CZSg1KTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgcmVtb3Zl
IFRvZG9zIHcvbyB0aXRsZSBvbiBzYXZpbmcnLCBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHRvZG8g
PSB0b2RvTGlzdFsyXTsKKyAgICB0b2RvLnRpdGxlID0gJyc7CisKKyAgICBzY29wZS5kb25lRWRp
dGluZyh0b2RvKTsKKyAgICBleHBlY3Qoc2NvcGUudG9kb3MubGVuZ3RoKS50b0JlKDQpOworICAg
IH0pOworCisgICAgaXQoJ3Nob3VsZCB0cmltIFRvZG9zIG9uIHNhdmluZycsIGZ1bmN0aW9uICgp
IHsKKyAgICB2YXIgdG9kbyA9IHRvZG9MaXN0WzBdOworICAgIHRvZG8udGl0bGUgPSAnIGJ1eSBt
b2FyIHVuaWNvcm5zICAnOworCisgICAgc2NvcGUuZG9uZUVkaXRpbmcodG9kbyk7CisgICAgZXhw
ZWN0KHNjb3BlLnRvZG9zWzBdLnRpdGxlKS50b0JlKCdidXkgbW9hciB1bmljb3JucycpOworICAg
IH0pOworCisgICAgaXQoJ2NsZWFyQ29tcGxldGVkVG9kb3MoKSBzaG91bGQgY2xlYXIgY29tcGxl
dGVkIFRvZG9zJywgZnVuY3Rpb24gKCkgeworICAgIHNjb3BlLmNsZWFyQ29tcGxldGVkVG9kb3Mo
KTsKKyAgICBleHBlY3Qoc2NvcGUudG9kb3MubGVuZ3RoKS50b0JlKDMpOworICAgIH0pOworCisg
ICAgaXQoJ21hcmtBbGwoKSBzaG91bGQgbWFyayBhbGwgVG9kb3MgY29tcGxldGVkJywgZnVuY3Rp
b24gKCkgeworICAgIHNjb3BlLm1hcmtBbGwoKTsKKyAgICBzY29wZS4kZGlnZXN0KCk7CisgICAg
ZXhwZWN0KHNjb3BlLmNvbXBsZXRlZENvdW50KS50b0JlKDUpOworICAgIH0pOworCisgICAgaXQo
J3JldmVydFRvZG8oKSBnZXQgYSBUb2RvIHRvIGl0cyBwcmV2aW91cyBzdGF0ZScsIGZ1bmN0aW9u
ICgpIHsKKyAgICB2YXIgdG9kbyA9IHRvZG9MaXN0WzBdOworICAgIHNjb3BlLmVkaXRUb2RvKHRv
ZG8pOworICAgIHRvZG8udGl0bGUgPSAnVW5pY29ybiBzcGFya2x5IHNreXB1ZmZsZXMuJzsKKyAg
ICBzY29wZS5yZXZlcnRFZGl0aW5nKHRvZG8pOworICAgIHNjb3BlLiRkaWdlc3QoKTsKKyAgICBl
eHBlY3Qoc2NvcGUudG9kb3NbMF0udGl0bGUpLnRvQmUoJ1VuY29tcGxldGVkIEl0ZW0gMCcpOwor
ICAgIH0pOworICAgIH0pOworICAgIH0pOworfSgpKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jv
d2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmcucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBpbWFn
ZS9wbmcKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21t
b24vYmcucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMv
dG9kb212Yy1jb21tb24vYmcucG5nCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93
ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmcJKHdvcmtpbmcgY29weSkKClByb3Bl
cnR5IGNoYW5nZXMgb246IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1j
b21tb24vYmcucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAj
IworaW1hZ2UvcG5nClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKCmlWQk9SdzBLR2dv
QUFBQU5TVWhFVWdBQUFHUUFBQUJrQWdNQUFBQU5qSDNIQUFBQURGQk1WRVh1N3U3cjYrdm01dWJm
MzkrdDN6WnoKQUFBSC9VbEVRVlI0WG5XVzBXcmlpaGFHbDBIRlNLY2tRU1VKclpoZ0pBbldaMmk4
bWoxVXFibmFVNm9ZNzZaVW4wRURaNWdPVXpGaAp6akFXbFNUTUdkcWllWVk2dEtYMVNzVks5YW9W
bGNhbk9KNjcyWHYzUE1IUDR2L1d0eGIwcHBmZDhXTHhkUE92MjZ2NXJEdVpQenZPCmkvTnJXZ2Rh
OEhBK2tmY2liczZGb1NFUlIvQVlobmw1R3Q3dVpPMjlqYjNtdTdmaHkrTk9ZeU94MTJtVEo4MzZJ
YkNZcTFDVERDWFAKWUhrSlk4cVZ2SkkzZEt1TXdPMW9lRDIvbnVxci9zM0Q0RjU3bnQyWFY0dlY4
NU1GbmxnQUNJRm5VUzlIdThpQW14VUVGOFNFYUJEKwpQTnFKYnpiYjVNV1gxc1Zacm5YY2FWSzVS
R0t6RXdhcm91Vk54Y3dyU1JsbkpWbVI4Vm8rWTJvNkFYUG52ank3L200K2ZGMm4vTHp1CmpjeUhk
ZkxqNHhBQTV6MCttbVlwb0dqQlIzSWNSOUVCM2h1S3dZYnRTKzhrU20vakY1c2J4VlE4dlplNlNI
UTJzdGt0MENVc285UXcKQ1ZGd3BxSXdlVU0xb0tCYkVRU1cwN3RCZnp4eUZ1YjFiREg4ZFQyNW1Z
N3JaOTlYSDRIM2MySUlEYm9JVHFSNTBSTVRJNEVZNXhVaQpNZWdjYlorUnpVVEpUcVIzTnNQRlAv
WTI5dzRhdVM5ZkxrRFhqRWhHU3liTHV1cktRM2svcjhoTXpiV3I1bUU1dWhvNkw3T1QyOFcwCit6
aTZ0aHluZTdWMDVnOUxFR0l4bnZmRW9uVElqUk1zUW1NMEh2TVRqT2lITjZuTHNGQXNWVXRvc2RR
V2pwcXRackgwL2pLY2JVQk4KMVF2Sm1xN0pHc09xbVNTTFNMcWtFVVlGZ2J1SHordCtWcy96MVhJ
Nm1BMjEzdkRuWUx4Y09YT0lzdEVJN1JWUmtjS2lBa0ZDRENXRApVZEpEQ2RENjhQNDhmbGJ0cE91
SHhXeXBrYVBlTmNMTjdHYXFBN0pzYWVXTWJNTCt1cVdNWE11dmN5Tkp4SldCM3Qzejh1eXpjemxk
ClRwOXU2N2V6cTlYNHFydDZ1djRHUkN5SytMR0lOMEM0bzI2YUVERlBFRWR4aGtWaHI5RSt2dXhz
TmRvbkI4M1dkdnR6Ni95eXZaTkkKMlNYQXdDb2JyTVNxMHU1dTJhVVJDbU1VakVoUzB1RFZXUmJm
SGxkQW95NmVScndDZ3BHWUtCS3hXSVNNNElDTEhCeHZ4RGQzN1BCcApGczN0Sk1KeE81Vkk4SWQy
c1ZvRXF5QkxqTUhxbVlLUnJGVjJ5MFlaVkt0UVF6QzRXWTNOaVhreVhLNW04MW4vZVRuNmVqVy91
Ymg1CnVRTXE1RjdUakFUUUtDZUlva0I1UWpRZEMrRjhGUDdDc24vNzRHSW52SkhJZHY2d1FaSlZr
MUgyTlZhV3BZSW1XWWFpN2pNNFVhakIKYXFKTjdoYy82cld2bzk1ZzNGOCtqbDVPNWpObk1BZkd4
WGxvSDAvektJNUhpUWlOMERFQmphQ0lEOExoOE9hcmJNUHJTMnBvRml4Zgp6cDJUKytGcTJuT2VC
NC9EOFhTNW1CaExjekVGMU9jV2ZMU1hwc1VZSHFBWVFSUUVHdkZRZ1NqWWgvWjIrMVA4b0hGdUh6
VlB5VlJMClBFelFaNVJkaGRlUVZsVkRqMEIvTlI3WEY4NTQ1U3h2SnRadHIvOHdjUjdOYnJjUEJP
ckZQYlFZOEFUWmdJQUtIcEdMMFV5SXd0elEKMmpwKzAwbGs5ejdFbTRlTmV2aDlybE5OVnhPbjlp
SFVETGFjQnlWWnJ1V3hTc0ZFVEVYUlphMWc2ZEI5dkIydmV2M3h3M1R5bjUrOQp3YTNWdXg5Mkgv
VDVEZmpSd05wcXBDZnE1bEJhOEdPb3kwdGhoQXNQd0xiZE9FdVIyV0tEVEcwV3Q0V1REOEp4dTly
ZU9EcURncHlSCmtGMFh3eHFLZ1ZzNGdVZ1JhMS9CMVF3OGpBYmZ2djNvZjF3T2wxUDFkemxBMU9O
bG9tZ285bzg5Z3RiQk8vTGtxTlM1K05UeWIvcFAKUzZlWDJiZUhwK2xxRlJqQ1VCQk5MKy9YeW12
ZURNVzBMQVdYZEVLSHY3alRtZC9VSzA1dlBQemUrd2xrS0NpdTUyRjV0eGhsZVMvaApDWkloWUdp
TWhXSzZkYkNWVG1UajhWUWoyL2xRdjZpZWwxbzd4NmN0VU1DcVdSbEZyUkF5enJKcWhGMkg1ckdD
cGtDOU8reDlYQXh2Cmxvdm54Y25ML0g0eHVia2JkN3ZMTVFoTU1PWVB4U2dSRXltY1Fya29oUVVD
Zmp5RVFkVzIzNkF0dTVuN24zQ3FIYnZaMlRyT3BkdloKRkJoSlFpdlVLbENSelhKNTMyVkpoR2JX
YW9xSndXSzh2TCtmalFaM3Y0YnovdUxhTWJ1UGpyV1kzSDhIbmd1RldENUNvMFRJQXh3bAp1bjF1
Q2dHYTVhSCt0bG5xZk1udHZUdHMybzNPUm1PcjJIekRiMVBwRDVEVWt4bTFuRW51QTZIS2lNdUs3
Rm9WWFZGTkdSNWZ0SVU1CnRNNHQxWEFteThydHhiZlJEK3QyK0xDQWRVaVE1V0wvMUNra0xrdk5v
M2JPM3Fpbmp6NDNxNlg0SCtIRDB6L2I2VDFnOVJxR0ZIUkoKTG1STWk3QXMyY2lZR1VSVE1QZzFI
NTcvK0hwOWR6VVpMSWRuSDFmcTlYd3lldmwyTlFZY3hXTnVmNEFKcmdWSGtnVFFsSi9rZmJUQQp3
Ti9QYVBaTHFwM2FMb2tuVUs1WU9wWjNtV3htVjRsbyt6V05XRXRWVGFvc0RDK2NaVy9nekM1NzNh
ZkJ4ZE5JZlpqT3I2N3ZSei9nCmIvSVVPWkdKc0VMVVEwRzhLalJPaXJudFQvRmNZK3MwamRxbGpm
aFJ2SDNjaElodXlNeSthN2RtNUMwVHF4a1ZXZE54UTlVTkdEOFAKLzkxL21pd0dZNzE3TlhpNXVa
dE9aNU9yeWRRQmxrY0ZQK2x4c3lRUHJHOE5IVTl4aUY4ay9HREhiU0hjZVNVTk1tWEprUEFDVzVG
Wgp1YUFYQ21wWkxraG1Yc0poOVBYL0VBZWlHTUVvVVFnS1FpakVpN1JBNDE1UFZQUUVDT2g4Smcr
LzIvWlp3ajV2blA4T0JlQTZwckVGCmkwMHlDS0ZJdThpdVhKUExaVE9UaExPcm14K2o4MTlQeTd1
dmZ6MUZFQk1Semt0ekxwL1hUWkFobjV1aC9KU0hGWUlFVk1uajZtRnUKTDc3WENpZitQTTFtVTlT
SG81U3ZWRXlBU2NpR2dqT2dsNU95b2lpNytWM0UzTSs0cEF6ODFraGw5Yk0zdWZvMTcwMjduK29U
RUhBMgp4UEJpME04R0NJNE9zUXlFQkRmdERTRndHbSsrYVdWVEc5L3Q5d2RidjhzYkN2bXlLZTNx
Y3Q2eVFETlZnNUVZSkdJd2xnc1d0NVBwCnczVGxQSS92bm1mcnQyQTZ2dXYzNXg5NzUrQUZtdUFD
WGdJTm9pak9CVVV5eXJNOHpmbG9LSDR1dGhxdlNRNklTdVYxSmZ3WGI3YjkKNEM2NXA1QUFBQUFB
U1VWT1JLNUNZSUk9Cgo=
</data>
<flag name="review"
          id="234193"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>